{"id":110,"date":"2014-09-03T19:33:48","date_gmt":"2014-09-03T18:33:48","guid":{"rendered":"http:\/\/www.jelectronique.com\/?p=110"},"modified":"2014-09-03T19:33:48","modified_gmt":"2014-09-03T18:33:48","slug":"tuto-xmega-asf-timer-en-mode-pwm","status":"publish","type":"post","link":"https:\/\/www.jelectronique.com\/?p=110","title":{"rendered":"TUTO XMEGA (ASF) : Timer en mode PWM"},"content":{"rendered":"<p>Un petit exemple rapide sur l&rsquo;utilisation d&rsquo;un timer en mode PWM pour faire varier la luminosit\u00e9 d&rsquo;une LED :<\/p>\n<div class=\"level3\">\n<pre class=\"code c\"><span class=\"co2\">#include &lt;asf.h&gt;<\/span>\r\n\u00a0\r\n<span class=\"co2\">#define LED_VERTE IOPORT_CREATE_PIN(PORTD, 5) \/\/LED<\/span>\r\n\u00a0\r\n<span class=\"co2\">#define Periode 1075\t<\/span>\r\n\u00a0\r\n<span class=\"kw4\">int<\/span> main <span class=\"br0\">(<\/span><span class=\"kw4\">void<\/span><span class=\"br0\">)<\/span>\r\n<span class=\"br0\">{<\/span>\r\n\t<span class=\"co1\">\/\/Initialisation du controleur d'interruptions<\/span>\r\n\tpmic_init<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\r\n\t<span class=\"co1\">\/\/Initialisation de l'horloge\t<\/span>\r\n\tsysclk_init<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\t\r\n\u00a0\r\n\t<span class=\"co1\">\/\/Initialisation des entr\u00e9es\/sorties<\/span>\r\n\tioport_set_pin_dir<span class=\"br0\">(<\/span>LED_VERTE<span class=\"sy0\">,<\/span> IOPORT_DIR_OUTPUT<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0\r\n\t<span class=\"co1\">\/\/Initialisation du Timer 1<\/span>\r\n\ttc_enable<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\r\n\ttc_set_wgm<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"sy0\">,<\/span> TC_WGMODE_SINGLESLOPE_gc<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t<span class=\"co1\">\/\/Choix du mode du timer1 et du mode PWM<\/span>\r\n\ttc_write_period<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"sy0\">,<\/span> Periode<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\t<span class=\"co1\">\/\/D\u00e9finition de la p\u00e9riode du PWM<\/span>\r\n\ttc_write_cc<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"sy0\">,<\/span> TC_CCB<span class=\"sy0\">,<\/span> Periode<span class=\"sy0\">\/<\/span><span class=\"nu0\">100<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t<span class=\"co1\">\/\/Allume la LED \u00e0 1% de la luminosit\u00e9<\/span>\r\n\ttc_enable_cc_channels<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"sy0\">,<\/span>TC_CCBEN<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\t<span class=\"co1\">\/\/Active la sortie CCB du Timer 1 - Donc PD5<\/span>\r\n\tcpu_irq_enable<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\t\t\t<span class=\"co1\">\/\/Activation de l'interruption globale\t\t\t\t\t<\/span>\r\n\ttc_write_clock_source<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"sy0\">,<\/span> TC_CLKSEL_DIV8_gc<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span><span class=\"co1\">\/\/Activation de l'horloge du timer 1 fclksys\/8<\/span>\r\n\u00a0\r\n\tboard_init<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0\r\n\t<span class=\"kw1\">while<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">)<\/span>\r\n\t<span class=\"br0\">{<\/span>\r\n\t\t<span class=\"co1\">\/\/Augemente progressivement la luminosit\u00e9<\/span>\r\n\t\t<span class=\"kw1\">for<\/span><span class=\"br0\">(<\/span><span class=\"kw4\">int<\/span> i<span class=\"sy0\">=<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span>i<span class=\"sy0\">&lt;=<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">;<\/span>i<span class=\"sy0\">++<\/span><span class=\"br0\">)<\/span>\r\n\t\t<span class=\"br0\">{<\/span>\r\n\t\t\ttc_write_cc<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"sy0\">,<\/span> TC_CCB<span class=\"sy0\">,<\/span> Periode<span class=\"sy0\">\/<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">*<\/span>i<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n\t\t\tdelay_ms<span class=\"br0\">(<\/span><span class=\"nu0\">10<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\t\t\r\n\t\t<span class=\"br0\">}<\/span>\r\n\u00a0\r\n\t\t<span class=\"co1\">\/\/Diminue progressivement la luminosit\u00e9<\/span>\r\n\t\t<span class=\"kw1\">for<\/span><span class=\"br0\">(<\/span><span class=\"kw4\">int<\/span> i<span class=\"sy0\">=<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">;<\/span>i<span class=\"sy0\">&gt;=<\/span><span class=\"nu0\">1<\/span><span class=\"sy0\">;<\/span>i<span class=\"sy0\">--<\/span><span class=\"br0\">)<\/span>\r\n\t\t<span class=\"br0\">{<\/span>\r\n\t\t\ttc_write_cc<span class=\"br0\">(<\/span><span class=\"sy0\">&amp;<\/span>TCD1<span class=\"sy0\">,<\/span> TC_CCB<span class=\"sy0\">,<\/span> Periode<span class=\"sy0\">\/<\/span><span class=\"nu0\">100<\/span><span class=\"sy0\">*<\/span>i<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n\t\t\tdelay_ms<span class=\"br0\">(<\/span><span class=\"nu0\">10<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\t\t\t\r\n\t\t<span class=\"br0\">}<\/span>\r\n\u00a0\r\n\t<span class=\"br0\">}<\/span>\r\n<span class=\"br0\">}<\/span><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Un petit exemple rapide sur l&rsquo;utilisation d&rsquo;un timer en mode PWM pour faire varier la luminosit\u00e9 d&rsquo;une LED : #include &lt;asf.h&gt; \u00a0 #define LED_VERTE IOPORT_CREATE_PIN(PORTD, 5) \/\/LED \u00a0 #define Periode 1075 \u00a0 int main (void) { \/\/Initialisation du controleur d&rsquo;interruptions&hellip; <a href=\"https:\/\/www.jelectronique.com\/?p=110\" 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-110","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\/110","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=110"}],"version-history":[{"count":2,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/110\/revisions"}],"predecessor-version":[{"id":115,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=\/wp\/v2\/posts\/110\/revisions\/115"}],"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=110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jelectronique.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}