LES MICROCONTROLEURS ATMEGA


Par Silicium628 dernière modif de la page: 10 juin 2010
Blog:  http://silicium628.blogspot.com/


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
  • PDIP (DIL étroit) 
  • et SMD (CMS "Composants Miniatures pour montage en Surface" en français)

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:
http://www.tavernier-c.com/livres.htm



Ou trouver plus d'informations sur les uC ATMEL ainsi que les datasheets ?





COMMENT ECRIRE ET ASSEMBLER UN PROGRAMME EN ASSEMBLEUR AVR ?
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:





Programmation des AVR en langage C, sous LINUX :

Et pour LINUX ? Ce n'est pas ce qui manque !

Tout d'abord il faut installer (avec Synaptic) avr-gcc qui est un compilateur libre multi-plateformes C pour AVR

Voici plus précisément les paquets que j'ai installés, concernant "avr"
(copie d'écran de synaptic dans Ubuntu 904):




Vous pouvez des lors écrire le programme source (par exemple essai1.c) dans un éditeur de texte puis le compiler avec avr-gcc en ligne de commande (le lancer dans un terminal, en ayant soin de configurer au préalable un fichier Makefile (fichier texte définissant les options de compilation) qu'on place dans le répertoire du fichier essai1.c)
C'est peu commode? Sous Windows on avait des outils graphiques pour programmer? Bonne nouvelle, sous Linux aussi! On peut utiliser le pack winAVR (malheureusement disponible uniquement pour Windows à ma connaissance) en l'installant sous linux avec wine. C'est un logiciel sous licence GNU. Oui mais wine... on peut ne pas l'apprécier... philosophiquement... Et puis en cas d'erreurs de compilation, le fait de tourner sous wine peut éventuellement compliquer les choses.

Ok, j'ai trouvé mieux, une interface graphique, open source, purement Linux: KontrollerLab, propose par cadManic.org.
Nécessite également d'installer les paquets avr listés ci-dessus, plus le paquet avrdude afin de programmer directement l'ATmega depuis kontrollerlab.

et pour la dernière version 0.8.0-beta1:

Bon d'accord c'est en anglais, ce n'est pas un problème n'est-ce pas?

Je lis sur le site cadManiac:
"cadManiac.org is a non-commercial, non-profit site for open source development of mostly Linux(c) based software for electronics development. Everything on this site, including software, information, pictures, texts, or files of any kind, are published under the terms of the GNU GPL License and the GNU Free Documentation License"
Vive le logiciel libre! Grâce à de telles initiatives je vais bientôt pouvoir me passer TOTALEMENT de Windows.

KontrollerLab permet de:
  • écrire le programme source en C.
  • configurer (avec un " wizard") un fichier de configuration (fichier.h) pour piloter un afficheur LCD et le place automatiquement dans le répertoire du source.
  • compiler et lier le source pour obtenir un fichier objet .hex (pour un usage éventuel par un soft programmeur externe)
  • d'appeler automatiquement (avec un bouton) le programme UISP ou AVRDUDE et de programmer l'ATmega in-situ (si le paquet avrdude est installé sur le système, et kontrolleurlab lancé avec droits administrateur)
  • de débugger


Voici un tout petit programme qui fait plein de choses;
C'est la version en langage C de mon soft en Pascal destiné à mon générateur VHF 160MHz décrit sur ce site (avec schémas plus complets).

Il s'y trouve bien des choses réutilisables:
  • gestion des ports
  • piloter un afficheur LCD réparti sur 2 ports
  • afficher un texte
  • afficher un nombre entier en représentation décimale (sur le LCD)
  • afficher un nombre (sur le LCD) en représentation binaire
  • gestion de leds
  • scrutation de boutons
  • utilisation du convertisseur analogique/numerique de l'ATmega8
  • gestion de la synthèse d'un signal PWM (pulse width modulation = modulation de largeur d'impulsions, c.a.d signal rectangulaire à rapport cyclique variable, commandé - il est fait sans consommer de temps processeur, pas d'interruptions).
Voici les fichiers correspondants: Soft_en_C.tar.gz

C'est la confirmation que la compilation fonctionne ainsi que la programmation in-situ (ISP) de l'ATmega, le tout en 2 clics (voire même un seul, avec la petite fusée!), sans quitter le logiciel KontrollerLab!
Copie d'écran de KontrollerLab
(8.0.0 beta1 tournant sous Ubuntu 8.04)
(cliquer pour zoom)





Quelques astuces pour Kontrollerlab?

- si AVRDUDE renvoit un message d'erreur signifiant que vous n'avez pas la permission d'accéder au composant USB, il faut lancer KontrollerLab avec des droits administrateurs (par la commande gksudo kontrollerlab). J'avais le même problème avec Avr-burnO-mat, et donner des droits en lecture-écriture au device /dev/usb.. ne résolvait pas le problème. Je suis conscient que lancer un programme avec les droits administrateur n'est jamais une bonne idée, il reste à trouver une meilleure solution...

J'ai trouvé sur le Net (ici) une solution pour éviter de devoir lancer kontrollerlab (et avrdude) en mode administrateur. La voici:
(je cite:)

Pour ne pas être embêté par le fait de passer en su, voici la méthode suivie tirée du site http://forums.obdev.at/viewtopic.php?p=4436

How to add user permission for USBasp (I have tested this method in ubuntu 7.10):
source:http://www.bitpim.org/help/

1. Create new rule for udev
Code:
sudo gedit /etc/udev/rules.d/60-objdev.rules

2. Edit new rule in gedit and add following:
Code:
   SUBSYSTEM!="usb_device", ACTION!="add", GOTO="objdev_rules_end"
   # USBasp
   SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", GROUP="users", MODE="666"
   LABEL="objdev_rules_end"

3. Restart udev.
Code:

   sudo /etc/init.d/udev restart

(fin de citation)

J'ajoute: déconnecter puis reconnecter la carte programmateur USB ASP pour que les permissions pour l'utilisateur courant soient prises en compte.
J'ai testé le 22 août 2009 sous Ubuntu 9.04, ça marche.

Voir aussi sur mon blog:  http://silicium628.blogspot.com/  (vous pouvez y poser des questions ou ajouter des commentaires, des astuces, des conseils...)



Autres liens:


Langage C:



COMMENT PROGRAMMER les ATmega en PASCAL ?
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:
  • RC5 (télécommandes IR pour TV par exemple)
  • DCF77 (protocole des horloges radio-pilotées)
  • FAT16 (interface disque dur et autre cartes mémoires)
  • Servo RC
  • bus I2C
  • USB
etc..  Je ne vous en dis pas plus, voyez par vous-même dans la caverne d'Ali-Baba:
 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.


COMMENT PROGRAMMER les ATmega en Basic Bascom ?
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:




COMMENT PROGRAMMER PHYSIQUEMENT LA BESTIOLE ?
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!)







programmateur AVR USB ATMEGA

USBASP décrit ici






usbasp

Ma réalisation de ce programmateur (l'implantation est de J.A. de Groot  disponible ici)
30 Avril 2007:
Je viens de découvrir ceci: programmateur USBASP

Un programmateur USB simple à réaliser pour les microcontrôleurs ATMEL AVR, basé sur un ATMEGA8.
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:
  • avrdude-gui (ce fichier zip contient avrdude)
  • AVR8-Burn-O-Mat (logiciel en java, multiplateforme donc, et beaucoup plus confortable pour programmer les fuses)

Site du concepteur:
J'utilise couramment ce programmateur
  • sous Windows (avec AVR8-burn-O-Mat)
  • sous  Linux (avec AVR8-burn-O-Mat et avrdude)
Août 2009:
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


Oui, mais... QUEL LOGICIEL UTILISER POUR FAIRE FONCTIONNER LE PROGRAMMATEUR de Tavernier ?


Voici un logiciel compatible et prenant en charge les ATMEGA (et pas seulement les AT90...) :

Pony Prog

versions Win98, WinXP et LINUX !
que vous pouvez télécharger ici:



Un petit tuyau pour la route...

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:

  • alimenter le microcontrôleur sous 5V
  • et câbler le quartz 16MHz d'horloge et les deux condensateurs associés (ou une horloge externe)
Sans quoi... le uC n'est ni reconnu, ni programmé.

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).




J'ai suivi tous les conseils, mais rien ne fonctionne: l'ATMEGA oscille à une fréquence très lente !
..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.




Voici quelques réalisations perso. à titre d'exemple (Liens internes):
GENE HF

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


    
  • Un Récepteur RC5 (reçoit et décode les signaux IR des télécommandes TV), avec un ATmega8 programmé en PASCAL.





  • Interface USB-1-RS232 - port parallèle basée sur un ATMEGA8. Cela faisait partie de mes projets, mais quelqu'un l'a fait avant moi et le publie ici:
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:

Programmateur electronique pour Lave linge Et ma seconde réalisation utilisant un ATmega32:

autour d'un ATmega32 programmé en PASCAL



Liens externes:


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).

  1. AVRfreaks un site spécialisé dans les AVR.
  2.  http://www.trade-shop.de/catalog/index.php (vente de composants divers à l'unité et en particulier des uC ATmega haut de gamme )
  3. http://dkc1.digikey.com/fr/digihome.html (vente de nombreux uContrôleurs y compris des  AT91SAM7 !)
  4. http://en.shop.embedit.de/



Silicium628

Blog:  http://silicium628.blogspot.com/



Partenaires : credit - vendre un bien immobilier