TWI (I2C) und Slave

Gast #5442441
Lesenswert?

In diesem Beitrag wird der I2C Bus zur Verbindung von 2 AVR Prozessoren 
verwendet. Zum Beispiel einen Atmega 128 als Master und einen Attiny 
2313 als Slave:

https://rn-wissen.de/wiki/index.php/TWI_Slave_mit_avr-gcc#Slave_sourcecode

Der Beitrag stammt aus dem Jahr 2012 und seitdem ist einiges vergangen. 
Arbeite jetzt mit dem AVR studio 7 und dort sind einige Befehle anders.
Es geht dabei um

- TWAR
- TWCR
- ISR(TWI_vert)

andere Befehle werden erkannt. z.B.

- TWCR_ACK
- TWCR_NACK

meine dieses Stück vom code
1
void init_twi_slave(uint8_t adr)
2
{
3
  
4
  TWAR = adr; //Adresse setzen
5
  TWCR &= ~(1<<TWSTA)|(1<<TWSTO);
6
  TWCR|= (1<<TWEA) | (1<<TWEN)|(1<<TWIE);
7
  buffer_adr=0xFF;
8
  sei();
9
}
Der Code stammt von Peter
Was muss ich ändern?

LG Klaus
Gast #5442511
Lesenswert?

Hi

>und einen Attiny 2313 als Slave:

Der ATTiny2313 hat kein "richtiges" TWI sondern nur eine USI (Universal 
Serial Interface). Und die USI hat andere Register wie das TWI.

Also siehe Datenblatt.

MfG Spess
Gast #5442514
Lesenswert?

Klaus schrieb:
> Arbeite jetzt mit dem AVR studio 7 und dort sind einige Befehle anders.
> Es geht dabei um
>
> - TWAR
> - TWCR
> - ISR(TWI_vert)

Das liegt nicht am AVR Studio sondern daran, daß Atmel die Register bei 
jeder Prozessorfamilie anders benannt hat.
Die passenden Abkürzungen zu Deinen Prozessoren findest Du im jeweiligen 
Datenblatt.
Welche benutzt Du denn?
Gast #5442561
Lesenswert?

Habe gleich nachgeschaut. Das USI dabei hatte ich vollkommen übersehen.
Leider hat jtronic seine Webseite gerade im Bau und deswegen 
geschlossen. Kann also nicht nachsehen.
Wenn ich das richtig verstanden habe, ist für USI und I2C beim Atti 2313 
das gleiche Programm?
Gast #5442748
Lesenswert?

Klaus schrieb:

> Habe gleich nachgeschaut. Das USI dabei hatte ich vollkommen übersehen.

Es hätte dir schon lange vorher auffallen müssen, dass der Tiny keine 
dedizierte I2C-Hardware besitzt. Weil: sie taucht im Datenblatt einfach 
nicht auf...

> Wenn ich das richtig verstanden habe, ist für USI und I2C beim Atti 2313
> das gleiche Programm?

Was meinst du damit? "USI" ist eigentlich kaum mehr als ein generisches 
Schieberegister. Wenn es als Unterbau für I2C verwendet werden soll, 
muss es natürlich dafür geeignet programmiert werden.

Das ist deutlich mehr Aufwand, als wenn man dedizierte I2C-Hardware 
benutzen kann. Und natürlich sieht das entsprechende Programm auch 
völlig anders aus, denn es benutzt ja völlig andere Hardware.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren