{"id":54,"date":"2014-08-20T22:07:33","date_gmt":"2014-08-20T21:07:33","guid":{"rendered":"http:\/\/www.jelectronique.com\/?p=54"},"modified":"2014-08-20T22:11:43","modified_gmt":"2014-08-20T21:11:43","slug":"tuto-xmega-entreessorties","status":"publish","type":"post","link":"https:\/\/www.jelectronique.com\/?p=54","title":{"rendered":"TUTO XMEGA : Entr\u00e9es\/Sorties"},"content":{"rendered":"<blockquote><p>La derni\u00e8re version de cette article est disponible sur le <a href=\"http:\/\/wiki.jelectronique.com\/doku.php?id=xmega&amp;#les_ports_d_entreesortie\">WIKI.<\/a><\/p><\/blockquote>\n<p>Les entr\u00e9es\/Sorties des XMEGA sont regroup\u00e9s par port de 8 bits. Ces ports s&rsquo;appellent PORTx o\u00f9 x est la lettre du port. Exemple : PORTA, PORTB. Les Pin indivituelles s&rsquo;appellent Pxn o\u00f9 x correspond au nom du port et n au num\u00e9ro de la pin. Exemple : PA0<\/p>\n<h4 id=\"la_direction\">La direction<\/h4>\n<div class=\"level4\">\n<p>Chaque pin peut \u00eatre utilis\u00e9e en sortie ou en entr\u00e9e. Ce choix se d\u00e9finit dans le registre DIR. Si DIRn est \u00e0 \u201c0\u201d la pin est param\u00e9tr\u00e9e en entr\u00e9e si DIRn est \u00e0 \u201c1\u201d la pin est configur\u00e9e en sortie.<\/p>\n<div class=\"table sectionedit4\">\n<table class=\"inline\">\n<tbody>\n<tr class=\"row0\">\n<th class=\"col0\">Entr\u00e9e<\/th>\n<td class=\"col1\">\u201c0\u201d<\/td>\n<\/tr>\n<tr class=\"row1\">\n<th class=\"col0\">Sortie<\/th>\n<td class=\"col1\">\u201c1\u201d<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<pre class=\"code C\">PORTR.<span class=\"me1\">DIR<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu12\">0xFF<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Met port R en sortie<\/span><\/pre>\n<\/div>\n<h4 id=\"etat_d_une_sortie\">Etat d&rsquo;une sortie<\/h4>\n<div class=\"level4\">\n<p>L&rsquo;\u00e9tat de la sortie est contr\u00f4l\u00e9 par le registre OUT. La sortie passera \u00e0 VCC si OUTn est \u00e0 \u201c1\u201d et la sortie passera \u00e0 0V si la OUTn est \u00e0 \u201c0\u201d<\/p>\n<div class=\"table sectionedit5\">\n<table class=\"inline\">\n<tbody>\n<tr class=\"row0\">\n<th class=\"col0\">0V<\/th>\n<td class=\"col1\">\u201c0\u201d<\/td>\n<\/tr>\n<tr class=\"row1\">\n<th class=\"col0\">VCC<\/th>\n<td class=\"col1\">\u201c1\u201d<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<pre class=\"code C\">PORTR.<span class=\"me1\">OUT<\/span> <span class=\"sy0\">=<\/span> <span class=\"nu12\">0x0F<\/span><span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Met PR0 \u00e0 PR3 3.3V et PR4 \u00e0 PR7 \u00e0 0V<\/span><\/pre>\n<\/div>\n<h4 id=\"lecture_de_l_etat_d_une_entree\">Lecture de l&rsquo;\u00e9tat d&rsquo;une entr\u00e9e<\/h4>\n<div class=\"level4\">\n<p>L&rsquo;\u00e9tat logique d&rsquo;une entr\u00e9e peut \u00eatre obtenu par une lecture du registre IN.<\/p>\n<pre class=\"code C\"><span class=\"kw4\">unsigned<\/span> <span class=\"kw4\">char<\/span> EtatPortA<span class=\"sy0\">;<\/span>\r\nEtatPortA <span class=\"sy0\">=<\/span> PORTA.<span class=\"me1\">IN<\/span><span class=\"sy0\">;<\/span><\/pre>\n<\/div>\n<h4 id=\"configuration\">Configuration<\/h4>\n<div class=\"level4\">\n<p>Chaque Pin peut avoir une configuration particuli\u00e8re. Ce param\u00e9trage est r\u00e9alis\u00e9 via le registre PINnCTRL.<\/p>\n<div class=\"table sectionedit6\">\n<table class=\"inline\">\n<thead>\n<tr class=\"row0\">\n<th class=\"col0\">Nom<\/th>\n<th class=\"col1\">Configuration de l&rsquo;entr\u00e9e\/sortie<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"row1\">\n<td class=\"col0\">PORT_OPC_TOTEM_gc<\/td>\n<td class=\"col1 leftalign\">0 ou VCC<\/td>\n<\/tr>\n<tr class=\"row2\">\n<td class=\"col0\">PORT_OPC_BUSKEEPER_gc<\/td>\n<td class=\"col1\">M\u00e9morise le dernier \u00e9tat sur l&rsquo;entr\u00e9e via une r\u00e9sistance Pull-up ou Pull-down<\/td>\n<\/tr>\n<tr class=\"row3\">\n<td class=\"col0\">PORT_OPC_PULLDOWN_gc<\/td>\n<td class=\"col1\">Pull-down sur l&rsquo;entr\u00e9e<\/td>\n<\/tr>\n<tr class=\"row4\">\n<td class=\"col0\">PORT_OPC_PULLUP_gc<\/td>\n<td class=\"col1\">Pull-up sur l&rsquo;entr\u00e9e<\/td>\n<\/tr>\n<tr class=\"row5\">\n<td class=\"col0\">PORT_OPC_WIREDAND_gc<\/td>\n<td class=\"col1\">OUT=1 \u2192 H, OUT=0 \u2192 0V (Collecteur ouvert)<\/td>\n<\/tr>\n<tr class=\"row6\">\n<td class=\"col0\">PORT_OPC_WIREDANDPULL_gc<\/td>\n<td class=\"col1\">OUT=1 \u2192 Pull-Up, OUT=0 \u2192 0V (Collecteur ouvert avec r\u00e9sistance de tirage)<\/td>\n<\/tr>\n<tr class=\"row7\">\n<td class=\"col0\">PORT_OPC_WIREDOR_gc<\/td>\n<td class=\"col1 leftalign\">OUT=1 \u2192 VCC, OUT=0 \u2192 H<\/td>\n<\/tr>\n<tr class=\"row8\">\n<td class=\"col0\">PORT_OPC_WIREDORPULL_gc<\/td>\n<td class=\"col1\">OUT=1 \u2192 VCC, OUT=0 \u2192 Pull-Down<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"noteclassic\">PORT_OPC_BUSKEEPER_gc permet de maintenir un niveau logique sur un fil qui passe en haute imp\u00e9dance et ainsi \u00e9viter un \u00e9tat ind\u00e9termin\u00e9 sur l&rsquo;entr\u00e9e.<\/div>\n<pre class=\"code C\">PORTA.<span class=\"me1\">PIN0CTRL<\/span> <span class=\"sy0\">|=<\/span> PORT_OPC_PULLUP_gc<span class=\"sy0\">;<\/span> <span class=\"co1\">\/\/Activation de la r\u00e9sistance de tirage \u00e0 l'\u00e9tat haut sur PIN0 du PORT A<\/span><\/pre>\n<p>Sur les PIN d\u00e9clenchant des interruptions, il est possible de d\u00e9finir le mode de d\u00e9clenchement.<\/p>\n<pre class=\"code C\">PORTA.<span class=\"me1\">PIN0CTRL<\/span> <span class=\"sy0\">|=<\/span> PORT_ISC_RISING_gc<span class=\"sy0\">;<\/span><\/pre>\n<div class=\"table sectionedit7\">\n<table class=\"inline\">\n<thead>\n<tr class=\"row0\">\n<th class=\"col0\">Nom<\/th>\n<th class=\"col1\">Configuration de l&rsquo;entr\u00e9e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"row1\">\n<td class=\"col0\">PORT_ISC_BOTHEDGES_gc<\/td>\n<td class=\"col1 leftalign\">Front montant et descendant<\/td>\n<\/tr>\n<tr class=\"row2\">\n<td class=\"col0\">PORT_ISC_RISING_gc<\/td>\n<td class=\"col1 leftalign\">Front montant<\/td>\n<\/tr>\n<tr class=\"row3\">\n<td class=\"col0\">PORT_ISC_FALLING_gc<\/td>\n<td class=\"col1\">Front descendant<\/td>\n<\/tr>\n<tr class=\"row4\">\n<td class=\"col0\">PORT_ISC_LEVEL_gc<\/td>\n<td class=\"col1 leftalign\">Niveau bas<\/td>\n<\/tr>\n<tr class=\"row5\">\n<td class=\"col0\">PORT_ISC_INPUT_DISABLE_gc<\/td>\n<td class=\"col1\">D\u00e9sactivation du buffer d&rsquo;entr\u00e9e<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"noteclassic\">PORT_ISC_INPUT_DISABLE_gc permet de r\u00e9duire la consommation quand la pin n&rsquo;est pas utilis\u00e9e ou utilis\u00e9e en analogique. Dans ce cas, l&rsquo;entr\u00e9e sera dans le registre IN sera toujours \u00e0 0<\/div>\n<div class=\"noteclassic\">PORT_ISC_LEVEL_gc il est possible de faire une detection sur niveau haut en inversant l&rsquo;entr\u00e9e<\/div>\n<\/div>\n<h4 id=\"inversion\">Inversion<\/h4>\n<div class=\"level4\">\n<p>Il est possible d&rsquo;inverser une entr\u00e9e. Appliquer 0V sur l&rsquo;entr\u00e9e donnera un \u201c1\u201d logique et inversement, appliquer VCC donnera un \u201c0\u201d.<\/p>\n<pre class=\"code C\">PORTA.<span class=\"me1\">PIN0CTRL<\/span> <span class=\"sy0\">|=<\/span> PORT_INVEN_bp<span class=\"sy0\">;<\/span><\/pre>\n<\/div>\n<h4 id=\"interruption\">Interruption<\/h4>\n<div class=\"level4\">\n<p>Chaque entr\u00e9e a 2 interruptions. Activer une interruption se fait en 3 \u00e9tapes :<\/p>\n<ol>\n<li class=\"level1\">\n<div class=\"li\">Configurer le registre PINnCTRL (Choix du mode de d\u00e9clenchement, front montant etc \u2026)<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Mettre \u00e0 \u201c1\u201d le bit correspondant \u00e0 l&rsquo;entr\u00e9e dans le registre INT0MASK<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">D\u00e9finir le niveau de priorit\u00e9 en param\u00e9trant les registres INT0LVL et INTLVL<\/div>\n<\/li>\n<\/ol>\n<div class=\"noteclassic\">La priorit\u00e9 s\u00e9lectionn\u00e9e doit \u00eatre activ\u00e9e dans le PMIC (Programmable Multilevel Interrupt Controler). Le flag d&rsquo;interruption global doit \u00e9galement \u00eatre activ\u00e9<\/div>\n<\/div>\n<h4 id=\"sortie_de_veille\">Sortie de veille<\/h4>\n<div class=\"level4\">\n<p>Quand l&rsquo;XMEGA se met en veille sont horloge est d\u00e9sactiv\u00e9e. Un changement sur l&rsquo;entr\u00e9e doit \u00eatre d\u00e9tect\u00e9 de mani\u00e9r\u00e9 asynchrone. Tous les modes de d\u00e9clenchement (front montant, niveau etc \u2026) ne sont pas possible sur toutes les pin. Seule la PIN2 de chaque port permettra un reveil du microcontroleur quelque soit le mode de d\u00e9clenchement choisi. Pour les autres PIN, il faudra soit les param\u00e9trer en PORT_ISC_BOTHEDGES_gc ou en PORT_ISC_LEVEL_gc.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>La derni\u00e8re version de cette article est disponible sur le WIKI. Les entr\u00e9es\/Sorties des XMEGA sont regroup\u00e9s par port de 8 bits. Ces ports s&rsquo;appellent PORTx o\u00f9 x est la lettre du port. Exemple : PORTA, PORTB. Les Pin indivituelles&hellip; <a href=\"https:\/\/www.jelectronique.com\/?p=54\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":26,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-54","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-electronique"],"_links":{"self":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=54"}],"version-history":[{"count":3,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/54\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/54\/revisions\/57"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/media\/26"}],"wp:attachment":[{"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=54"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=54"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}