Forum: Mikrocontroller und Digitale Elektronik TWI (I2C) und Slave


von Klaus (Gast)


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

von spess53 (Gast)


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

von Horst (Gast)


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?

von Klaus (Gast)


Lesenswert?

Als Master nutze ich den Atmega 1284p und als Slave den Attiny2313A

von Horst (Gast)


Lesenswert?

Der 1284 ist eine andere Familie als der 128, die TWI-Register sind aber 
gleich, auch der twi_vect. DAs sollte also passen.

Zum Tiny und USI har spess ja schon was geschrieben, da brauchst Du 
andere TWI-Routinen.
https://www.mikrocontroller.net/articles/USI

von Klaus (Gast)


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?

von Wolfgang (Gast)


Lesenswert?

Klaus schrieb:
> Arbeite jetzt mit dem AVR studio 7

Sicher?
Die letzte Version von AVR Studio war IMHO AVR Studio 5.1

von Klaus (Gast)


Lesenswert?

Ist eigentlich egal. Scheinbar kennst du die Version die ich meine. 
Finde ich richtig toll wie du auf jede falsche Info reagierst. Wirlich 
toll :-(

von c-hater (Gast)


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.

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.