En préambule :
Cette réalisation est une alternative au programmateur
de mémoires I2C sur le port parallèle
également présenté sur ce site ; vous
avez été plusieurs à me signaler votre
préférence pour un dispositif fonctionnant sur le
port série, tout en manifestant votre intérêt
pour le programme écrit pour le port parallèle.
J'avais travaillé moi-même sur une ébauche de
programmateur série qui ne me donnait pas satisfaction ;
c'était donc là l'occasion de se remettre au travail...
N'hésitez pas, cependant, à vous reporter à
la description du programmateur parallèle : je ne
reprendrai pas ici la partie 'Généralités'
et les bonnes adresses concernant les mémoires I2C, ni la
partie traitant du protocole, ni l'exemple d'interfaçage
entre un PIC16F84 et une 24Cxx.
Maintenant, il est grand temps de passer à la partie
qui nous intéresse, à savoir la réalisation
du système...
Analyse du schéma électrique :
Comme le remarquerons les connaisseurs, le schéma décrit est
inspiré de celui de l'interface proposée avec
une application DOS de bonne qualité, le programme PIP02,
utilisé avec le driver COM84. J'ai tenté
de conserver une certaine compatibilité avec ce programme
qui fonctionne fort bien, à condition que l'on utilise un
ordinateur pas trop rapide...
Les signaux présents sur le port série sont à
la norme RS232, cela correspond à des niveaux de tension de
+12v et -12v, sans d'ailleurs que ces niveaux soient garantis, la
norme étant relativement élastique, et les fabricants
ayant une interprétation toute personnelle de la notion de
compatibilité...
Les entrées SDA et SCL de la mémoire sont
associées respectivement aux sorties DTR et RTS ;
l'alimentation est prélevée sur la broche TxD.
Fonctionnement des entrées SDA et SCL :
- Lorsque la sortie DTR ou RTS passe à +12v,
la diode Zener est polarisée en inverse et
limite donc la tension sur l'entrée
correspondante (SDA ou SCL) à +5,1v. La diode
Schottky, également polarisée en
inverse, est quant à elle bloquée, on
peut la considérer comme absente. Rappelons
qu'une diode Schottky est juste une diode avec une
tension de seuil plus basse (elle n'est pas
constituée d'une classique jonction PN, mais
d'une jonction semiconducteur / métal, me
semble-t-il).
- Lorsque la sortie bascule à -12V, en
l'absence de diode Schottky, la Zener est
polarisée en direct et fonctionne alors
comme une diode au silicium classique, avec une
tension de seuil de 0,7v. La tension sur
l'entrée vaudrait alors -0,7v ; cette
tension un peu négative sera perçue
par la plupart des mémoires comme un niveau
logique '0' correct ; avec les 24LC256, la
valeur est trop basse (en-deçà des
spécifications) ceci entraîne des erreurs
en écriture et en lecture. Avec la diode
schottky en parallèle, donc polarisée
dans les mêmes conditions (en direct), la
tension de seuil tombera a environ 0,26v, soit
-0,26v sur l'entrée, ce qui est plus
raisonnable et siéra mieux aux 24LC256.
Remarque : La Zener sera alors très
faiblement polarisée (presque bloquée).
- Le choix de la tension Zener des diodes est
imposé par la gamme de tensions de
fonctionnement de la mémoire : entre
4,5 et 5,5v ; on aurait pu utiliser des
diodes 4,7v mais compte-tenu du faible courant de
polarisation, la tension obtenue risque d'être
un peu plus basse : j'ai opté pour des
diodes 5,1v. Le courant de polarisation des Zener en
inverse est fixé à environ 3 mA, la
résistance vaut donc :
R = (12v-5,1v)/0,003 = 2300 ohms
on prendra des 2,2 kohms.
Remarque : si vous ne trouvez pas de zener 5,1v,
vous pouvez à l'extrême rigueur utiliser
des 5,6v (en théorie non, mais en pratique oui !).
La partie alimentation :
- Elle est polarisée selon le même
principe, mais avec un courant un peu plus
élevé ; une diode lumineuse
insérée en série permet de
contrôler l'alimentation de la mémoire
(en cours de lecture ou de programmation) et de bloquer
toute tension négative quand TxD vaut -12v (donc
pas besoin de diode Schottky ici) ; la led 'encaisse'
alors une certaine tension inverse, ce qui fera hurler
les puristes : tant mieux ! Avec un courant de
polarisation de 20 mA, une tension aux bornes de la led
de 1,6v, et une Zener de 5,1v, la résistance vaut
alors :
R = (12-1,6-5,1)/0,020 = 265 ohms
on choisira donc R=270 ohms.
- Sur les 20 mA disponibles, le courant non
utilisé pour l'alimentation de la mémoire
sera détourné par la diode Zener vers la
masse. Le port série est plus généreux
en terme de courant débité que le port
parallèle ; ce choix de R=270 ohms permet de
compenser des variations de tension du port série
d'un PC à l'autre, ou pour différentes
leds : un courant même deux fois inférieur
suffirait encore à alimenter la plus goulue des
mémoires ; rien n'interdit formellement
d'augmenter la valeur de R si vous préférez
un courant plus faible (par exemple, une résistance
de 470 ohms) ; idem pour les entrées SDA et SCL...
La broche SDA est à la fois une entrée et
une sortie : les données sont envoyées
au port série par l'entrée CTS ; le
niveau de tension vaut alors -0,26v ou 5,1v, ce qui suffit
néanmoins au port série pour interpréter
un niveau logique "0" ou "1", la norme
RS232 étant assez tolérante, comme nous l'avons
dit...
L'ensemble peut être connecté au port série
d'un PC, qu'il soit muni d'une fiche DB9 ou bien DB25 ; le
schéma indique le brochage dans les deux cas de figure.
Attention au sens des diodes Zener, Schottky, de la led, ainsi
que du support huit broches 'tulipe'.
Elles ont toutes passé le test avec succès !
Seule la 24C512 manque à l'appel, alors si vous en trouvez une, soyez charitable : envoyez-la moi, vous ferez un heureux ! le bonheur, ça tient à peu de choses, finalement...
Remarque :
le programmateur parallèle permettait également
de programmer le PCF8582 ; ce n'est plus le cas avec le
programmateur série qui se limite à la famille
des 24Cxx ; pour ceux qui souhaiteraient absolument
programmer des PCF8582, il suffit d'ajouter un inter, une
résistance et un condensateur, comme l'indique le
schéma de droite ; lorsque WP est à la
masse (à "0", interrupteur passant), le système
programme les 24Cxx ; lorsque le circuit RC est actif
(inter non passant), les PCF8582 peuvent être
programmés (en indiquant au système une
mémoire de taille équivalente, soit 256 octets :
la 24C02). La lecture reste toujours possible dans tous les cas,
car elle est indépendante de l'état de la broche WP.
Adaptateur pour cartes à puce I2C :
Il existe des mémoires I2C
sous forme de cartes à
puce (attention, il ne pas les confondre
avec les télécartes ou les cartes bancaires,
Vitale, Wafer et autres Gold qui fonctionnent selon des
protocoles différents). Parmi ces cartes
à puce I2C, Je pense en particulier aux D2000
et D4000 (que l'on trouvait chez Selectronique à
une époque), ainsi qu'à la série
des ZCM02, ZCM16, ZCM64, ZCM128 et ZCM256 disponibles chez
Hi Tech Tools (au Mans) ; vous pouvez naturellement
utiliser le programme pour lire ou écrire dans
ce composant original, moyennant la réalisation
d'un adaptateur, qui convient également pour le
programme utilisant le port parallèle. Voici la
description d'une version simplifiée destinée
à venir se brancher sur le support tulipe huit
broches :
Cliquez sur l'image ci-dessous pour les détails
de réalisation :
Seule la présentation diffère, mais le protocole I2C reste le même pour les puces encartées que pour les mémoires en version DIL de la famille 24Cxx ; il suffit d'indiquer au programme un modèle de mémoire de capacité identique à celle de la carte :
|