Réssuciter vos AVR

 version imprimable 
Le seul incovénient de taile que j'ai trouvé avec les AVR jusqu'à maintenant, c'est l'écriture trop simple de fuses critiques pour la programmation, et par conséquent nous faire perdre beaucoup de temps: un "fuse" de travers, et votre AVR ne répond plus.

Avec un programmateur SP12, un Atmega32 ne répondant plus, après avoir été configuré par erreur pour fonctionner en "external clock":



Le moyen le plus propre est d'utiliser un générateur de fonction, consultez la doc de votre AVR pour trouver sa fréquence minimum de fonctionnement et les fuses corrects qu'il faudra reflasher. Tout le monde n'a pas de générateur de fonction, mais vous pouvez toujours utiliser un PIC, qui fournira aisément un 500Khz stable.


R1 et D1 pour tester.

Je ne fournis pas de binaire pour le PIC, ne sachant pas quel modèle vous avez sous la main. Le code est simplissime, il suffit de configurer l'oscillateur interne à 4Mhz, régler les TRIS et strober tout PORTA dans une boucle par exemple.

Un programmateur de PIC se fait en 20 minutes:


J'ai pris le 5V nécéssaire au PIC directement sur le programmateur AVR:



Et testé sur une plaque d'éssai.



Vous devriez avoir un beau signal carré sur tout PORTA:



Soulevez les deux broches XTAL1 et XTAL2 de votre AVR et inserez-e dans le programmateur.



Laissez XTAL2 en l'air, et reliez XTAL1 au PIC.



Si vous n'avez pas bougé, vous pourrez flasher les nouveaux fuses et sauver votre projet.



Une autre méthode, trouvée au hasard, si vous n'avez pas de PIC. Utilisez un synthétiseur !



R2 et D2 pour tester.

Le but est qu'il en sorte un signal carré simple et stable. Sur un Microkorg, il suffit d'appuyer sur Shift+3 deux fois, de régler OSC1 sur "Squ", et de mettre le vibrato à 0.



Vérifiez que le signal est correct à l'oscilloscope. Ici j'utilise des prises RCA.



Jouez la plus haute note possible et votre AVR aura peut-être la chance de démarrer.



Montez l'amplitude et redressez le signal avec une diode, puis envoyez le tout sur XTAL1 comme précédement.



Source: furrtek.org - Licence: Creative Commons

Mémoire non volatile

 version imprimable 
Une mémoire non volatile est une mémoire qui conserve ses données en l'absence d'alimentation électrique. On distingue les mémoires mortes (ROM), et les mémoires de type RAM non volatiles (NVRAM pour non-volatile RAM).

NVRAM (Non Volatile RAM)

Il existe différentes technologies, certaines ne sont pas encore industrialisées.

Tores de ferrite (vieille technologie maintenant désuète)

Les tores de ferrite utilisés jusqu'au début des années 1970 dans la construction des ordinateurs étaient une forme de mémoire RAM non volatile.

FeRAM ou FRAM (en développement)

La mémoire FRAM ou mémoire FeRAM (Ferroelectric RAM) est un type de mémoire d'ordinateur non volatile. Elle est similaire à la mémoire DRAM à laquelle on a ajouté une couche ferro-électrique pour obtenir la non volatilité. Par rapport aux mémoires flash utilisées actuellement, cette mémoire possèdera les avantages suivants :
  • une plus faible consommation d'électricité ;
  • une plus grande rapidité de lecture et d'écriture ;
  • la possibilité d'être effacée et ré-écrite un bien plus grand nombre de fois.

MRAM (en développement)



Encore en cours d'élaboration la mémoire MRAM (Magnetic RAM) est une technologie utilisant la charge magnétique de l'électron. Les performances théoriques en font une mémoire utilisable à terme dans beaucoup de domaines. Étudiée par tous les grands acteurs de l'électronique, elle commence tout juste (juillet 2006) à être commercialisée et devrait prendre son essor à l'horizon 2010.

NRAM (en développement)

La mémoire NRAM ou mémoire Nano-RAM est un type de mémoire d'ordinateur non volatile à l'état de recherche et développement. Le fonctionnement de la mémoire NRAM est basée sur la position des nanotubes de carbone sur un substrat semblable à un circuit intégré. En théorie, la petite dimension des nanotubes devrait permettre une très grande densité d'information par unité de surface. Les chercheurs espèrent que cette mémoire remplacera un jour la mémoire flash.

