Interface serial-i2c
De MicElectroLinGenMet.
Sommaire |
Montage personnel d'une interface port RS232 et circuits I2C
La carte est géré par un micro-controleur de la famille 8051, le 89C2051.
| Test sur plaque d'essais avec un Circuit DS1621 |
Description du fonctionnement
Un micro-controleur 89C2051 sert d'interface entre le PC et le Bus I2C.
Le PC envoie à l'interface une trame demandant une écriture ou lecture d'octets sur le bus I2C et le 89C2051 s'occupe de gérer le bus i2c.
Comme l'interface utilise un port RS232, il est possible d'éloigner le bus I2C du PC.
Les ports du uControleur sont aussi accessibles à partir d'une adr. i2c fictive.
Détail des trames
Ecriture sur un esclave i2c
Sur la carte 50h, à l'adr. i2c (40h + bit r/w à 0), ecrit 1 octet 0x55
Trame envoyée par le maitre:
0x0D 0x50 0x40 0x01 0x55
- 0x0D : Entête de trame.
- 0x50 : Numéro de carte (compatibilité avec l'Interface rs485-i2c.
- 0x40 : Adresse du composant I2C à adresser en mode écriture (bit 0 à 0).
- 0x01 : Nombre d'octets à écrire.
- 0x55 : Octets à écrire.
Trame réponse envoyée par l'esclave:
0x00 si ok 0x01 si non ack.
Lecture sur un esclave i2c
Sur la carte 50h, à l'adr. i2c (40h + bit r/w à 1), ecrit 0 octet et lit 1 octet
Trame envoyée par le maitre:
0x0D 0x50 0x41 0x00 0x01
- 0x0D : Entête de trame.
- 0x50 : Numéro de carte (compatibilité avec l'Interface rs485-i2c.
- 0x41 : Adresse du composant I2C à adresser en mode écriture (bit 0 à 1).
- 0x00 : Nombre d'octet à écrire avant lecture.
- 0x01 : Nombre d'octet à lire.
Trame réponse envoyée par l'esclave:
0x00 si ok + n octets lus 0x01 si non ack + n octets lus (n octets sont envoyés en réponse mais ne sont pas bon).
Sur la carte 50h, à l'adr. i2c (40h + bit r/w à 1), ecrit 1 octet 0xFF et lit 1 octet
Trame envoyée par le maitre:
0x0D 0x50 0x41 0x01 0xFF 0x01
- 0x0D : Entête de trame.
- 0x50 : Numéro de carte (compatibilité avec l'Interface rs485-i2c.
- 0x41 : Adresse du composant I2C à adresser en mode écriture (bit 0 à 1).
- 0x01 : Nombre d'octet à écrire avant lecture.
- 0xFF : Octet à écrire avant lecture.
- 0x01 : Nombre d'octet à lire.
Trame réponse envoyée par l'esclave:
0x00 si ok + n octets lus 0x01 si non ack + n octets lus (n octets sont envoyés en réponse mais ne sont pas bon).
Programme assembleur 8051 de la carte
Source asm tpasm (Cross assembleur Unix pour ucontroleurs 8051 ... sous Linux) : serial-i2c_2051_4.asm.
Programme C exemple sous Linux
Source C sous Linux d'un programme de test utilisant l'interface reliée à un DS1621 : serial-i2c_ds1621.c.
dan@vesta$ ./serial-i2c_ds1621 Init. port série /dev/serial-i2c Init. DS1621 ... Temperature : 24.5 Fin programme.
Photos du montage en fonctionnement
Interface serial-i2c conectée à 3 monostables à base de NE555, une sonde de t° DS1621 ainsi qu'un transistor commandant un relais chauffage (Montage i2centree).
La sortie des monostables (détection sonnette, ouverture portail et ouverture porte) est lue toutes les secondes, la t° toutes les minutes et le relais est déclenché pour mise chauffage en mode Hors-gel, le tout par l'interface i2c pilotée par un programme sous Linux.
