Aller au contenu

Faire un chenillard avec l’ATtiny84

    La première chose que vous voudrez faire en utilisant un microcontrôleur est probablement de piloter ses Ports. Sur L’ATtiny84 que nous avons sur ma carte de test il y a 8 pattes de disponibles nous allons voir comment les utiliser en nous fabriquant un petit chenillard.

    Le câblage de la carte.

    Nous allons nous intéresser ici aux pattes suivantes:

    1. PA0.
    2. PA1.
    3. PA2.
    4. PA3.
    5. PA7.
    6. PB0.
    7. PB1.
    8. PB2.

    Comme on peut le voir sur le câblage d’autres pattes sont disponibles mais également utilisées par le PORT de programmation ou le #RESET. Ces pattes sont tout a fait valable, mais elles sont plus difficile a utiliser si on souhaite comme c’est mon cas laisser le programmateur sur la carte et programmer le microcontrôleur au fur et a mesure.

    Les pattes que je vous ai énuméré sont donc celles a notre disposition et la première chose que nous allons faire est un chenillard avec 7 LED. Nous allons laisser une patte libre pour pouvoir l’utiliser par la suite pour par exemple inverser le chenillard.

    Le câblage de la plaque LAB.

    Voici ci-dessus comment j’ai câblé la plaque LAB pour faire fonctionner mes LED. Par chance le constructeur nous indique que le composant est capable de piloter une LED directement. Ca va nous éviter d’insérer un transistor supplémentaire sur chaque patte.

    L’information est visible Page 49.

    Il ne reste donc plus qu’a mettre une résistance de limitation puis une LED. Mes LED sont des composants achetés par paquet de 1000 sur Amazon, je vous mets le lien ici si ca vous intéresses. Elles fonctionnent toutes très bien jusque la et je crois qu’elles valent environ 15 € les 1000. Elles supportent 20 mA mais elles en ont assez avec 10 mA.

    J’ai récupéré le 5 Volts de la carte pour alimenter la plaque LAB. La résistance pour limiter le courant a 10 mA sera donc une 470 ohm qui sera montée en série avec chacune des LED.

    Le programme.

    Voici le programme du chenillard, je vais commencer par vous expliquer comment on configure les Ports. La configuration des Ports se tient sur ces 2 lignes :

    DDRA = 0x8F; // 10001111 ;
    DDRB = 0x03; // 00000011 ;

    Les DDRA et DDRB sont des registres a configurer. Le constructeur nous les montre ici:

    Ils servent a déterminer le sens de chacune des pattes du Port A pour DDRA et du Port B pour DDRB. Il faudra mettre un 1 pour le passer en sortie et un 0 pour le laisser en entrée. Lorsque l’on visualise le port on peut facilement le décrire en binaire. Je vous ai mit en commentaire ce que souhaitais obtenir. Pour le PortA  c’est 10001111 avec les 4 « 1 » le plus a droite correspondant a PA0,PA1,PA2,PA3. Les 3 « 0 » qui suivent sont les pattes de programmation (PA4,PA5,PA6) et le dernier « 1 » c’est PA7.

    Il nous faut maintenant convertir ce nombre en hexadécimal ca donne donc pour DDRA :

       8           F

    1000    1111

    Vous comprenez comment j’ai obtenu la valeur que j’ai mit dans DDRA il suffit de faire la même chose pour DDRB et la configuration des Ports est terminée. Si vous oubliez cette étape sachez que le compilateur ne vous indiquera pas d’erreur mais vos pattes seront par défaut en entrée et si vous essayez de mettre a 1 une de ses pattes ca ne fonctionnera pas.

     

    Le délais.

    #define F_CPU 8000000
    #include <xc.h>
    #include <util/delay.h>

    Si nous voulons voir défiler nos LED, il va falloir mettre un délais entre les opérations. Si vous ne le faites pas le microcontrôleur fera défiler les LED a toute vitesse et vous ne verrez pas le défilement. Pour ajouter un délais vous devez appelez la bibliothèque de délais en mettant la ligne suivante « #include <util/delay.h>« . Il faudra ensuite lui dire quelle est la vitesse du microcontrôleur avec la ligne suivante « #define F_CPU 8000000« . Ensuite pour l’appeler c’est simple il faudra écrire « _delay_ms(1000); » pour avoir 1000 ms soit 1 Seconde ou « _delay_us(1000);« pour 1000 micro Seconde. Vous pouvez ajuster a votre guise la valeur entre parenthèse et mettre ce que vous voulez comme temps.

     Sortir sur un Port

    PORTA=0x01;
    _delay_ms(1000);
    PORTA=0x02;
    _delay_ms(1000);
    PORTA=0x04;
    _delay_ms(1000);
    PORTA=0x08;
    _delay_ms(1000);
    PORTA=0x80;
    _delay_ms(1000);
    PORTA=0x00;
    PORTB=0x01;
    _delay_ms(1000);
    PORTB=0x02;
    _delay_ms(1000);
    PORTB=0x00;

    Voici la dernière partie avec « PORTA=0x01; » cette fonction allume la première LED du PortA , si vous avez correctement configuré DDRA. Le principe est exactement le même qu’avec les registres DDR il vous faut penser en binaire puis convertir en hexadécimal pour que la ou les bonnes pattes soit pilotées.

    Pour compiler votre programme faites ensuite F7 , si il n’y a pas d’erreur il ne vous reste plus qu’a le programmer avec « Tools » , » Device Programming « . et finalement voici ce que ca donne:

     

    Voila pour un petit chenillard, j’espère que cet article vous aura plu, merci pour votre lecture!

     

    Sylvain Altmayer

     

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *