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.

Shéma électronique


Test sur plaque d'essais avec un Circuit DS1621
Montage sur platine Elex


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.

I2cEntrée en plaque d'essais
I2cEntrée sur ci Elex