{"id":62,"date":"2014-08-23T14:25:38","date_gmt":"2014-08-23T13:25:38","guid":{"rendered":"http:\/\/www.jelectronique.com\/?p=62"},"modified":"2014-08-30T13:23:04","modified_gmt":"2014-08-30T12:23:04","slug":"tuto-asf-temporisation-avec-la-librairie-delay","status":"publish","type":"post","link":"https:\/\/www.jelectronique.com\/?p=62","title":{"rendered":"TUTO XMEGA (ASF): Temporisation avec la librairie delay"},"content":{"rendered":"<blockquote><p>La derniere version de ce tuto est disponible sur le <a href=\"http:\/\/wiki.jelectronique.com\/doku.php?id=avr_studio_6&amp;#temporisation\">WIKI <\/a><\/p><\/blockquote>\n<div class=\"level3\">\n<p>Dans cette exemple, nous allons simplement faire clignoter une LED. Pour cela, nous allons avoir besoin de cr\u00e9er une temporisation avec la fonction \u201cdelay\u201d de l&rsquo;ASF.<\/p>\n<div class=\"noteclassic\">Il est tr\u00e8s facile de mettre en place ce type de temporisation n\u00e9anmoins cette m\u00e9thode accapare les ressources du microcontr\u00f4leur pendant toute l\u2019ex\u00e9cution de la fonction de temporisation. Il est donc d\u00e9conseill\u00e9 de l&rsquo;utiliser.<\/div>\n<p>Importer les librairies qui sont n\u00e9cessaires. Cliquer sur ASF \u2192 ASF Wizard. Chercher les librairies suivants :<\/p>\n<ul>\n<li class=\"level1\">\n<div class=\"li\">Delay routines (pour les temporisations)<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">GPIO &#8211; G\u00e9n\u00e9ra purpose Input\/Output<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">Generic board support (elle integre des fonctions qui seront necessaire pour utiliser la librairie delay)<\/div>\n<\/li>\n<li class=\"level1\">\n<div class=\"li\">IOPORT &#8211; G\u00e9n\u00e9ra purpose Input\/Output (Librairie que nous avons vu dans la partie entr\u00e9e\/sorties.<\/div>\n<\/li>\n<\/ul>\n<p><a class=\"media\" title=\"avr_studio_asf_delay4.png\" href=\"http:\/\/wiki.jelectronique.com\/lib\/exe\/detail.php?id=avr_studio_6&amp;media=avr_studio_asf_delay4.png\"><img decoding=\"async\" class=\"media\" src=\"http:\/\/wiki.jelectronique.com\/lib\/exe\/fetch.php?w=800&amp;tok=73915b&amp;media=avr_studio_asf_delay4.png\" alt=\"\" width=\"800\" \/><\/a><\/p>\n<p>Cliquer sur Add pour importer les librairies dans votre projet.<\/p>\n<p>La fonction delay est directement li\u00e9e \u00e0 la fr\u00e9quence de fonctionnement de votre micro.<br \/>\nIl est donc important de la d\u00e9finir dans votre projet.<br \/>\nPour cela, faites un clic droit sur \u201cboard_init()\u201d selectionner \u201cGoto implementation\u201d.<br \/>\nVous pouvez voir dans les includes, le fichier \u201cboard.h\u201d. Ouvrer le en faisant un clic droit dessus puis en s\u00e9lectionnant \u201cGoto implementation\u201d.<\/p>\n<p>Vous pouvez voir dans ce fichier, l&rsquo;ensemble des cartes de developpement d&rsquo;ATMEL.<br \/>\nVous trouverez en bas de la liste<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#elif BOARD == USER_BOARD\r\n  \/\/ User-reserved area: #include the header file of your board here (if any).\r\n#  include \u201cuser_board.h\u201c<\/pre>\n<p>Atmel a prevu un fichier \u201cuser_board.h\u201d qui int\u00e9grera les informations sp\u00e9cifiques de votre carte. (Clic droit \u2192 Goto implementation.)<\/p>\n<p>Si vous utilisez un quartz externe, il faudra d\u00e9commenter les 3 lignes et les compl\u00e9ter avec les caract\u00e9ristiques de votre carte.<\/p>\n<p>La fr\u00e9quence de votre horloge (Pour ma part, il s&rsquo;agit d&rsquo;un quartz de 32.768 Khz connect\u00e9 sur les pin TOSC.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">#define BOARD_XOSC_HZ          32768<\/pre>\n<p>Le type d&rsquo;oscillateur externe<\/p>\n<div class=\"table sectionedit12\">\n<table class=\"inline\">\n<tbody>\n<tr class=\"row0\">\n<td class=\"col0\">XOSC_TYPE_32KHZ<\/td>\n<td class=\"col1\">Quartz de 32.768Khz<\/td>\n<\/tr>\n<tr class=\"row1\">\n<td class=\"col0\">XOSC_TYPE_EXTERNAL<\/td>\n<td class=\"col1\">Signal d&rsquo;horloge<\/td>\n<\/tr>\n<tr class=\"row2\">\n<td class=\"col0\">XOSC_TYPE_XTAL<\/td>\n<td class=\"col1\">Quartz de 0.4 \u00e0 16Mhz<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">#define BOARD_XOSC_TYPE        XOSC_TYPE_32KHZ<\/pre>\n<p>Le temps de stabilisation de votre oscillateur. Mettez 1ms pour \u00eatre tranquille.<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">#define BOARD_XOSC_STARTUP_US  1000000<\/pre>\n<p>Ouvrez ensuite le fichier \u201cconf_clock.h\u201d dans le r\u00e9pertoire config de votre projet. Vous trouverez toute une s\u00e9rie de lignes permettant de configurer vos horloges. Pour l&rsquo;instant, nous allons juste nous int\u00e9resser aux premi\u00e8res.<strong>CONFIG_SYSCLK_SOURCE<\/strong> d\u00e9finit la source de votre horloge syst\u00e8me qui peut \u00eatre :<\/p>\n<div class=\"table sectionedit13\">\n<table class=\"inline\">\n<tbody>\n<tr class=\"row0\">\n<td class=\"col0\">SYSCLK_SRC_RC2MHZ<\/td>\n<td class=\"col1\">Oscillateur 2Mhz interne<\/td>\n<\/tr>\n<tr class=\"row1\">\n<td class=\"col0\">SYSCLK_SRC_RC32MHZ<\/td>\n<td class=\"col1\">Oscillateur 32Mhz interne<\/td>\n<\/tr>\n<tr class=\"row2\">\n<td class=\"col0\">SYSCLK_SRC_XOSC<\/td>\n<td class=\"col1\">Oscillateur externe<\/td>\n<\/tr>\n<tr class=\"row3\">\n<td class=\"col0\">SYSCLK_SRC_XOSC<\/td>\n<td class=\"col1\">PLL<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>S\u00e9lectionner le type d&rsquo;horloge que vous utilisez.<\/p>\n<div class=\"noteclassic\">Pour plus d&rsquo;informations sur le fonctionnement des horloges, vous pouvez voir <a class=\"wikilink1\" title=\"xmega\" href=\"http:\/\/wiki.jelectronique.com\/doku.php?id=xmega#horloges\">le tuto sur les XMEGA<\/a><\/div>\n<p>Ouvrez le fichier main.c du projet et compl\u00e9tez avec :<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n#define LED IOPORT_CREATE_PIN(PORTR, 0)\t\/\/LED = PR0\r\n\r\nint main (void)\r\n{\r\n\tsysclk_init();\t\/\/Initialisation horloge syst\u00e8me\r\n\r\n\tboard_init();\t\/\/Initialisation de la carte\r\n\r\n\t\/\/Initialisation des entr\u00e9es\/sorties\r\n\tioport_init();\t\t\t\t\t\/\/Initialisation d'IOPORT\r\n\tioport_set_pin_dir(LED, IOPORT_DIR_OUTPUT);\t\/\/LED_ROUGE est une sortie\r\n\r\n\twhile(1)\r\n\t{\r\n\t\tioport_toggle_pin_level(LED);\t\/\/Inverse l'\u00e9tat de la LED1\r\n\t\tdelay_ms(250);\t\t\t\/\/Tempo de 250ms\r\n\t}\r\n}<\/pre>\n<p>Comme vous le savez les oscillateurs internes de l&rsquo;XMEGA sont calibr\u00e9s. Les valeurs de qualibration sont stock\u00e9es dans le microcontr\u00f4leur mais ne sont pas cherch\u00e9es automatiquement au d\u00e9marrage. La fonction sysclk_init se charge de charger ces valeurs et param\u00e9trer vos horloges comme vous l&rsquo;avez indiqu\u00e9 dans votre projet<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>La derniere version de ce tuto est disponible sur le WIKI Dans cette exemple, nous allons simplement faire clignoter une LED. Pour cela, nous allons avoir besoin de cr\u00e9er une temporisation avec la fonction \u201cdelay\u201d de l&rsquo;ASF. Il est tr\u00e8s&hellip; <a href=\"https:\/\/www.jelectronique.com\/?p=62\" 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-62","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\/62","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=62"}],"version-history":[{"count":6,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/62\/revisions"}],"predecessor-version":[{"id":104,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/62\/revisions\/104"}],"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=62"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=62"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}