mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
void init_twi_slave(uint8_t adr)
{
  
  TWAR = adr; //Adresse setzen
  TWCR &= ~(1<<TWSTA)|(1<<TWSTO);
  TWCR|= (1<<TWEA) | (1<<TWEN)|(1<<TWIE);
  buffer_adr=0xFF;
  sei();
}
Der Code stammt von Peter
Was muss ich ändern?

LG Klaus

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Master nutze ich den Atmega 1284p und als Slave den Attiny2313A

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus schrieb:
> Arbeite jetzt mit dem AVR studio 7

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

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :-(

Autor: c-hater (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.