PRAM (en développement)

La mémoire PRAM (PRAM, Phase-Change Memory, PCM, Ovonic Unified Memory, Chalcogenide RAM ou C-RAM en anglais) est un type de mémoire d'ordinateur non volatile à l'état de recherche et développement. La mémoire PRAM utilise le comportement du verre de chalcogénure qui bascule de la forme cristalline à la forme amorphe sous l'effet de la chaleur. Les chercheurs espèrent que cette mémoire remplacera un jour la mémoire flash.

Source: wikipedia.org - Licence: Creative Commons

Qu'est-ce que la liaison RS-232 ?

 version imprimable 
La liaison RS-232 est issue de la norme du même nom qui permet l'envoi de données via une chaîne de niveaux logiques envoyés en série (d'où le nom du port du PC). Elle permet de faire dialoguer deux systèmes (et seulement deux) entre eux. Les données sont envoyées par trames de 5, 6, 7 ou 8 bits, soit autant de niveaux logiques. Par la suite, je travaillerai exclusivement avec une liaison sur 8 bits, la plus couramment utilisée.

Cette liaison est de type asynchrone, c'est-à-dire qu'elle n'envoie pas de signal d'horloge pour synchroniser les deux intervenants de la liaison : il est donc nécessaire que ces derniers soient configurés de la même manière (vitesse de transmission, nombre de bits par trame, etc.). La vitesse de transmission s'exprime en bauds (bds = bits par seconde) : les valeurs les plus courantes sont 2400, 4800 et 9600 bauds.



Comment ça fonctionne ?

Les niveaux logiques ont une grande marge d'erreur, ce qui permet à la liaison RS-232 de n'être que peu sensible aux perturbations, et donc de pouvoir être mise en place sur de longues distances. En effet, le niveau logique "zéro" est représenté par une tension comprise entre +3 et +15 V, et le niveau logique "un" est représenté par une tension comprise entre -3 et -15 V.

Au repos, la ligne de transmission est au niveau logique 1. Lorsque l'un des systèmes veut commencer à communiquer, il prévient le système à l'autre bout de la liaison par une mise de la ligne au niveau 0 : c'est le bit de Start. Viennent ensuite les bits de données au nombre de 8 (cf. début du cours) : ils sont soit au niveau 1, soit au niveau 0, en fonction des données. Un dernier bit peut être ajouté, il s'agit du bit de parité qui ne joue pas du tout le même rôle. En effet, le bit de parité est mis au niveau 0 par l'envoyeur si la somme des bits transmis à l'état 1 est paire, et à 1 si la somme est impaire ; ainsi, le système qui reçoit les données peut vérifier s'il y a eu une erreur de transmission due à des interférences, en comparant le nombre de bits à 1, et le bit de parité, s'il y a erreur, le receveur peut alors demander à l'émetteur de renvoyer les données.

Remarque : si deux erreurs se produisent, le receveur ne pourra pas les détecter puisque le nombre de bits au niveau 1 est alors en accord avec le bit de parité ; si trois erreurs se produisent, le receveur n'en verra qu'une, etc. Enfin, après ce bit de parité viennent un ou deux bits de Stop, qui signalent au receveur que la trame est terminée.


Physiquement, on la fait comment, cette liaison ?

Une liaison, par définition, c'est un lien entre deux éléments ou plus. Ce lien peut-être visible (un câble) ou invisible (les ondes radio). Notre liaison RS-232 a donc besoin d'un lien physique pour fonctionner.

Les prises utilisées sur les ordinateurs pour le port RS-232 (port Série) sont de type DB9 ou DB25. Aujourd'hui, les ordinateurs ne sont plus équipés que de prises DB9 pour le port série, mais si vous possédez un vieux système, vous pourrez certainement trouver une prise DB25. Je ne vais me préoccuper ici que de la prise DB9, dont voici un schéma :

Pour une liaison RS-232 simple (ou full duplex), seules trois broches de la prise sont utilisées ; dans la majorité des cas, les systèmes en communication ne nécessitent guère plus que ce type de liaison. Je ne vous présenterai donc que celui-ci, car c'est celui que j'utilise dans mes montages électroniques.

