Gast
#57741
Hi, ist schon mal jemand über einen I2C Slave code möglichst in C gestolpert? Master gibt es ja zur Genüge ;) Ciao
|
Anzeige
|
i2c slave code
Gast
#57741
Hi, ist schon mal jemand über einen I2C Slave code möglichst in C gestolpert? Master gibt es ja zur Genüge ;) Ciao
Gast
#57742
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
Gast
#57743
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!
Gast
#57744
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
Gast
#57745
Servus, die Slave Routinen von AVRLib funktionieren im VMLab Simulator einwandfrei. cu flinkflash http://www.krabbelbot.de Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|