Nous y voici : première confrontation avec la création d’une carte à base de micro-contrôleur.
On va faire simple, en faisant ce qui pour l’électronicien est l’équivalent du "Hello world" de l’informaticien. J’ai nommé la LED clignotante.
Matériel de base
- un ATMEL (ce sera un ATmega8, car c’est le plus petit que mon revendeur de composants préféré avait en stock
- les composants qui vont autour (la liste complète suivra)
- une plaque d’expérimentation sans soudure, vu qu’on va modifier et re-modifier le bidule après
- un environnement de développement pour AVR, comme par exemple :
- tout simplement avr-gcc pour les Linuxiens (que vous trouverez sans problème dans votre dépôt de paquets d’installation favori),
- son homologue WinAVR (http://winavr.sourceforge.net/) pour les Windowsiens,
- et pour les OSXiens, j’en sais rien
[1]
- un câble ISP (voir les articles Garder le contact et In Situ Programming)
Le schéma
Il n’y a pas de magie : tout cela sort plus ou moins des datasheets et notes d’application diverses.
Alimentation
Le montage étant alimenté directement en 5V depuis mon alim de labo, je n’ai pas mis de régulateur en amont. Les capas C1 et C2 servent au filtrage de cette alim, pour éliminer ce qu’on pourrait ramasser comme parasites sur le câble entre l’alim et le montage.
Si vous pensez alimenter ce montage à partir d’une pile 9V par exemple, ou d’un pack d’accus, jeter un oeil à cet autre article.
Les sorties
Il y a une LED et sa résistance (R3) par pin du port D, ce qui en fait donc 8 au total.
Le calcul de R3 est le suivant :
tension de sortie du port | 5V |
---|---|
chute de tension de la LED | 1.8V |
intensité dans la LED | 10mA |
ATTENTION : ne pas dépasser 20mA grand maximum comme consommation sur les pins de sortie de l’Atmel. Donc éviter les LED forte puissance ici...
Un coup de loi d’Ohm donne donc R3 = (5 - 1.8) / 0.01 = 320
Soit 330 en prenant la valeur normalisée immédiatement supérieure
Le connecteur de programmation
ISP est le connecteur pour la programmation ISP (In-Situ Programming). Son brochage correspond au câble dont je dispose (à adapter donc selon votre matériel, en fonction de la disposition des signaux utilisés)
Découplage des alimentations
C5 est un condensateur de découplage, destiné à élimiter les pertubations HF générées par toutes ces puces. La recette de cuisine enseignée par mon maître et à appliquer pour ce type de filtage est : "placer une capa de 100nF entre le Vcc et la masse du circuit, en se mettant le plus près possible de la puce concernée".
L’oscillateur à quartz
C3, C4 et Q1 constituent le circuit oscillateur à quartz externe qui définit la cadence de l’horloge de base du micro. Le quartz choisi ici est un 8MHz. La valeur des capa (33pF) est définie par le datasheet du micro. Ces trois composants doivent être placés au plus près possible du micro.
Le circuit de reset
R2 et C6 servent à bloquer le reset lors de la mise sous tension du micro, afin d’éviter les ratouilles. Le fonctionnement de ce circuit est simple :
- lors de la mise sous tension, C6 est déchargée
- elle va se charger au travers de R2, et donc la tension appliquée à l’entrée /RESET va d’abord être nulle, puis augmenter au fur et à mesure que la capa se charge, pour atteindre 5V lorsque la charge est complète (puisqu’il n’y a alors plus de courant circulant dans R2).
L’entrée /RESET déclenche un reset du micro lorsqu’elle est à un niveau bas. Par conséquent, on aura ici un effet de "libération" retardée du micro lors de la mise sous tension, ce qui permet d’attendre que la tension soit correctement établie et stabilisée avant de lâcher le fauve (c’est comme pour les fusées spatiales russes). Que les puristes me pardonnent cette description un peu imagée, mais je pense ne pas avoir trop trahi la réalité scientifique.
Remarque : la notation /RESET signifie que l’entrée est active lorsque son état est à 0 (le "/" veut dire NOT).
Voilà, on a fait le tour. Patrick avait raison : y’a pas de quoi en faire un fromage !!
La réalisation
On peut voir la plaque d’expérimentation avec les quelques puces qui se courent derrière.
J’ai un peu craqué pour le chenillard, et ai soudé les LEDs et leurs résistances sur une plaquette proto. Je me suis dit que ça pourrait toujours servir de circuit témoin pour d’autres montages.
Le code
Deux versions du code ont été écrites :
Version de base
Cette version est dénommée "Petit Padawan A Peine Sorti de l’Oeuf", qui se contente de gérer les délais à grands coups de boucles d’attentes. Il est clair qu’il ne faut absolument pas utiliser ce genre de méthode (sauf si c’est pour faire un chenillard) car le micro ne peut rien faire d’autre pendant ces boucles d’attente.
Version évoluée
C’est la version "Anakin Adolescent". Elle utilise les timers/compteurs de l’Atmel et exploite les interruptions associées pour cadencer le défilement des LEDs. C’est la voie du côté clair de la Force.
Les sources étant abondamment commentés, je vous laisse le soin de les étudier directement.
La conclusion
Mission accomplie chef !! (private joke)
Liste des composants
- Etiquette - | - Valeur - |
---|---|
C1 | 100nF |
C2 | 10µF |
C3 | 33pF |
C4 | 33pF |
C5 | 100nF |
C6 | 1µF |
IC1 | ATMEGA8-16P |
LED1 | LED standard |
Q1 | 8MHz |
R2 | 10kOhm |
R3 | 330 Ohm |
SV1 | connecteur HE10 par exemple |