Alors, ces broches ?
  • La broche N°5 sert à mettre la masse des deux systèmes en commun pour être certains que le point de référence des niveaux logiques est le même ; ainsi, on peut être sûrs que ce qui est un niveau 1 pour l'un des systèmes est bien un niveau 1 pour l'autre.
  • La broche N°2, c'est par là que le système reçoit les données : c'est l'entrée du signal.
  • La broche N°3, c'est la broche par laquelle le système envoie les données.


Donc pour faire dialoguer deux systèmes, il faut mettre en commun les broches N°5 des deux systèmes et croiser les broches N°2 et N°3. C'est-à-dire que la broche N°2 du premier système doit être reliée à la broche N°3 du second, et vice-versa.

Ensuite, si l'un des systèmes est un ordinateur, il faudra néanmoins le tromper car les PC n'aiment pas les liaisons simples. Pour cela, il faudra relier les broches N°1, N°4 et N°6 ensemble, de même que les broches N°7 et N°8 ensemble du côté du câble où se trouve l'ordinateur (si vous reliez deux ordinateurs, il faudra faire ça des deux côtés du câble). En fait, les ordinateurs utilisent une liaison complète qui comporte des signaux de contrôle sur les différentes broches de la prise : il faut donc leurrer le système en lui renvoyant ses propres signaux, mais je passe sur ces détails. Le résultat est donc le schéma suivant :


Voilà : vous savez relier deux systèmes utilisant la norme RS-232. Vous savez même comment ils font pour communiquer. Pas mal, hein ! :p

Comment je peux me servir de cette liaison ?

Bon : on va maintenant voir comment créer son propre système supportant cette norme.
Je vous rappelle que tout à l'heure, nous avons remarqué que la norme RS-232 travaille avec des tensions de +3 à +15 V et de -3 et -15 V (en général, on trouve des tensions de +12 et -12 V). Et si on veut créer un circuit électronique capable de communiquer en utilisant cette norme, il va falloir utiliser un microcontrôleur supportant les communications série. Or, ce genre de microcontrôleur ne supporte pas de tension supérieure à +5 V.

Et là, on a un problème : si on branche directement le microcontrôleur sur une prise série d'un ordinateur d'une part, le microcontrôleur n'est pas capable d'envoyer des signaux en -5 V ; d'autre part, si le PC essaie d'envoyer un signal au microcontrôleur, celui-ci risque de ne pas apprécier du tout la tension délivrée par le port série du PC, et nous claquer entre les mains. Mais que personne ne panique, j'ai la solution. En fait, il existe un petit circuit intégré pas cher, que l'on trouve partout, et qui permet de faire l'adaptation entre les signaux RS-232 et les signaux TTL du microcontrôleur. Ce circuit, c'est le MAX232 (oui : je pense qu'ils n'ont pas choisi le nom par hasard).

[...Après quelques semaines d'absence, il est temps de reprendre. Où en étais-je alors... ^^ ]

Ah oui, le fameux MAX232. Pour ceux que ça intéresse, la documentation technique fournie par le fabriquant est disponible ici. Le MAX232 est donc un petit circuit intégré qui, couplé à cinq condensateurs, permet de faire l'adaptation entre les signaux TTL d'un microcontrôleur et les signaux RS-232 de votre ordinateur. Il vous suffit donc de câbler ce composant avec ses condensateurs de 1 µF, comme ceci :

Il ne vous reste ensuite qu'à faire transiter vos signaux de communication par ce circuit, et c'est gagné. Les signaux venant du microcontrôleur sont mis à la patte 10 du MAX, et ressortent au format RS-232 à la patte 7 ; les signaux RS-232 venant du PC, quant à eux, sont mis à la patte 8 du MAX232, et ressortent au format TTL (signaux microcontrôleur) à la patte 9 de ce dernier. Comme le montre bien le schéma ci-dessus, il est possible de convertir deux autres signaux grâce aux pattes 11 et 14 pour la conversion en RS-232, et aux pattes 13 et 12 pour le sens inverse.

Et voilà. Vous savez désormais comment utiliser l'interface RS-232 de votre ordinateur : il ne vous reste plus qu'à apprendre un langage de programmation pour microcontrôleur, et le tour est joué. Vous pouvez faire ce que vous voulez. Quant à moi, je vous ai d'ores et déjà concocté un tuto sur l'utilisation du port série côté ordinateur avec Visual Basic, que vous pouvez trouver ici. ^^

Source: siteduzero.com | Licence: Creative Commons
Aller à la page  [1] 2