{"id":113,"date":"2019-02-04T00:12:53","date_gmt":"2019-02-03T23:12:53","guid":{"rendered":"https:\/\/www.geh-tech.com\/?p=113"},"modified":"2019-02-04T00:12:53","modified_gmt":"2019-02-03T23:12:53","slug":"recevoir-des-trames-dmx-avec-un-pic","status":"publish","type":"post","link":"https:\/\/www.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/","title":{"rendered":"Recevoir des trames DMX avec un PIC"},"content":{"rendered":"<p><a href=\"https:\/\/www.geh-tech.com\/non-classe\/getting-dmx-data-in-a-pic\/\">Need english version ? it&rsquo;s here<\/a><\/p>\n<h1>Introduction<\/h1>\n<p>Lorsque je modifie les fonctions d&rsquo;un projecteur, j&rsquo;utilise le bus DMX pour le piloter. Cet article vous pr&eacute;sente le code en C que j&rsquo;utilise pour d&eacute;coder les donn&eacute;es. Il est utilis&eacute; sur des microcontrolleur PIC de chez Microchip mais il est adaptable &agrave; d&rsquo;autre hardware.<\/p>\n<h1>Pr&eacute;sentation du bus<\/h1>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/developpement-dun-blinder-led-dmx\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">D&eacute;veloppement d'un Blinder LED DMX<\/span><\/a><\/div><p>Avant de commencer, je vous encourage &agrave; lire l&rsquo;article <a href=\"https:\/\/en.wikipedia.org\/wiki\/DMX512\">Wikipedia<\/a>. Il est bien document&eacute; et vous aidera &agrave; comprendre le protocole. Mais, voici quelques explications:<\/p>\n<p><a href=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX_Frame.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-90\" src=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX_Frame.png\" alt=\"\" width=\"925\" height=\"251\"><\/a><\/p>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/reparation-dun-lumisky-lucy-play\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">R&eacute;paration d'un LUMISKY Lucy Play<\/span><\/a><\/div><p>A l&rsquo;arr&ecirc;t, la ligne est &agrave; un niveau haut. Pour indiquer un d&eacute;but de trame il y a un &laquo;&nbsp;break&nbsp;&raquo;. Ce break dure entre 88&micro;s et 100ms. Ensuite, on a le Mark After Break qui dure au moins 8&micro;s.<\/p>\n<p>La premi&egrave;re donn&eacute;es qui est envoy&eacute;e c&rsquo;est le &laquo;&nbsp;Start Code&nbsp;&raquo; comme l&rsquo;indique la norme. En g&eacute;n&eacute;ral le start code sera 0x00. Ce code permet de s&eacute;lectionner tous les dimmers. D&rsquo;autres codes existent et ils sont d&eacute;crit par l&rsquo;ESTA. Ensuite, on a les 511 octets correspondant aux 511 adresses (ou 512 si on compte &agrave; partir de 1). Les donn&eacute;es sont toujours entour&eacute;es d&rsquo;un START et de deux STOP.<\/p>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/realisation-dun-repeteur-dmx-isole\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">R&eacute;alisation d'un r&eacute;p&eacute;teur DMX isol&eacute;<\/span><\/a><\/div><p>C&rsquo;est un protocole relativement simple.<\/p>\n<h1>Comment r&eacute;cup&eacute;rer les donn&eacute;es?<\/h1>\n<p>Pour r&eacute;cup&eacute;rer les donn&eacute;es, on utilise l&rsquo;UART du PIC. Pour ce faire, on va faire une machine &agrave; &eacute;tats.<\/p>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/amplificateur-de-microphone-vers-niveau-ligne\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">Amplificateur de microphone vers niveau ligne<\/span><\/a><\/div><p><a href=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/StateMachine.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-91\" src=\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/StateMachine.png\" alt=\"\" width=\"433\" height=\"541\"><\/a><\/p>\n<ul>\n<li>L&rsquo;&eacute;tat IDLE : C&rsquo;est l&rsquo;&eacute;tat par d&eacute;faut.<\/li>\n<li>Lorsque l&rsquo;UART remonte un FRAME ERROR c&rsquo;est que la ligne est rest&eacute;e trop longtemps &agrave; 0. On est donc dans le BREAK. Pendant cette p&eacute;riode, on doit lire des 0x00 sur la ligne jusqu&rsquo;&agrave; ce qu&rsquo;un nouveau FRAME ERROR soit indiqu&eacute; par l&rsquo;UART. Cela correspond au MAB<\/li>\n<li>On entre dans l&rsquo;&eacute;tat START. Tant que on d&eacute;tecte des FRAME ERROR on est dans le MAB du bus DMX. D&egrave;s que la data vaut 0x00, c&rsquo;est le signal du START CODE. On peut donc passer dans l&rsquo;&eacute;tat DATA.<\/li>\n<li>L&rsquo;&eacute;tat DATA, c&rsquo;est tout simplement la r&eacute;ception des 512 canaux. On n&rsquo;enregistrera que les donn&eacute;es qui nous int&eacute;ressent. Ensuite quand le compteur sera &agrave; 513, on l&egrave;ve un FLAG et on attend la nouvelle trame.<\/li>\n<\/ul>\n<h1>Le code<\/h1>\n<h2>Configuration de l&rsquo;UART<\/h2>\n<p>L&rsquo;UART doit &ecirc;tre configur&eacute; en r&eacute;ception &agrave; la bonne vitesse de 250kbps. Personnellement, je fais un renommage des registres avec les #define.<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">#define DMX_ADR_RCSTA   RC1STA\n#define DMX_REG_RCSTA   0b10000100  \n\/*                        |||||||!- RX9D disabled\n                          ||||||!-- OERR Overrun Error bit disabled\n                          |||||!--- FERR Framing error enable\n                          ||||!---- ADDEN Adress detect disable\n                          |||!----- CREN Disabled &lt;== Has to be switch on to operate\n                          ||!------ SREN Don't care in slave mode\n                          |!------- RX9 8bits\n                          !-------- SPEN enabled\n *\/\n\n\/\/\n#define DMX_RX_ENABLE   RC1STAbits.CREN   \/\/used for RX switch ON\/OFF\n\n#define DMX_ADR_BAUDCN  BAUD1CON\n#define DMX_REG_BAUDCN  0b00000000  \n\/*                        |||||||!- ABDEN disabled\n                          ||||||!-- WUE disabled\n                          |||||!--- Not used\n                          ||||!---- BRG16 8bit baud generator\n                          |||!----- SCKP non inverted\n                          ||!------ Not used\n                          |!------- RCIDL cleared\n                          !-------- ABDOVF disabled\n *\/\n\n\n\/\/Baud Rate = 250kbps (@FOSC=16MHz)\n#define DMX_ADR_SPBRGL  SP1BRGL\n#define DMX_REG_SPBRGL  0\n#define DMX_ADR_SPBRGH  SP1BRGH\n#define DMX_REG_SPBRGH  0\n#define DMX_ADR_RCREG   RC1REG\n\n#define DMX_INT_RXIF    RC1IF\n#define DMX_INT_FERR    RC1STAbits.FERR\n#define DMX_INT_OERR    RC1STAbits.OERR\n\n#define DMX_BIT_RXEN    RC1IE\n<\/pre>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/reparation-dun-marantz-pm350\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">Reparation d'un Marantz PM350<\/span><\/a><\/div><p>Ensuite, dans la libraire DMX, il y a la fonction d&rsquo;initialisation:<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">void DMX_UART_Init(void)\n{\n\/* Function : DMX_UART_Init\n * Argument : None\n * Returns  : None\n * \n * Description :\n * Configure the UART and TIMER for the DMX reception\n * The UART RX has to be switched on before using it.\n *\/\n\n    \/\/configuration UART\n    DMX_ADR_TXSTA\t= DMX_REG_TXSTA;\n    DMX_ADR_RCSTA\t= DMX_REG_RCSTA;\n    DMX_ADR_BAUDCN\t= DMX_REG_BAUDCN;\n    DMX_ADR_SPBRGL\t= DMX_REG_SPBRGL;\n    DMX_ADR_SPBRGH\t= DMX_REG_SPBRGH;\n    DMX_ADR_RCREG\t= 0;\n\n    \/\/TIMER configuration for timeout detection\n    DMX_BIT_WDGIE = 0;\n    DMX_REG_WDG = 0;\n    DMX_INT_WDG = 0;\n    \n    \/\/Initialisation of DMX status\n    DMXState\t\t= DMX_BUS_IDLE;\n    DMXRx.NEW_DATA = 0;\n}    \n<\/pre>\n<p>Quelques fonctions pour activer ou d&eacute;sactiver l&rsquo;UART<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">void DMX_UART_Start()\n{\n    char dummy = DMX_ADR_RCREG;\n    DMX_RX_Switch(1);\n    DMX_RX_INT_Switch(1);\n    DMX_Timeout_Switch(1);\n}\n\nvoid DMX_UART_Stop()\n{\n    DMX_Timeout_Switch(0);\n    DMX_RX_Switch(0);\n    DMX_RX_INT_Switch(0);\n    char dummy = DMX_ADR_RCREG;\n}<\/pre>\n<h2>Les interruptions<\/h2>\n<div class=\"internal-linking-related-contents\"><a href=\"https:\/\/www.geh-tech.com\/index.php\/tuto1-sd-to-microcontroleur\/\" class=\"template-2\"><span class=\"cta\">Lire la suite<\/span><span class=\"postTitle\">Tutoriel : connecter une carte SD &agrave; un microcontr&ocirc;leur part 1<\/span><\/a><\/div><p>Pour faire fonctionner la machine &agrave; &eacute;tats, il nous faut des &eacute;v&eacute;nements. Pour cela, on va utiliser les IT de l&rsquo;UART.<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">    if(DMX_INT_RXIF){\n        DMX_UART_IT();\n    }\n\/\/DMX_INT_RXIF is UART IT Flag (RC1IF for ex)<\/pre>\n<h2>La fonction de r&eacute;ception<\/h2>\n<p>N&rsquo;oubliez pas de mettre dans le .h de la librairie la d&eacute;claration de l&rsquo;&eacute;num&eacute;rateur.<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">typedef enum {\n    DMX_BUS_IDLE,\n    DMX_BUS_BREAK,\n    DMX_BUS_START,\n    DMX_BUS_DATA,\n}DMX_BUS_STATE;<\/pre>\n<p>Et voici la fonction de r&eacute;ception<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">\/*----------------------------------------------------------------------------*\/\n\/*                        VARIABLES GLOBALES                                  *\/\n\/*----------------------------------------------------------------------------*\/\nDMX_BUS_STATE   DMXState;\nunsigned int    count;\n\n\n\n\/***********************************************************************\/\n\/* STATE MACHINE                                                       *\/\n\/***********************************************************************\/\nvoid DMX_UART_IT()\n{\n\/* Function : DMX_UART_IT\n * Argument : None\n * Returns  : None\n * \n * Description :\n * State machine for the DMX protocol\n *\/\n    \n    \/\/Variable declaration\n    char dummy;\t\t\t\t\t\/\/is used to get UART Rx register\n    char i;\n    \n    \/\/d ut de la fonction\n    switch(DMXState)\n    {\n        case DMX_BUS_IDLE:\n            \/\/DMX is in IDLE state. The RX starts to get low. If a framing\n            \/\/error IT occurs, that means that the bus is in START\n            if(DMX_INT_FERR)\n            {\n                \/\/Framing error was detected ==&gt; BREAK condition\n                DMXState = DMX_BUS_BREAK;\n                DMX_REG_WDG = 0;\n            }\n            dummy = DMX_ADR_RCREG;\n            DMX_REG_WDG = 0;\n            break;\n        case DMX_BUS_BREAK:\n            \/\/DMX is in BREAK. The UART will receive continously null data\n            \/\/the data will be discared until a new framing error is detected\n            if(DMX_INT_FERR)\n            {\n                \/\/Framing error was detected and means MAB on the DMX bus\n                DMXState = DMX_BUS_START;\n                DMX_REG_WDG = 0;\n            }\n            dummy = DMX_ADR_RCREG;\n            break;\n        case DMX_BUS_START:\n            \/\/DMX is in MAB and continue to send FERR sequence\n            \/\/when RCREG will get a 0 value without FERR it will be the START\n            \/\/mark.\n            if(DMX_INT_FERR)\n            {\n                \/\/still in MAB\n                dummy = DMX_ADR_RCREG;\n                DMX_REG_WDG = 0;\n            }\n            else\n            {\n                \/\/get value\n                dummy = DMX_ADR_RCREG;\n                if(dummy == 0)\n                {\n                    \/\/it's the START code got to DATA\n                    DMXState = DMX_BUS_DATA;\n                    count = 1;\n                    DMX_REG_WDG = 0;\n                }\n                else\n                {\n                    \/\/wrong start code. Go to IDLE, waiting new sequence\n                    DMXState = DMX_BUS_IDLE;\n                }\n            }\n            break;\n        case DMX_BUS_DATA:\n            \/\/The bus is sending data. waiting for the selected address\n            dummy = DMX_ADR_RCREG;\n            DMX_REG_WDG = 0;\n            \n            \/\/check if in the address, the DMX bus load the new value.\n            if((count &gt;= DMXRx.DMX_ADDRESS) &amp;&amp; (count &lt;= (DMXRx.DMX_ADDRESS + CHANNEL_SIZE))){\n                i = count - DMXRx.DMX_ADDRESS;\n                \n                \/\/loading value:\n                DMXRx.DMX_DATA[i] = dummy;\n            }\n            \n            count++;\n            \/\/When the last data is received, the New DATA flag is set and\n            \/\/the state machine returns to IDLE\n            if(count == 513)\n            {   \n            \tDMXRx.NEW_DATA = 1;\n                DMXState = DMX_BUS_IDLE;\n            }\n            break;\n    }\n}\n<\/pre>\n<h2>La structure des donn&eacute;es<\/h2>\n<p>Vous avez certainement remarqu&eacute; dans le code la pr&eacute;sence de la variable DMXRx. C&rsquo;est une structure qui contient l&rsquo;adresse de d&eacute;part, un tableau de la taille de nombre de canaux et d&rsquo;un flag de nouvelle donn&eacute;es.<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">\/\/DMX Message structure\ntypedef struct{\n    unsigned int DMX_ADDRESS;\n    unsigned char DMX_DATA[CHANNEL_SIZE];\n    unsigned NEW_DATA : 1;\n}DMX_STRUCT;\n\n\/*----------------------------------------------------------------------------*\/\n\/*                        GLOBALES VARIABLES                                  *\/\n\/*----------------------------------------------------------------------------*\/\nDMX_STRUCT      DMXRx;<\/pre>\n<h1>Le timeout<\/h1>\n<p>Vous pouvez faire fonctionner le code sans timeout. Mais, s&rsquo;il vous reste un compteur je vous conseille de le laisser. Le timeout est un simple compteur qui, quand il d&eacute;passe 100ms g&eacute;n&egrave;re une IT qui reset toute la machine et l&rsquo;UART.<\/p>\n<pre class=\"theme:mm-dark-blue lang:c decode:true \">void DMX_timeout_IT()\n{\n\/* Function : DMX_timeout_IT\n * Argument : None\n * Returns  : None\n * \n * Description :\n * When the timer overflows, the interruption reset the state machine in\n * IDLE mode.\n * IT is also cleared.\n *\/\n    \/\/when the timer overflows, the timeout on the DMX is set.\n    DMXState = DMX_BUS_IDLE;\n    DMX_INT_WDG = 0;\n    \n    RC1STAbits.OERR = 0;\n    RC1STAbits.FERR = 0;\n    RC1REG = 0;\n}<\/pre>\n<h1>Et apr&egrave;s?<\/h1>\n<p>Et apr&egrave;s&hellip; dans votre fonction main() vous pouvez traiter les donn&eacute;es re&ccedil;ues pour g&eacute;n&eacute;rer une PWM, une valeur analogique, une sortie binaire etc etc. Dans mes applications, j&rsquo;utilise le flag DMWRx.NEW_DATA pour d&eacute;tecter une nouvelle donn&eacute;e et mettre &agrave; jour la sortie.<\/p>\n<p>That&rsquo;s all.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Need english version ? it&rsquo;s here Introduction Lorsque je modifie les fonctions d&rsquo;un projecteur, j&rsquo;utilise le bus DMX pour le piloter. Cet article vous pr&eacute;sente le code en C que j&rsquo;utilise pour d&eacute;coder les donn&eacute;es. Il est utilis&eacute; sur des microcontrolleur PIC de chez Microchip mais il est adaptable &agrave; d&rsquo;autre hardware. Pr&eacute;sentation du bus<\/p>\n","protected":false},"author":1,"featured_media":89,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[7,8,9,10,11,13,14],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Recevoir des trames DMX avec un PIC - GEH-TECH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Recevoir des trames DMX avec un PIC - GEH-TECH\" \/>\n<meta property=\"og:description\" content=\"Need english version ? it&rsquo;s here Introduction Lorsque je modifie les fonctions d&rsquo;un projecteur, j&rsquo;utilise le bus DMX pour le piloter. Cet article vous pr&eacute;sente le code en C que j&rsquo;utilise pour d&eacute;coder les donn&eacute;es. Il est utilis&eacute; sur des microcontrolleur PIC de chez Microchip mais il est adaptable &agrave; d&rsquo;autre hardware. Pr&eacute;sentation du bus\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/\" \/>\n<meta property=\"og:site_name\" content=\"GEH-TECH\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-03T23:12:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wp2.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"270\" \/>\n\t<meta property=\"og:image:height\" content=\"270\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"gehrhardt\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"gehrhardt\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/\",\"url\":\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/\",\"name\":\"Recevoir des trames DMX avec un PIC - GEH-TECH\",\"isPartOf\":{\"@id\":\"https:\/\/wp2.geh-tech.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\",\"datePublished\":\"2019-02-03T23:12:53+00:00\",\"dateModified\":\"2019-02-03T23:12:53+00:00\",\"author\":{\"@id\":\"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a\"},\"breadcrumb\":{\"@id\":\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#primaryimage\",\"url\":\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\",\"contentUrl\":\"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg\",\"width\":270,\"height\":270},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/wp2.geh-tech.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Recevoir des trames DMX avec un PIC\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wp2.geh-tech.com\/#website\",\"url\":\"https:\/\/wp2.geh-tech.com\/\",\"name\":\"GEH-TECH\",\"description\":\"Make system simple\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wp2.geh-tech.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a\",\"name\":\"gehrhardt\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g\",\"caption\":\"gehrhardt\"},\"sameAs\":[\"http:\/\/wp2.geh-tech.com\"],\"url\":\"https:\/\/www.geh-tech.com\/index.php\/author\/gehrhardt\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Recevoir des trames DMX avec un PIC - GEH-TECH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/","og_locale":"fr_FR","og_type":"article","og_title":"Recevoir des trames DMX avec un PIC - GEH-TECH","og_description":"Need english version ? it&rsquo;s here Introduction Lorsque je modifie les fonctions d&rsquo;un projecteur, j&rsquo;utilise le bus DMX pour le piloter. Cet article vous pr&eacute;sente le code en C que j&rsquo;utilise pour d&eacute;coder les donn&eacute;es. Il est utilis&eacute; sur des microcontrolleur PIC de chez Microchip mais il est adaptable &agrave; d&rsquo;autre hardware. Pr&eacute;sentation du bus","og_url":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/","og_site_name":"GEH-TECH","article_published_time":"2019-02-03T23:12:53+00:00","og_image":[{"width":270,"height":270,"url":"https:\/\/wp2.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","type":"image\/jpeg"}],"author":"gehrhardt","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"gehrhardt","Dur\u00e9e de lecture estim\u00e9e":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/","url":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/","name":"Recevoir des trames DMX avec un PIC - GEH-TECH","isPartOf":{"@id":"https:\/\/wp2.geh-tech.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#primaryimage"},"image":{"@id":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","datePublished":"2019-02-03T23:12:53+00:00","dateModified":"2019-02-03T23:12:53+00:00","author":{"@id":"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a"},"breadcrumb":{"@id":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#primaryimage","url":"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","contentUrl":"https:\/\/www.geh-tech.com\/wp-content\/uploads\/2018\/09\/DMX-1.jpg","width":270,"height":270},{"@type":"BreadcrumbList","@id":"https:\/\/wp2.geh-tech.com\/index.php\/recevoir-des-trames-dmx-avec-un-pic\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/wp2.geh-tech.com\/"},{"@type":"ListItem","position":2,"name":"Recevoir des trames DMX avec un PIC"}]},{"@type":"WebSite","@id":"https:\/\/wp2.geh-tech.com\/#website","url":"https:\/\/wp2.geh-tech.com\/","name":"GEH-TECH","description":"Make system simple","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wp2.geh-tech.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/6b877e9009da307e8ec2924a5bc35c6a","name":"gehrhardt","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/wp2.geh-tech.com\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/d22d84b2d386f2f18f363964f8b3dee7?s=96&d=mm&r=g","caption":"gehrhardt"},"sameAs":["http:\/\/wp2.geh-tech.com"],"url":"https:\/\/www.geh-tech.com\/index.php\/author\/gehrhardt\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/posts\/113"}],"collection":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/comments?post=113"}],"version-history":[{"count":0,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/posts\/113\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/media\/89"}],"wp:attachment":[{"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/media?parent=113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/categories?post=113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geh-tech.com\/index.php\/wp-json\/wp\/v2\/tags?post=113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}