Voici un petit programmateur, idéal pour dupliquer les mémoires séries pour bus I2C. Bon marché et facile à utiliser, il supporte cinq modèles d’EEPROM de 4 à 128kbits de plusieurs fabricants.
Depuis que les alarmes à rollingcode ont vu le jour et ne cessent de se diffuser, les techniciens et le personnel travaillant dans les secteurs de l’installation et de la maintenance de ce type de produit demandent qu’on leur mette à disposition de nouveaux outils, adaptés aux besoins qui se font jour et qui n’existaient pas auparavant.
D’où la croissante demande de petits copieurs d’EEPROM série leur permettant d’effectuer une copie des mémoires contenant les clés des alarmes ou les mots de passe, que parfois les utilisateurs oublient ou modifient par inadvertance, et qui constituent la cause de panne la plus fréquente.
En outre, ce genre de copieur ferait gagner du temps à ceux qui ont affaire aux télécommandes à auto-apprentissage.
Dans ce cas, au lieu de demander au récepteur de chaque fois recommencer la procédure visant à analyser la clé codée envoyée par l’émetteur, il suffirait de la lui faire lire une fois pour toutes, la stocker dans la mémoire du récepteur et, à partir de là, faire le nombre de copies nécessaires, soit pour en faire les doubles de clé, que généralement les clients demandent lors de l’achat d’une nouvelle alarme, soit pour constituer une copie de sauvegarde.
Toutes ces raisons nous ont conduits à nous pencher sur la question et à mettre au point le petit copieur que voici.
Ses domaines d’application
A part son faible prix, sa principale caractéristique est de pouvoir programmer non pas un seul type d’EEPROM (comme c’est généralement le cas pour des copieurs de cet ordre de prix) mais cinq types, de plusieurs fabricants (Microchip, ST, Cypress, Atmel, etc.), de taille allant de 4 à 128 kbits, du moment qu’il s’agisse de mémoires en boîtier DIP à 8 pattes (voir détail en figure 1).
De ce fait, ce copieur n’est pas exclusivement réservé aux techniciens travaillant dans le secteur des alarmes et des télécommandes, mais trouve aussi une place dans les ateliers des dépanneurs télé, car il peut copier les EEPROM généralement associées aux microprocesseurs SDA2080x utilisés dans les téléviseurs couleurs pour mémoriser les canaux et les niveaux de volume, luminosité, contraste, etc.
Dans ce genre de travail, le technicien, avant de procéder à des essais et de dérégler, pour ainsi dire, le téléviseur, peut tout de suite en faire une copie, de manière à remettre les choses telles qu’elles étaient avant l’intervention, et rendre le téléviseur au client avec les mêmes réglages avec lesquels il était arrivé à l’atelier.
Sans compter que s’il était amené à carrément remplacer l’EEPROM, cela lui éviterait tous les inconvénients dérivant de la mise en place d’une mémoire vierge (recherche des canaux et initialisation de toute la kyrielle des paramètres…).
Gestion par microcontrôleur
L’extrême souplesse de ce petit copieur est due au fait qu’il embarque un microcontrôleur. Le logiciel avec lequel celui-ci a été programmé n’est pas, à franchement parler, un petit programme de quelques lignes, mais un programme plutôt complexe qui, avant de lancer une copie tête baissée comme on pourrait penser, procède à une sorte d’analyse qui le conduit à faire un choix parmi plusieurs méthodes de programmation.
C’est ainsi qu’il effectue d’abord quelques écritures à l’essai. En fait il commence à tester la mémoire.
Après avoir écrit dans un certain nombre d’adresses, il lit le résultat et détermine si la méthode de copie utilisée pour cette première tentative convient au type de mémoire dans laquelle il va écrire.
Si tel est le cas, il continue. Sinon il teste une autre méthode de copie et, s’il le faut, il en teste encore une autre, en changeant chaque fois de protocole, jusqu’à trouver la bonne. Pour savoir si la copie a abouti ou pas, il suffit de regarder ce que fait la LED associée. Si elle clignote une seule fois et puis s’arrête, cela veut dire que la programmation s’est effectuée avec succès. Si, par contre, elle clignote tout le temps sans jamais s’arrêter, c’est que quelque chose s’y oppose et la copie ne peut avoir lieu.
Maintenant que vous savez ce que ce copieur peut faire et quelle est l’étendue de son logiciel, on peut passer à l’étude du schéma, somme toute assez réduit, comme à chaque fois qu’un montage embarque un microcontrôleur.
Figure 1 : Les cinq types de mémoires supportées.
Le PIC16C505 de Microchip
Figure 2a : Schéma synoptique interne.
Figure 2b : Brochage et fonction des broches.
Figure 2 : Le PIC16C505 de Microchip.
C’est un microcontrôleur à 8 bits, à architecture RISC (Reduced Instruction Set Controller). Son set comprend seulement 33 instructions. Il peut travailler à une fréquence d’horloge de 20 MHz. Chaque instruction est exécutée en 200 nanosecondes.
Sa mémoire EEPROM est de 1 024 mots de 12 bits.
Le microcontrôleur
Le microcontrôleur auquel nous avons fait appel dans ce montage est un PIC16C505 de Microchip (voir figure 2). Microcontrôleur à 8 bits, possédant une architecture de type RISC (Reduced Instruction Set Controller), dont le set d’instructions compte seulement 33 instructions.
Il peut travailler à une fréquence d’horloge de 20 MHz, ce qui revient à dire que chaque instruction est exécutée en 200 nanosecondes.
Il possède une EEPROM de programme de 1 024 mots de 12 bits, en plus d’une mémoire de données de 72 emplacements. Cette taille, associée à une largeur de mots de 12 bits, en a rendu possible la programmation en utilisant le PICBasic, langage plus gourmand mais plus puissant que l’assembleur.
Les trois autres choses intéressantes pour ce petit microcontrôleur en boîtier DIP 14 pattes sont le fait qu’il dispose de 11 lignes d’entrée/sortie réparties en deux ports (RB et RC), une tension d’alimentation pouvant descendre en dessous de 5 volts, car il peut même fonctionner avec une tension inférieure à 3 volts, et la présence d’un timer à 8 bits utilisable comme diviseur de fréquence programmable.
Placé au coeur du circuit, c’est lui qui tient sous contrôle les principales fonctions.
Après les initialisations propres à toute mise en route d’un système à base de microcontrôleur, il teste l’état des microinterrupteurs 1 et 2 (référencés DS1 dans le schéma) et celui du bouton poussoir P1.
Dès qu’on appuie sur ce poussoir, l’état logique de la patte 13 bascule.
Initialement maintenue à l’état haut par une résistance de pull-up interne au boîtier, cette patte passe à l’état logique bas.
Ce changement d’état lance alors une routine de copie, en tenant compte des caractéristiques de la mémoire dans laquelle il va écrire.
Or c’est là la particularité et la complexité de son programme de gestion.
La copie ne s’effectue pas à l’aveuglette, mais par pesées successives.
Dans un premier temps le microcontrôleur écrit une donnée et la lit, pour voir si la méthode de programmation utilisée est appropriée au type de mémoire vierge utilisée pour recevoir la copie et que nous appelons SLAVE.
C’est l’état défini par les deux microinterrupteurs (1 et 2) de DS1 qui renseigne le microcontrôleur quant à la capacité de l’EEPROM slave qu’on lui demande de programmer.
Cela va de soi que pour pouvoir se copier l’une dans l’autre, ces deux mémoires (la MASTER et la SLAVE, la mémoire maître et la mémoire esclave) doivent avoir la même taille. Avoir la même taille, cela ne signifie pas avoir le même boîtier, ni forcément avoir la même référence et la même marque, car rien n’empêche que les mémoires soient de marques différentes.
C’est le logiciel qui, dans une certaine mesure, détermine si elles sont compatibles.
La phase de lecture/écriture
En gros, cette phase peut se décrire ainsi.
Après avoir terminé les vérifications initiales, le microcontrôleur lit l’une après l’autre les différentes cases de la mémoire master (l’original) et en écrit le contenu dans les cases respectives de la mémoire slave (la copie). Au terme de cette opération, il déclenche le clignotement de la diode LED (LD1).
Si la procédure a été menée sans difficultés, la LED clignote une seule fois.
Si par contre la copie a échoué, les clignotements sont continus et ne s’arrêtent pas, signalant que quelque chose est allé de travers. La copie n’a pas abouti. Il y aurait lieu d’essayer avec un autre type d’EEPROM.
Mais après ce survol, voyons comment vont les choses plus en détail. Référons-nous au schéma de la figure 3.
Analyse du fonctionnement
Commençons par le commencement.
Sitôt que le circuit reçoit tension sur le bornier VAL et que le régulateur U1 distribue les 5 volts stabilisés, le PIC déclenche tout d’abord un Reset automatique grâce au power-on Reset dont il est équipé en interne.
Puis initialise ses lignes d’entrée/sortie, en configurant les pattes 4, 12 et 13 comme entrées et les pattes 3, 8 et 10 comme sorties.
Les pattes 2 et 9 restent bidirectionnelles car ce sont elles qui assurent le transfert de données de et vers les mémoires intéressées par la copie.
Toutes les lignes d’entrée aboutissent, à l’intérieur du PIC, à des résistances de pull-up. Elles sont donc à l’état haut.
A signaler que la patte 8 du microcontrôleur (RC2) profite de la propriété qu’a le port C de fournir un courant de sortie élevé, capable, en tout cas, d’allumer la LED LD2.
Après le power-on Reset, le microcontrôleur exécute la première instruction et commence à tourner.
Dans le programme principal, il teste l’état logique des pattes 4 et 12 qui (nous l’avons vu) aboutissent aux microinterrupteurs de DS1. Tout éventuel changement d’état sur l’un de ces deux micro-interrupteurs est aussitôt pris en compte.
Puis le programme entre dans une boucle qui se met à surveiller l’état de RB0 (patte 13) et il y reste aussi longtemps que le bouton poussoir P1 est ouvert.
Celui-ci est en fait le bouton qui lance la copie et - cela tombe sous le sens - doit être enfoncé après avoir inséré une EEPROM vierge dans le support destiné à la mémoire slave et une EEPROM programmée dans le support master.
Quelqu’un qui se fierait exclusivement au jugement oculaire, pourrait tout bonnement conclure que la copie s’effectue instantanément, tellement le temps des opérations paraît court. En effet la copie d’une EEPROM se fait en quelques instants, tout au moins lorsqu’elle a lieu, et que la LED clignote juste une seule fois.
Mais en réalité les choses ne sont pas si simples, car sitôt que le microcontrôleur a détecté un zéro logique sur la patte 13, il va lire la configuration des entrées 4 et 12 aboutissant aux micro-interrupteurs qui le renseignent quant à la taille de la mémoire à programmer.
Puis il démarre le test d’écriture/lecture dans l’EEPROM slave pour déterminer quel est le protocole de copie le plus adapté. Il entre alors dans une routine au cours de laquelle il évalue le résultat de la copie ainsi menée et, si besoin, modifie la procédure jusqu’à trouver celle qui permet un cycle d’écriture/lecture sans accroc.
C’est à partir de là qu’il lance alors la véritable copie du boîtier master dans le boîtier slave, un octet à la fois, octet après octet.
En effet, la RAM du PIC étant limitée en taille, il serait impensable de lire en bloc l’EEPROM pleine, garder tout son contenu en mémoire temporaire, et puis, en un deuxième temps, passer à la phase d’écriture, d’affilée. La zone de stockage temporaire dans le microcontrôleur ne permet pas de faire ce qu’on appelle un back-up.
Les échanges entre le microcontrôleur et les mémoires se font par bus I2C, au moyen de deux lignes : celle de l’horloge (SCL) représentée physiquement par la patte 3 du microcontrôleur et par la patte 10 pour ce qui concerne la liaison au boîtier slave. Tandis que pour l’échange des données en entrée/sortie (SDA) on fait appel à la patte 2 côté master et à la patte 9 côté slave.
Cette configuration matérielle fait que la duplication d’une EEPROM s’effectue de manière, tout compte fait, assez simple car, si l’on avait relié les deux mémoires sur un seul et même bus, il aurait fallu prévoir un moyen de les adresser. Ce qui aurait conduit à employer quelques autres pattes du PIC pour empêcher qu’on n’accède en lecture à l’EEPROM dans laquelle il convient d’écrire, et en écriture dans celle dans laquelle il convient de lire.
Figure 3 : Schéma électrique du copieur pour EEPROM séries.
Les adresses externes
Outre que, pour cette raison, qui est pourtant un argument de taille, nous avons évité d’adresser les mémoires pour une autre raison. Pour plus de détails, référez-vous au texte de la figure 4.
C’est qu’en fait les mémoires des différents fabricants, même si elles se ressemblent au point de vue du boîtier et ont la même organisation interne, elles diffèrent parfois l’une de l’autre en ce sens que certaines d’entre elles n’ont pas les trois pattes qui font la spécificité du standard du bus I2C.
A titre d’exemple : dans les mémoires 24Cxx de SGS-Thomson (ST) les pattes 1, 2 et 3, au lieu d’être reliées respectivement à A, A1 et A2 (comme c’est généralement le cas pour les modèles des autres constructeurs), n’aboutissent à aucune connexion à l’intérieur du boîtier (elles sont NC : non connectées).
Autrement dit : le choix d’un bus unique aurait conduit à davantage de complexité car il aurait fallu prendre en compte ces différences de standard dans le brochage des mémoires et utiliser des lignes de bus distinctes, notamment une pour la lecture et une autre pour l’écriture, avec tous les problèmes qui en découlent.
C’est pourquoi nous avons déjoué une bonne part de la complexité en introduisant les deux micro-interrupteurs DS1.
Leur position (voir la figure 5) indique au microcontrôleur à quel type de mémoire il a affaire, et celui-ci s’organise en conséquence.
Si l’on utilise des mémoires 24C04 (512 k x 8 bits), les deux micro-interrupteurs doivent être laissés tous les deux ouverts (OFF).
Si l’on utilise des 24C08 (512 k x 8 bits), le micro-interrupteur 1 doit être positionné sur OFF et le micro-interrupteur 2 sur ON.
Pour les mémoires 24C128 (16 k x 8 bits), la situation est inversée : c’est le micro-interrupteur 1 qui doit être positionné sur ON, tandis que le micro-interrupteur 2 doit être positionné sur OFF.
Enfin, les mémoires 24C16 (2 k x 8 bits) demandent que les micro-interrupteurs soient tous les deux fermés (position ON).
Les EEPROM série à bus I2C
Figure 4 : Schéma synoptique interne d’une mémoire de type 24Cxx.
Avec la diffusion de ce type de bus, nombreux sont les fabricants qui ont des EEPROM série à leur catalogue.
Il n’est donc pas surprenant d’en trouver sous des noms différents.
Ce à quoi il faut faire attention, c’est que parfois – malgré qu’elles se présentent en boîtiers similaires, aient la même taille mémoire, la même structure interne et le même brochage – elles ne sont pas compatibles broche à broche et n’ont pas le même protocole de communication.
Ce qui demande un tout autre mode d’adressage.
Il est notoire que dans le bus I2C tous les dispositifs pouvant se placer sur le bus ont une adresse constituée d’une partie fixe et d’une partie variable déterminée par des lignes d’adresses.
Cela signifie que pour trois lignes d’adresses, par exemple, nous pouvons avoir jusqu’à 8 composants du même type sur le bus.
C’est la raison pour laquelle toute commande de type série, après les bits de synchronisation, prévoit l’adresse binaire, sur trois bits, du circuit auquel elle s’adresse.
Ce sont les possibilités offertes par les combinaisons logiques allant de 000 (zéro décimal) à 111 (7 décimal).
Théoriquement, les mémoires pouvant se brancher sur ce type de bus, devraient donc toutes avoir les mêmes caractéristiques.
Mais, dans la pratique, les choses ne vont pas toujours ainsi. Car si certaines d’entre elles possèdent les trois pattes constituant la partie configurable du circuit, d’autres en sont dépourvues. C’est le cas, pour n’en citer qu’une, de la mémoire 24C08 de SGS-Thomson qui, tout en se présentant sous le même boîtier que l’équivalente 24C08 de Microchip ou de Cypress, n’a aucune des trois pattes généralement réservées à la partie configurable de l’adresse. En fait celles-ci n’aboutissent, à l’intérieur du boîtier, à aucune connexion (NC = Non Connectées). Attention donc lorsque vous travaillez avec ce type de composants.
Configuration des micro-interrupteurs du dip-switchs DS1
Figure 5 : Configuration des microinterrupteurs du dip-switch DS1.
Difficile à couvrir par programmation, l’identification du type d’EEPROM utilisée pour la copie est confiée à une paire de micro-interrupteurs désignés par DS1 dans le schéma électrique.
Ils sont à configurer au cas par cas, en tenant compte des caractéristiques propres à la mémoire qu’on utilise.
A côté de chaque type de mémoire, non seulement nous donnons la façon dont il faut placer les micro-interrupteurs mais nous indiquons aussi les états correspondants sur les pattes du microcontrôleur.
Notre copieur n’est certes pas universel.
Mais l’on peut se réjouir de le voir capable de programmer cinq types d’EEPROM.
Ces cinq types peuvent avoir des noms comportant des blocs de lettres différents, selon la fantaisie du fabricant.
A condition qu’elles comportent impérativement les mêmes blocs de chiffres.
Nous avons programmé avec succès les mémoires de Microchip, SGSThomson, Cypress et Atmel.
On peut panacher les mémoires d’un fabricant avec celles d’un autre. Par exemple : lire dans la mémoire de tel fabricant et écrire dans la mémoire d’un tel autre, pourvu qu’elles aient la même taille mémoire.
Réalisation pratique
Après en avoir fini avec la théorie, passons à la réalisation pratique.
Celle-ci démarre avec la préparation du petit circuit imprimé à laquelle on parvient par photogravure et passage au perchlo.
Celui-ci est un simple face. Référez-vous à la figure 5(8). Le circuit y est représenté à l’échelle 1. Il faut préalablement le photocopier sur une feuille de papier mylar.
Une fois que la carte a été gravée et percée, il faut y installer et souder les composants (il n’y en a pas beaucoup) en commençant par ceux à taille basse et finir par ceux à taille haute. Cette progression rend plus facile les opérations de soudure.
D1 est une diode au silicium. Elle demande un peu d’attention pour ce qui concerne le respect des polarités.
Puis montez les trois supports tulipe : un à 14 pattes pour le microcontrôleur, et deux à 8 pattes pour les mémoires, en les orientant correctement. Pour cela, référez-vous au plan de montage de la figure 7. Attention, car les trois supports ne sont pas tous disposés dans le même sens.
Montez ensuite le dip-switch DS1 en l’orientant de sorte que le micro-interrupteur 1 se trouve à côté du support de l’EEPROM slave. Puis le bouton poussoir, modèle pour circuit imprimé, normalement ouvert, au pas de 5 x 5.
Continuez avec les deux condensateurs chimiques en les orientant correctement.
Puis mettez en place le régulateur 5 volts 7805. Montage à la verticale, le dos métallique tourné vers le condensateur C4.
Enfin soudez le bornier bipolaire destiné à recevoir la tension d’alimentation. Modèle pour circuit imprimé, lui aussi au pas de 5 mm.
N’oubliez pas que la carte comporte un strap, allongé entre R3 et C7.
Pour ce qui concerne les LED, une sert comme témoin d’alimentation et l’autre comme témoin de programmation. Elles ont un sens qui doit être respecté. Rappelons que la cathode est repérée par un méplat sur le côté.
Après quoi vous pouvez mettre en place le microcontrôleur U2 programmé, avec son détrompeur tourné vers R1, et brancher sur le bornier VAL une tension continue comprise entre 9 et 12 volts, si possible déjà préalablement stabilisée, capable de débiter un courant d’au moins 6 mA. Cette tension peut soit provenir d’un bloc secteur, soit même d’une pile de 9 volts si le copieur ne devait servir que très occasionnellement. Mais, dans tous les cas, il est impératif de respecter les polarités dans sa mise en place, bien que la diode D1 sanctionnerait drastiquement toute éventuelle étourderie.
C’est le pôle positif qui arrive sur l’anode. Le pôle négatif est relié à la masse.
L’idéal serait de protéger le circuit dans un petit boîtier plastique, en y aménageant des ouvertures pour les LED, le bouton poussoir, les micro-interrupteurs et les supports des circuits intégrés, pour lesquels on aurait intérêt, dans ce cas, à utiliser des modèles pour wrapping (à pattes longues).
Une fois le montage terminé, mettez le circuit sous tension. La LED LD1 (de couleur verte) s’allume. Mettez à leurs places respectives la mémoire dont on veut faire la copie et celle dans laquelle on veut écrire, en respectant l’orientation des supports : la mémoire master avec le détrompeur tourné vers le condensateur C5, et la mémoire slave tournée vers le condensateur C7.
La configuration correcte des deux micro-interrupteurs est une opération délicate et importante. Elle se fait en fonction du type d’EEPROM qu’on utilise.
Lorsque tout est prêt, une pression sur le bouton P1 lance la copie.
Au bout de quelques instants la LED LD2 (de couleur rouge) doit clignoter une seule fois, si la copie a réussi.
Si elle clignote tout le temps, c’est que quelque chose ne va pas. Vraisemblablement l’EEPROM en écriture, ou n’est pas l’un des modèles supportés par ce copieur, ou les micro-interrupteurs n’ont pas été positionnés de manière à correctement identifier la mémoire du microcontrôleur.
Une deuxième pression sur la touche P1 provoque un Reset système et arrête tout. Le copieur est alors prêt à démarrer une nouvelle copie.
Figure 6 : Schéma d’implantation des composants du copieur pour EEPROM séries.
Figure 7 : Photo d’un des prototypes prêt à fonctionner.
Figure 8 : Dessin, à l’échelle 1 du circuit imprimé du copieur d’EEPROM.
Liste des composants
R1 = 470 Ω
R2 = 10 kΩ
R3 = 10 kΩ
R4 = 470 Ω
C1 = 220 μF 25 V électrolytique
C2 = 100 nF multicouche
C3 = 10 μF 63 V électrolytique
C4 = 100 nF multicouche
C5 = 100 nF multicouche
C6 = 100 nF multicouche
C7 = 100 nF multicouche
D1 = Diode 1N4007
LD1 = LED verte 5mm
LD2 = LED rouge 5mm
U1 = Régulateur 7805
U2 = μC PIC16C505-04-MF319
DS1 = Dip-switch 2 micro-inter.
P1 = Poussoir pour ci
Divers:
1 Bornier 2 pôles
2 Supports tulipe 2 x 4 broches
1 Support 2 x 7 broches
1 Circuit imprimé réf. L071
Depuis que les alarmes à rollingcode ont vu le jour et ne cessent de se diffuser, les techniciens et le personnel travaillant dans les secteurs de l’installation et de la maintenance de ce type de produit demandent qu’on leur mette à disposition de nouveaux outils, adaptés aux besoins qui se font jour et qui n’existaient pas auparavant.
D’où la croissante demande de petits copieurs d’EEPROM série leur permettant d’effectuer une copie des mémoires contenant les clés des alarmes ou les mots de passe, que parfois les utilisateurs oublient ou modifient par inadvertance, et qui constituent la cause de panne la plus fréquente.
En outre, ce genre de copieur ferait gagner du temps à ceux qui ont affaire aux télécommandes à auto-apprentissage.
Dans ce cas, au lieu de demander au récepteur de chaque fois recommencer la procédure visant à analyser la clé codée envoyée par l’émetteur, il suffirait de la lui faire lire une fois pour toutes, la stocker dans la mémoire du récepteur et, à partir de là, faire le nombre de copies nécessaires, soit pour en faire les doubles de clé, que généralement les clients demandent lors de l’achat d’une nouvelle alarme, soit pour constituer une copie de sauvegarde.
Toutes ces raisons nous ont conduits à nous pencher sur la question et à mettre au point le petit copieur que voici.
Ses domaines d’application
A part son faible prix, sa principale caractéristique est de pouvoir programmer non pas un seul type d’EEPROM (comme c’est généralement le cas pour des copieurs de cet ordre de prix) mais cinq types, de plusieurs fabricants (Microchip, ST, Cypress, Atmel, etc.), de taille allant de 4 à 128 kbits, du moment qu’il s’agisse de mémoires en boîtier DIP à 8 pattes (voir détail en figure 1).
De ce fait, ce copieur n’est pas exclusivement réservé aux techniciens travaillant dans le secteur des alarmes et des télécommandes, mais trouve aussi une place dans les ateliers des dépanneurs télé, car il peut copier les EEPROM généralement associées aux microprocesseurs SDA2080x utilisés dans les téléviseurs couleurs pour mémoriser les canaux et les niveaux de volume, luminosité, contraste, etc.
Dans ce genre de travail, le technicien, avant de procéder à des essais et de dérégler, pour ainsi dire, le téléviseur, peut tout de suite en faire une copie, de manière à remettre les choses telles qu’elles étaient avant l’intervention, et rendre le téléviseur au client avec les mêmes réglages avec lesquels il était arrivé à l’atelier.
Sans compter que s’il était amené à carrément remplacer l’EEPROM, cela lui éviterait tous les inconvénients dérivant de la mise en place d’une mémoire vierge (recherche des canaux et initialisation de toute la kyrielle des paramètres…).
Gestion par microcontrôleur
L’extrême souplesse de ce petit copieur est due au fait qu’il embarque un microcontrôleur. Le logiciel avec lequel celui-ci a été programmé n’est pas, à franchement parler, un petit programme de quelques lignes, mais un programme plutôt complexe qui, avant de lancer une copie tête baissée comme on pourrait penser, procède à une sorte d’analyse qui le conduit à faire un choix parmi plusieurs méthodes de programmation.
C’est ainsi qu’il effectue d’abord quelques écritures à l’essai. En fait il commence à tester la mémoire.
Après avoir écrit dans un certain nombre d’adresses, il lit le résultat et détermine si la méthode de copie utilisée pour cette première tentative convient au type de mémoire dans laquelle il va écrire.
Si tel est le cas, il continue. Sinon il teste une autre méthode de copie et, s’il le faut, il en teste encore une autre, en changeant chaque fois de protocole, jusqu’à trouver la bonne. Pour savoir si la copie a abouti ou pas, il suffit de regarder ce que fait la LED associée. Si elle clignote une seule fois et puis s’arrête, cela veut dire que la programmation s’est effectuée avec succès. Si, par contre, elle clignote tout le temps sans jamais s’arrêter, c’est que quelque chose s’y oppose et la copie ne peut avoir lieu.
Maintenant que vous savez ce que ce copieur peut faire et quelle est l’étendue de son logiciel, on peut passer à l’étude du schéma, somme toute assez réduit, comme à chaque fois qu’un montage embarque un microcontrôleur.
Figure 1 : Les cinq types de mémoires supportées.
24C04 = 512 k x 8 bits(4 kbits)24C08 = 1 k x 8 bits(8 kbits)24C16 = 2 k x 8 bits(16 kbits)24C65 = 8 k x 8 bits(64 kbits)24C128 = 16 k x 8 bits(128 kbits)
Le PIC16C505 de Microchip
Figure 2 : Le PIC16C505 de Microchip.
C’est un microcontrôleur à 8 bits, à architecture RISC (Reduced Instruction Set Controller). Son set comprend seulement 33 instructions. Il peut travailler à une fréquence d’horloge de 20 MHz. Chaque instruction est exécutée en 200 nanosecondes.
Sa mémoire EEPROM est de 1 024 mots de 12 bits.
Le microcontrôleur
Le microcontrôleur auquel nous avons fait appel dans ce montage est un PIC16C505 de Microchip (voir figure 2). Microcontrôleur à 8 bits, possédant une architecture de type RISC (Reduced Instruction Set Controller), dont le set d’instructions compte seulement 33 instructions.
Il peut travailler à une fréquence d’horloge de 20 MHz, ce qui revient à dire que chaque instruction est exécutée en 200 nanosecondes.
Il possède une EEPROM de programme de 1 024 mots de 12 bits, en plus d’une mémoire de données de 72 emplacements. Cette taille, associée à une largeur de mots de 12 bits, en a rendu possible la programmation en utilisant le PICBasic, langage plus gourmand mais plus puissant que l’assembleur.
Les trois autres choses intéressantes pour ce petit microcontrôleur en boîtier DIP 14 pattes sont le fait qu’il dispose de 11 lignes d’entrée/sortie réparties en deux ports (RB et RC), une tension d’alimentation pouvant descendre en dessous de 5 volts, car il peut même fonctionner avec une tension inférieure à 3 volts, et la présence d’un timer à 8 bits utilisable comme diviseur de fréquence programmable.
Placé au coeur du circuit, c’est lui qui tient sous contrôle les principales fonctions.
Après les initialisations propres à toute mise en route d’un système à base de microcontrôleur, il teste l’état des microinterrupteurs 1 et 2 (référencés DS1 dans le schéma) et celui du bouton poussoir P1.
Dès qu’on appuie sur ce poussoir, l’état logique de la patte 13 bascule.
Initialement maintenue à l’état haut par une résistance de pull-up interne au boîtier, cette patte passe à l’état logique bas.
Ce changement d’état lance alors une routine de copie, en tenant compte des caractéristiques de la mémoire dans laquelle il va écrire.
Or c’est là la particularité et la complexité de son programme de gestion.
La copie ne s’effectue pas à l’aveuglette, mais par pesées successives.
Dans un premier temps le microcontrôleur écrit une donnée et la lit, pour voir si la méthode de programmation utilisée est appropriée au type de mémoire vierge utilisée pour recevoir la copie et que nous appelons SLAVE.
C’est l’état défini par les deux microinterrupteurs (1 et 2) de DS1 qui renseigne le microcontrôleur quant à la capacité de l’EEPROM slave qu’on lui demande de programmer.
Cela va de soi que pour pouvoir se copier l’une dans l’autre, ces deux mémoires (la MASTER et la SLAVE, la mémoire maître et la mémoire esclave) doivent avoir la même taille. Avoir la même taille, cela ne signifie pas avoir le même boîtier, ni forcément avoir la même référence et la même marque, car rien n’empêche que les mémoires soient de marques différentes.
C’est le logiciel qui, dans une certaine mesure, détermine si elles sont compatibles.
La phase de lecture/écriture
En gros, cette phase peut se décrire ainsi.
Après avoir terminé les vérifications initiales, le microcontrôleur lit l’une après l’autre les différentes cases de la mémoire master (l’original) et en écrit le contenu dans les cases respectives de la mémoire slave (la copie). Au terme de cette opération, il déclenche le clignotement de la diode LED (LD1).
Si la procédure a été menée sans difficultés, la LED clignote une seule fois.
Si par contre la copie a échoué, les clignotements sont continus et ne s’arrêtent pas, signalant que quelque chose est allé de travers. La copie n’a pas abouti. Il y aurait lieu d’essayer avec un autre type d’EEPROM.
Mais après ce survol, voyons comment vont les choses plus en détail. Référons-nous au schéma de la figure 3.
Analyse du fonctionnement
Commençons par le commencement.
Sitôt que le circuit reçoit tension sur le bornier VAL et que le régulateur U1 distribue les 5 volts stabilisés, le PIC déclenche tout d’abord un Reset automatique grâce au power-on Reset dont il est équipé en interne.
Puis initialise ses lignes d’entrée/sortie, en configurant les pattes 4, 12 et 13 comme entrées et les pattes 3, 8 et 10 comme sorties.
Les pattes 2 et 9 restent bidirectionnelles car ce sont elles qui assurent le transfert de données de et vers les mémoires intéressées par la copie.
Toutes les lignes d’entrée aboutissent, à l’intérieur du PIC, à des résistances de pull-up. Elles sont donc à l’état haut.
A signaler que la patte 8 du microcontrôleur (RC2) profite de la propriété qu’a le port C de fournir un courant de sortie élevé, capable, en tout cas, d’allumer la LED LD2.
Après le power-on Reset, le microcontrôleur exécute la première instruction et commence à tourner.
Dans le programme principal, il teste l’état logique des pattes 4 et 12 qui (nous l’avons vu) aboutissent aux microinterrupteurs de DS1. Tout éventuel changement d’état sur l’un de ces deux micro-interrupteurs est aussitôt pris en compte.
Puis le programme entre dans une boucle qui se met à surveiller l’état de RB0 (patte 13) et il y reste aussi longtemps que le bouton poussoir P1 est ouvert.
Celui-ci est en fait le bouton qui lance la copie et - cela tombe sous le sens - doit être enfoncé après avoir inséré une EEPROM vierge dans le support destiné à la mémoire slave et une EEPROM programmée dans le support master.
Quelqu’un qui se fierait exclusivement au jugement oculaire, pourrait tout bonnement conclure que la copie s’effectue instantanément, tellement le temps des opérations paraît court. En effet la copie d’une EEPROM se fait en quelques instants, tout au moins lorsqu’elle a lieu, et que la LED clignote juste une seule fois.
Mais en réalité les choses ne sont pas si simples, car sitôt que le microcontrôleur a détecté un zéro logique sur la patte 13, il va lire la configuration des entrées 4 et 12 aboutissant aux micro-interrupteurs qui le renseignent quant à la taille de la mémoire à programmer.
Puis il démarre le test d’écriture/lecture dans l’EEPROM slave pour déterminer quel est le protocole de copie le plus adapté. Il entre alors dans une routine au cours de laquelle il évalue le résultat de la copie ainsi menée et, si besoin, modifie la procédure jusqu’à trouver celle qui permet un cycle d’écriture/lecture sans accroc.
C’est à partir de là qu’il lance alors la véritable copie du boîtier master dans le boîtier slave, un octet à la fois, octet après octet.
En effet, la RAM du PIC étant limitée en taille, il serait impensable de lire en bloc l’EEPROM pleine, garder tout son contenu en mémoire temporaire, et puis, en un deuxième temps, passer à la phase d’écriture, d’affilée. La zone de stockage temporaire dans le microcontrôleur ne permet pas de faire ce qu’on appelle un back-up.
Les échanges entre le microcontrôleur et les mémoires se font par bus I2C, au moyen de deux lignes : celle de l’horloge (SCL) représentée physiquement par la patte 3 du microcontrôleur et par la patte 10 pour ce qui concerne la liaison au boîtier slave. Tandis que pour l’échange des données en entrée/sortie (SDA) on fait appel à la patte 2 côté master et à la patte 9 côté slave.
Cette configuration matérielle fait que la duplication d’une EEPROM s’effectue de manière, tout compte fait, assez simple car, si l’on avait relié les deux mémoires sur un seul et même bus, il aurait fallu prévoir un moyen de les adresser. Ce qui aurait conduit à employer quelques autres pattes du PIC pour empêcher qu’on n’accède en lecture à l’EEPROM dans laquelle il convient d’écrire, et en écriture dans celle dans laquelle il convient de lire.
Figure 3 : Schéma électrique du copieur pour EEPROM séries.
Les adresses externes
Outre que, pour cette raison, qui est pourtant un argument de taille, nous avons évité d’adresser les mémoires pour une autre raison. Pour plus de détails, référez-vous au texte de la figure 4.
C’est qu’en fait les mémoires des différents fabricants, même si elles se ressemblent au point de vue du boîtier et ont la même organisation interne, elles diffèrent parfois l’une de l’autre en ce sens que certaines d’entre elles n’ont pas les trois pattes qui font la spécificité du standard du bus I2C.
A titre d’exemple : dans les mémoires 24Cxx de SGS-Thomson (ST) les pattes 1, 2 et 3, au lieu d’être reliées respectivement à A, A1 et A2 (comme c’est généralement le cas pour les modèles des autres constructeurs), n’aboutissent à aucune connexion à l’intérieur du boîtier (elles sont NC : non connectées).
Autrement dit : le choix d’un bus unique aurait conduit à davantage de complexité car il aurait fallu prendre en compte ces différences de standard dans le brochage des mémoires et utiliser des lignes de bus distinctes, notamment une pour la lecture et une autre pour l’écriture, avec tous les problèmes qui en découlent.
C’est pourquoi nous avons déjoué une bonne part de la complexité en introduisant les deux micro-interrupteurs DS1.
Leur position (voir la figure 5) indique au microcontrôleur à quel type de mémoire il a affaire, et celui-ci s’organise en conséquence.
Si l’on utilise des mémoires 24C04 (512 k x 8 bits), les deux micro-interrupteurs doivent être laissés tous les deux ouverts (OFF).
Si l’on utilise des 24C08 (512 k x 8 bits), le micro-interrupteur 1 doit être positionné sur OFF et le micro-interrupteur 2 sur ON.
Pour les mémoires 24C128 (16 k x 8 bits), la situation est inversée : c’est le micro-interrupteur 1 qui doit être positionné sur ON, tandis que le micro-interrupteur 2 doit être positionné sur OFF.
Enfin, les mémoires 24C16 (2 k x 8 bits) demandent que les micro-interrupteurs soient tous les deux fermés (position ON).
Les EEPROM série à bus I2C
Figure 4 : Schéma synoptique interne d’une mémoire de type 24Cxx.
Avec la diffusion de ce type de bus, nombreux sont les fabricants qui ont des EEPROM série à leur catalogue.
Il n’est donc pas surprenant d’en trouver sous des noms différents.
Ce à quoi il faut faire attention, c’est que parfois – malgré qu’elles se présentent en boîtiers similaires, aient la même taille mémoire, la même structure interne et le même brochage – elles ne sont pas compatibles broche à broche et n’ont pas le même protocole de communication.
Ce qui demande un tout autre mode d’adressage.
Il est notoire que dans le bus I2C tous les dispositifs pouvant se placer sur le bus ont une adresse constituée d’une partie fixe et d’une partie variable déterminée par des lignes d’adresses.
Cela signifie que pour trois lignes d’adresses, par exemple, nous pouvons avoir jusqu’à 8 composants du même type sur le bus.
C’est la raison pour laquelle toute commande de type série, après les bits de synchronisation, prévoit l’adresse binaire, sur trois bits, du circuit auquel elle s’adresse.
Ce sont les possibilités offertes par les combinaisons logiques allant de 000 (zéro décimal) à 111 (7 décimal).
Théoriquement, les mémoires pouvant se brancher sur ce type de bus, devraient donc toutes avoir les mêmes caractéristiques.
Mais, dans la pratique, les choses ne vont pas toujours ainsi. Car si certaines d’entre elles possèdent les trois pattes constituant la partie configurable du circuit, d’autres en sont dépourvues. C’est le cas, pour n’en citer qu’une, de la mémoire 24C08 de SGS-Thomson qui, tout en se présentant sous le même boîtier que l’équivalente 24C08 de Microchip ou de Cypress, n’a aucune des trois pattes généralement réservées à la partie configurable de l’adresse. En fait celles-ci n’aboutissent, à l’intérieur du boîtier, à aucune connexion (NC = Non Connectées). Attention donc lorsque vous travaillez avec ce type de composants.
Configuration des micro-interrupteurs du dip-switchs DS1
Figure 5 : Configuration des microinterrupteurs du dip-switch DS1.
Difficile à couvrir par programmation, l’identification du type d’EEPROM utilisée pour la copie est confiée à une paire de micro-interrupteurs désignés par DS1 dans le schéma électrique.
Ils sont à configurer au cas par cas, en tenant compte des caractéristiques propres à la mémoire qu’on utilise.
A côté de chaque type de mémoire, non seulement nous donnons la façon dont il faut placer les micro-interrupteurs mais nous indiquons aussi les états correspondants sur les pattes du microcontrôleur.
Notre copieur n’est certes pas universel.
Mais l’on peut se réjouir de le voir capable de programmer cinq types d’EEPROM.
Ces cinq types peuvent avoir des noms comportant des blocs de lettres différents, selon la fantaisie du fabricant.
A condition qu’elles comportent impérativement les mêmes blocs de chiffres.
Nous avons programmé avec succès les mémoires de Microchip, SGSThomson, Cypress et Atmel.
On peut panacher les mémoires d’un fabricant avec celles d’un autre. Par exemple : lire dans la mémoire de tel fabricant et écrire dans la mémoire d’un tel autre, pourvu qu’elles aient la même taille mémoire.
Réalisation pratique
Après en avoir fini avec la théorie, passons à la réalisation pratique.
Celle-ci démarre avec la préparation du petit circuit imprimé à laquelle on parvient par photogravure et passage au perchlo.
Celui-ci est un simple face. Référez-vous à la figure 5(8). Le circuit y est représenté à l’échelle 1. Il faut préalablement le photocopier sur une feuille de papier mylar.
Une fois que la carte a été gravée et percée, il faut y installer et souder les composants (il n’y en a pas beaucoup) en commençant par ceux à taille basse et finir par ceux à taille haute. Cette progression rend plus facile les opérations de soudure.
D1 est une diode au silicium. Elle demande un peu d’attention pour ce qui concerne le respect des polarités.
Puis montez les trois supports tulipe : un à 14 pattes pour le microcontrôleur, et deux à 8 pattes pour les mémoires, en les orientant correctement. Pour cela, référez-vous au plan de montage de la figure 7. Attention, car les trois supports ne sont pas tous disposés dans le même sens.
Montez ensuite le dip-switch DS1 en l’orientant de sorte que le micro-interrupteur 1 se trouve à côté du support de l’EEPROM slave. Puis le bouton poussoir, modèle pour circuit imprimé, normalement ouvert, au pas de 5 x 5.
Continuez avec les deux condensateurs chimiques en les orientant correctement.
Puis mettez en place le régulateur 5 volts 7805. Montage à la verticale, le dos métallique tourné vers le condensateur C4.
Enfin soudez le bornier bipolaire destiné à recevoir la tension d’alimentation. Modèle pour circuit imprimé, lui aussi au pas de 5 mm.
N’oubliez pas que la carte comporte un strap, allongé entre R3 et C7.
Pour ce qui concerne les LED, une sert comme témoin d’alimentation et l’autre comme témoin de programmation. Elles ont un sens qui doit être respecté. Rappelons que la cathode est repérée par un méplat sur le côté.
Après quoi vous pouvez mettre en place le microcontrôleur U2 programmé, avec son détrompeur tourné vers R1, et brancher sur le bornier VAL une tension continue comprise entre 9 et 12 volts, si possible déjà préalablement stabilisée, capable de débiter un courant d’au moins 6 mA. Cette tension peut soit provenir d’un bloc secteur, soit même d’une pile de 9 volts si le copieur ne devait servir que très occasionnellement. Mais, dans tous les cas, il est impératif de respecter les polarités dans sa mise en place, bien que la diode D1 sanctionnerait drastiquement toute éventuelle étourderie.
C’est le pôle positif qui arrive sur l’anode. Le pôle négatif est relié à la masse.
L’idéal serait de protéger le circuit dans un petit boîtier plastique, en y aménageant des ouvertures pour les LED, le bouton poussoir, les micro-interrupteurs et les supports des circuits intégrés, pour lesquels on aurait intérêt, dans ce cas, à utiliser des modèles pour wrapping (à pattes longues).
Une fois le montage terminé, mettez le circuit sous tension. La LED LD1 (de couleur verte) s’allume. Mettez à leurs places respectives la mémoire dont on veut faire la copie et celle dans laquelle on veut écrire, en respectant l’orientation des supports : la mémoire master avec le détrompeur tourné vers le condensateur C5, et la mémoire slave tournée vers le condensateur C7.
La configuration correcte des deux micro-interrupteurs est une opération délicate et importante. Elle se fait en fonction du type d’EEPROM qu’on utilise.
Lorsque tout est prêt, une pression sur le bouton P1 lance la copie.
Au bout de quelques instants la LED LD2 (de couleur rouge) doit clignoter une seule fois, si la copie a réussi.
Si elle clignote tout le temps, c’est que quelque chose ne va pas. Vraisemblablement l’EEPROM en écriture, ou n’est pas l’un des modèles supportés par ce copieur, ou les micro-interrupteurs n’ont pas été positionnés de manière à correctement identifier la mémoire du microcontrôleur.
Une deuxième pression sur la touche P1 provoque un Reset système et arrête tout. Le copieur est alors prêt à démarrer une nouvelle copie.
Figure 6 : Schéma d’implantation des composants du copieur pour EEPROM séries.
Figure 7 : Photo d’un des prototypes prêt à fonctionner.
Figure 8 : Dessin, à l’échelle 1 du circuit imprimé du copieur d’EEPROM.
Liste des composants
R1 = 470 Ω
R2 = 10 kΩ
R3 = 10 kΩ
R4 = 470 Ω
C1 = 220 μF 25 V électrolytique
C2 = 100 nF multicouche
C3 = 10 μF 63 V électrolytique
C4 = 100 nF multicouche
C5 = 100 nF multicouche
C6 = 100 nF multicouche
C7 = 100 nF multicouche
D1 = Diode 1N4007
LD1 = LED verte 5mm
LD2 = LED rouge 5mm
U1 = Régulateur 7805
U2 = μC PIC16C505-04-MF319
DS1 = Dip-switch 2 micro-inter.
P1 = Poussoir pour ci
Divers:
1 Bornier 2 pôles
2 Supports tulipe 2 x 4 broches
1 Support 2 x 7 broches
1 Circuit imprimé réf. L071
Merci pour ce montage que j'ai besoin .
RépondreSupprimer