Forum: Mikrocontroller und Digitale Elektronik TWI Atmega128 Atmega8 Fehlersuche


von Stefan O. (oele22)


Angehängte Dateien:

Lesenswert?

Hallo alle zusammen,

vorab, ich bin ein Anfänger was die TWI Kommunikation betrifft. Ich habe 
mich durch das Forum gewühlt, komme aber dennoch noch nicht so recht 
weiter.

Ich möchte einen Atmega128 mit einem Atmega8 mittels TWI kommunizieren 
lassen. Der Atmega128 soll hierbei als Master und der Atmega8 als Slave 
dienen. Ich programmiere mit AVR Studio 5.1 in C.

Ich möchte den Code von Manni verwenden 
(Beitrag "AVR TWI Master und Slave Funtionen in C").

Die Slave Adresse habe ich zu 15 gewählt. Beiden Atmega´s ist die Slave 
Adresse bekannt. Die Frequenz für die TWI-Kommunikation habe ich zu 
100kHz gewählt.

Der Atmega128 wird von einem 12 VDC Netzeil und der der Atmega8 von 
einem 5 VDC Netzteil versorgt. Über 2 Pull-Up Widerstände (je 4,7kOhm) 
sind die Datenleitungen SDA und SCL an 5V angeschlossen. SDA und SCL 
sind am Atmega8 und Atemga128 an den richtigen Pins angeschlossen (Pin 
27&28 bzw. Pin 10&9 von EXT1). Meine Frage ist nun: Muss ich die Masse 
vom Atmega8 zum Pin 1 von EXT1 des Atemga128 auch verbinden?

Zunächst möchte ich als erstes, dass der Slave dem Master einfach nur 
einen Integer zuschickt. Der Master soll diesen dann auf dem LCD-Display 
anzeigen lassen.

In der Funktion TWIM_Start von TWI_Master.c scheint der Atemga128 in der 
folgenden Schleife hängen zu bleiben. Ich lasse mir einen Char auf dem 
Display anzeigen, wenn die Schleife durchlaufen wird.
1
while (!(TWCR & (1<<TWINT))) SEND_CHAR('B');

Das heißt für mich, dass auf das Setzen des TWINT-Flags gewartet wird. 
Bedeutet dies, dass die Daten nicht gesendet werden konnten?

Gruß Stefan

von Der (Gast)


Lesenswert?

Stefan O. schrieb:
> Muss ich die Masse
> vom Atmega8 zum Pin 1 von EXT1 des Atemga128 auch verbinden?

???

Die Massepins der AVRs musst du auf jeden Fall verbinden.

von Stefan O. (oele22)


Lesenswert?

Die Massen habe ich miteinander verbunden. Der Fehler ist aber leider 
immer noch vorhanden.

Woran könnte es sonst liegen, dass die Kommunikation nicht stattfindet? 
Die verwendeten Funktionen zur Anzeige auf dem Display funktionieren, 
daran kann es nicht liegen. Habt ihr Ideen, wo der Fehler stecken 
könnte?

von Karl H. (kbuchegg)


Lesenswert?

Stefan O. schrieb:

> Ich möchte einen Atmega128 mit einem Atmega8 mittels TWI kommunizieren
> lassen. Der Atmega128 soll hierbei als Master und der Atmega8 als Slave
> dienen. Ich programmiere mit AVR Studio 5.1 in C.

Sieh zu, dass du einen Blick in den Slave kriegst, was der eigentlich 
empfängt.

Hast du OSCSPEED richtig gesetzt?

> Adresse bekannt. Die Frequenz für die TWI-Kommunikation habe ich zu
> 100kHz gewählt.

Jawohl, das ist die richtige Einstellung. Auch wenn nichts geht, gleich 
mal so schnell wie möglich übertragen. Der Slave hat bei 1Mhz grade mal 
10 µC Takte pro TWI-Takt. Das muss ihm reichen, soll der doch sehen wie 
er zu Rande kommt.


Wenn gar nichts geht: Erst mal LANGSAM anfangen und zusehen, dass man 
als Programmierer irgendwie einen Blick auf das Geschehen erhaschen 
kann. Als Mensch bist du langsam, daher kann dir die Übertragung erst 
mal gar nicht langsam genug gehen. Das Tempo steigern kannst du immer 
noch.

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.