Forum: Mikrocontroller und Digitale Elektronik i2c slave code


von Danilo Reinhardt (Gast)


Lesenswert?

Hi,

ist schon mal jemand über einen I2C Slave code möglichst in C
gestolpert? Master gibt es ja zur Genüge ;)

Ciao

von flinkflash (Gast)


Lesenswert?

Servus,

unter http://hubbard.engr.scu.edu/embedded/avr/avrlib/index.html
findest du was du suchst. Momentan bin ich dabei, damit rumzuspielen.
Simuliere den I2C Master mit VMLab. Das Ding hat allerdings einige Bugs
im I2C Master Module. Kennst Du noch eine andere
Simulationsumgebung???

cu
flinkflash

http://www.krabbelbot.de

von Danilo Reinhardt (Gast)


Lesenswert?

Hi,

die avrlib hatte ich auch. Scheint net so schlecht zu sein. Leider
wollten bisher zumindest die i2c routinen net funktionieren. Bzw bei
meinem aktuellen Problem helfen sie nicht, da sie nur für den Master
modus funktionieren. Ich brauchte ja Slave, was zwar nich so schwierig
ist, leider fehlt mir aber im Moment die Idee das sparsam zu
realisieren.

Ciao und Danke!

von Matthias (Gast)


Lesenswert?

Hi

alle Megas haben ein TWI (aka I2C) Interface hardwaremäßig drin. Eine
relativ einfache Nutzung (übertragen von 2 Byte als Slave-Transmitter)
sieht dann so aus:

/**
  TWI-Schnittstelle initialisieren<br>
  Slave Transmitter Mode
*/
void i2c_init()
{
  TWAR = ASR_ADRESS;
  TWCR = (1<<TWEN)|(1<<TWEA)|(1<<TWIE);
}

/**
  Behandelt die INT's des TWI
*/
SIGNAL(SIG_2WIRE_SERIAL)
{
  if(TWSR==0xA8)
  {
    TWDR=i2c_val1;
    TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA)|(1<<TWIE);
  }
  else if((TWSR==0xB8)||(TWSR==0xB0))
  {
    TWDR=i2c_val2;
    TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWIE);
  }
  else if(TWSR==0xC0)
  {
    TWCR=(1<<TWEN)|(1<<TWINT)|(1<<TWEA)|(1<<TWIE);
  }
}

Matthias

von flinkflash (Gast)


Lesenswert?

Servus,

die Slave Routinen von AVRLib funktionieren im VMLab Simulator
einwandfrei.

cu
flinkflash

http://www.krabbelbot.de

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.