| Depuis
quelque temps (2005) une famille de microcontrôleurs
monte en puissance et surtout voit son prix baisser et devient
très
facilement approvisionnable (Sélectronic et Electronique
Diffusion entre autres distributeurs en France, mais aussi beaucoup
d'autres distributeurs en Europe. Moi je ne vends rien!) Il
s'agit des
MICROCONTROLEURS 8bits RISC
AVR ATMEL, en particulier les ATmega |
![]() |
Voici un ATmega8 -16 (8ko de prog en Flash, horloge =16MHz ) en boîtier
La pièce de 2 euro donne une idée de la taille minuscule du boîtier CMS |
Petit tableau
comparatif
de deux circuits de prix équivalents (je n'ai rien contre les
PIC, je les ai utilisés pendant des années)
| PIC16F628 |
ATmega8 -16MHz |
|
| Architecture |
RISC (33
instructions) |
RISC (mais beaucoup
plus
d'instructions très utiles, 130 instructions) |
| Accumulateur logique |
1 seul (W) |
32 , tous
adressables directement |
| Pile |
8 niveaux |
TOUTE
LA RAM !!!!! On respire ! |
| PROG en FLASH |
2 K |
8 K |
| EEPROM |
128 octets |
512 octets |
| RAM |
224 octets |
1 K |
| fréquence
horloge |
20 MHz
(4c/instr) |
16 MHz mais....
1cycle horloge /
instruction (sauf branchements) |
| vitesse |
20/4 = 5Mips |
16
Mips |
| timers |
3 |
3 |
| Conv A/N |
non |
oui |
| multiplication |
non |
oui |
| prix (environ) |
environ 4 euros |
1.50 euro (Avril 2009) |
| Bien
sûr il existe des PIC beaucoup mieux dotés en
ressources,
mais alors... ils sont plus cher (actuellement en 2005) Avril 2009: On commence à trouver des ATmega32 à 2 euro! (la version CMS) (liens externes) (32 Ko de mémoire Flash, 1Ko EEPROM, compatibles JTAG, 4 ports de 8 bits complets). Une nouvelle famille (lien externe 2) de uC commence à me faire des clins d'oeil: les uC à coeur ARM comme les AT91SAM7 d'ATMEL, des petites bêtes qui tournent à 55MHz ! Ah là là ! ça va trop vite, difficile de suivre! Je vais maintenant vous donner un certain nombre de conseils, afin d'éviter de galérer si vous décidez d'utiliser les ATmega pour la première fois. |
COMMENT
EN
SAVOIR PLUS SUR
LES CIRCUITS AVR ?
![]() |
Je
vous
conseille de lire l'ouvrage de Christian Tavernier "Microcontrôleurs AVR, description et mise en oeuvre" chez DUNOD Pour plus d'informations sur ce livre, voir le site ce Ch. Tavernier: |
|
![]() |
Avec
le soft AVR Studio
(actuellement
version 4) téléchargeable gratuitement sur le
site d'ATMEL Vous obtenez ainsi un fichier .ASM et après assemblage un fichier .HEX A noter: concernant la description des instructions, l'aide de Studio4 est mieux faite et plus pratique que le datasheet. Pour ceux qui n'auraient pas trouvé le lien de téléchargement sur le site, le voici: |
Je lis sur le site cadManiac:
|
||||||||||
| Il
est possible de
développer des
applications directement en langage PASCAL pour les
microcontrôleurs AVR. En particulier E-LAB-Computers fournit toute une gamme d'outils de développement MULTI TACHE en mode graphique, avec debuggueur puissant et complet intégré, et comprenant en prime l'implantation automatique de fonctions de communications telles que:
C'est très pro, et bien documenté. Le tuto est très bien fait, très clair. La version pour ATmega8 est gratuite! Cette version limite la taille du code compile a 8ko. De quoi remplir un ATmega8 donc. Le problème qui apparaît rapidement c'est que le code généré est volumineux dès qu'on inclus des "drivers" et des routines math (virgule flottante). Et c'est une des raisons pour lesquelles, après plusieurs réalisations faites en Pascal avec cet outil, je me tourne actuellement vers la programmation en C avec avr-gcc (voir plus haut). Je vais pouvoir comparer la taille des codes obtenus... je vais faire la comparaison pour le générateur VHF 160MHz décrit sur ce site. |
| Il
est possible de
développer des
applications directement en langage BASIC pour les
microcontrôleurs AVR. Je ne suis pas spécialiste de la question, tout ce que je connais du langage basic se résume à son instruction "goto" et aux ZX81 et ZX Spectrum avec lesquels je jouais il y a bien longtemps... Mais le basic a ses adeptes qui lui trouvent bien des atouts pour l'utilisation sur ces petits microcontroleurs, le principal étant sans doute la simplicité de la mise en oeuvre pour de petits programmes. Je passe donc la parole à des spécialistes, qui vous en dirons plus que moi sur ce site: |
![]() |
Avec
un
"Programmateur en
circuit
(ICSP) pour microcontrôleurs ATMEL" tel que celui
décrit
par Christian Tavernier sur son site : en particulier sur cette page: Vous y trouverez le schéma (très simple) et l'implantation. Pour ma part, voici ci-contre celui que j'ai réalisé d'après ce schéma de Ch. Tavernier, mais j'ai refait l'implantation (afin d'obtenir des pistes nettes...) sous EAGLE. (Que j'utilise depuis peu en remplacement de Orcad, il faudra que je vous parle aussi de cela!) |
||
|
30 Avril
2007: Je viens de découvrir ceci: programmateur USBASP Le logiciel de programmation associé au programmateur USBASP est « AVRDude » J'ai testé: ça fonctionne très bien avec mes ATMEGA8. Ce soft fonctionne en ligne de commande; Il existe des interfaces graphiques (GUI) qui permettent de l'utiliser confortablement, je citerai:
Site du concepteur: J'utilise couramment ce programmateur
Note pour Linux: si avrdude vour retourne le message d'erreur suivant: avrdude: Warning: cannot query manufacturer for device: error sending control message: Operation not permitted, c'est que vous n'avez pas les droits d'acces en ecriture au peripherique USB. (Lancez avrdude en "sudo", vous verrez... ) Astuce: sous Linux (gnome, comme par exemple Ubuntu) pas besoin de programme spécial pour lancer avrdude. Il suffit de créer un script nautilus (un fichier texte auquel on donne la permission d'exécution) avec comme contenu: #!/bin/bash gnome-terminal --command="avrdude -p m32 -c usbasp -P ttyUSB0 -u -U flash:w:./ape2008.hex:i" (remplacer le nom du fichier.hex {ici ape2008.hex} par le bon). le ./ qui le précède indique le chemin relatif (c.a.d que le script doit être dans le répertoire du .hex) ttyUSB0 : voir dans /dev si c'est le bon (ça peut être ttyUSB1 par exemple) On peut aussi lancer la commande directement dans un terminal ouvert manuellement... Pratique pour reprogrammer un ATmega pour leque on ne dispose pas des sources ou du compilateur mais juste du .hex |
![]() |
Voici un logiciel
compatible et
prenant en charge les ATMEGA (et pas seulement les
AT90...) :
Pony Prog |
| Le programmateur
permet de
programmer le uC en place dans son environnement
électronique
définitif, (si celui-ci laisse l'accès libre aux
signaux
MOSI, MISO Reset et SCK) et si il est alimenté par la
platine
électronique sur laquelle est implanté l' ATMEGA. Mais... peut-on l'utiliser pour programmer un microcontrôleur "tout seul", sans montage électronique associé ? OUI, mais il faut au moins:
On peut donc, le cas échéant, fabriquer une petite platine recevant ces composants et le microcontrôleur, plus un 78L05 et une pile de 9V pour l'alimentation en 5V (sauf si vous optez pour le programmateur USBASP qui fournit une alimentation 5V à partir de l'USB, en plaçant juste un cavalier sur la carte). Le tout à connecter au bout d'une nappe à 10 fils (nappe "port série" récupérée sur un PC par exemple, en ajoutant un connecteur enclipsable manquant avec un petit étau). |
| ..voire
pas du tout et impossible de le
programmer! Sans doute n'avez-vous pas ou mal programmé les "bits de configuration", "fusibles" ou "fuses" (un bouton représentant un cadenas dans Pony prog permet d'accéder à cette fonction, il faut cocher judicieusement les bonnes cases) et votre ATMEGA est en mode oscillateur externe ou RC interne, mais pas en mode oscillateur à quartz. Il faut alors câbler un oscillateur (4MHz environ) externe qui ne servira qu'une fois, le temps de reprogrammer les fuses (avec le programmateur port // de Tavernier et le soft Pony Prog car je n'ai pas réussi dans ce cas de figure à réveiller les ATmega, parfois même tout neuf, avec le programmateur USB, ne me demandez pas pourquoi, quelque chose m'échappe...), par exemple ceci: |
![]() |
Le circuit
40106N est un Circuit intégré de la
famille
CMOS de type CD40106 contenant 6 inverseurs à
hystérésis. Datasheet du 40106: Voir aussi le datasheet de l'ATmega pour le raccordement de cet oscillateur à l'ATmega: |
| Pour la petite
histoire: Il m'est arrivé la chose suivante: Après avoir travaillé avec un ATmega32 pendant plusieurs semaines, l'avoir reprogrammé à maintes reprises avec le programmateur USB, un beau matin impossible de l'utiliser: le programme qu'il contenait ne tournait plus, et plus moyen de le programmer in-situ. Evidemment le CI était soudé sur le proto, pas sur support! Ayant tout essayé infructueusement pour le programmer in-situ, je me suis vu, une pince coupante à la main, avec l'intention de lui couper toutes les 40 pattes, direction la poubelle! Puis j'ai eu un remord, j'ai pris la peine de le dessouder à grand renfort de pompe et de tresse à dessouder, roundujuu! puis je l'ai placé sur une plaque d'essai, juste alimenté, sans les condensateurs ni le quartz d'horloge, mais câblé sur le fameux oscillateur à 40106. Un coup de programmateur // sur ses fusibles, et là, hop! il s'est réveillé en pleine forme! Je pense que sa déprogrammation (y compris donc de ses fusibles) était due à des manipulations malencontreuses sur le plan électrostatique du proto (de l'APE2008) alors que certains de ses pins étaient 'en l'air' juste connectés à des bouts de fils volants. |
| 24
juin 2008: Mon expérience des ATmega augmentant au fil du temps, je commence à mieux cerner les causes de blocage. Le meilleur moyen de se retrouver avec un ATmega32 sourd à toute tentative de programmation, (de la Flash, et des fuses) quel que soit le programmateur en mode série utilisé c'est de tenter (alors qu'il est encore en parfaite santé) de le programmer en oubliant de l'alimenter. (On connecte le programmateur ICSP sur le uC en circuit et on envoie le programme en oubliant d'alimenter la carte hôte...) Ca m'est arrivé plusieurs fois, et à chaque fois ça n'a pas raté, j'ai obtenu 'device not present' puis plus moyen de le faire reconnaître sauf sorti de sa carte et en lui ajoutant une horloge externe comme expliqué plus haut. Sauf que... il peut arriver (il vient de m'arriver) que cela ne suffise pas: il semblerait que l'étourderie du manque d'alimentation entraîne une programmation partielle et aléatoire qui touche également les 'fuses'. En principe le fusible 'SIEN' (permettant la programmation en mode série ) ne peut pas être (dé)programmé en mode série, oui mais avec un uC non alimenté on y arrive apparemment. (à moins que ce ne soit un des nombreux fuses d'interdiction en écriture de telle ou telle partie, présents sur le ATmega32. Mais dans ce cas la fonction d'effacement général devrait encore être active, ce qui n'est pas le cas). Dans ce cas que faire? le jeter? En fait je pense que l'ATmega n'est pas mort, et donc en théorie il est toujours programmable et effaçable avec un programmateur en mode parallèle. Je ne peux pas le confirmer pour l'instant parce que je n'ai pas trouvé de schéma de programmateur // (après avoir cherché des heures durant, tout le monde, moi compris y va de sont petit programmateur série, mais le mode parallèle personne n'en parle). Le datasheet de l'ATmega32 décrivant les algorithmes de programmation //, il me reste plus qu'à en concevoir un (avec un ATmega8 par exemple) ! Je vous tiens au courant. Par la suite je maintiens que la programmation USB est bien plus pratique. Avec le soft AVR8-Burn-O-Mat, la programmation des fuses est rendue très simple. Pour en savoir plus à propos des "fuses" voir également ces pages:
Voilà de quoi obtenir rapidement un environnement de travail totalement fonctionnel. J'ai testé le programmateur et tous ces logiciels (sous Windows) et j'ai pu programmer de nombreux ATMEGA8 avec succès. |
![]() |
|
![]() |
|
![]() |
sinus, synthétisé
par PLL MC145170 avec un
pas de 10kHz, géré par un ATmega8.
Affichage LCD 4 lignes -
Pilotable par une télécommande
TV
|
![]() |
sinus, par pas de 100kHz - 50kHz
-25kHz
Affichage LCD 4 lignes PLL LM7001 + ATmega8
programmé en pascal PUIS plus récemment en C |
![]() |
|
![]() |
|
![]() |
|
![]() |
auteur: Ing. Igor
Češko -
homepage: www.cesko.host.sk
J'ai utilisé cette
interface pour mon APE2007.
|
![]() |
Voici
ma première
réalisation basée sur un ATmega32
programmé en langage C sous LINUX:
|
![]() |
Et
ma seconde réalisation
utilisant un ATmega32: autour d'un ATmega32 programmé en PASCAL |
moi je ne vends rien, je n'ai aucun intérêt dans la vente de composants et je n'ai aucun lien personnel avec les commerces cités; toutefois je publie ci-dessous des liens qui permettent de s'approvisionner en composants parfois difficiles à trouver en France, à part chez Electronique Diffusion).
|
| |
|
|
|
Partenaires : credit - vendre un bien immobilier |