Forum: Mikrocontroller und Digitale Elektronik Verzweiflung mit dem TWI & ATmega88


von Ben B. (gericom89)


Angehängte Dateien:

Lesenswert?

Hallo,
ich versuche nun schon seit Tagen die TWI auf meinem Atmega88 zum
laufen zu bekommen, eigentlich ist das ja auch nicht so schwer aber
irgendwo ist der Wurm bei mir drin.

Das aktuelle Problem ist das nicht einmal ein Start Signal richtig 
gesendet wird, zumindest steht im Status Register des µC nicht TW_START.
Somit geht in meinem Fall immer die Fehler LED an.

Habe auch schon diverse andere TWI Projekte angeschaut wie Fleur...
Kann dort aber keinen Unterschied vom "TWI Start" zu meinem Code 
feststellen.

Zur Hardware:
Sensor ist direkt an den 2 TWI Leitungen angeschlossen und mit 4K7Ohm 
gegen 5V gelegt.

LED & Taster funktionieren einwandfrei, festgestellt durch diverse 
andere Projekte.

Software: Ich nutze das AVR Studio 4.19.

Wäre super wenn da einer mal kurz auf meinen Code schauen könnte.

Gruß,
Bue

von Timmo H. (masterfx)


Lesenswert?

Das einzige was ich so auf anhieb sehe ist, dass du nach dem Stop nicht 
darauf wartest bis die Stop-condition gesendet wurde "while(TWCR & 
(1<<TWSTO));"

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Hast du denn externe Pull up Widerstände in die beiden Leitungen 
eingelötet?

Dennis

von kk (Gast)


Lesenswert?

hatte vor kurzem auch das Problem. Mein Code sieht fast identisch aus.
Ich hab damals nur meinen Slave resetten müssen, weil er das Signal 
"nicht aufnehmen konnte".
Emüfängt dein Slave das Signal im Interruptbetrieb?

von TW (Gast)


Lesenswert?

Hallo,

1. Wie ist die Slave Adresse? beachte, dass die Adresse in den 7 
höchsten Bit sitzt, und das Lese/Schreib bit das Bit 0 ist

2. Mit welchem Takt arbeitet der µC...rechne noch mal das TWBR nach...

von Ben B. (gericom89)


Angehängte Dateien:

Lesenswert?

Hy,
also Pull Up Widerstände habe ich an beiden Leitungen angelötet.

Hab noch den "Schaltplan" angehängt, vll. hilft der weiter.

Das mit der Stop Condition füge ich noch hinzu und teste es.

Aber daran kanns es ja eigentlich nicht liegen das er gleich nach dem 
Start die LED anmachtt, sprich einen Fehler hat.

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Hast du denn irgend ein Oszi?

Das du dir einfach mal anschauen kannst, was überhaupt auf dem Bus 
passiert.

Dennis

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Mir fällt nochwas ein. Du weist nicht, in welchem Schritt die rote LED 
angeschalten wird. Nimm das auf die rote LED schalten mal überall bis 
auf einmal raus. Sozusagen durchprobieren, wann die LED wirklich angeht, 
um rauszufinden, in welchem Schritt der Fehler liegt.

Dennis

von Ben B. (gericom89)


Lesenswert?

Also ich habe jetzt die Stop Condition hinzugefügt und aus 
unerfindlichen Gründen macht er den Start Befehl nun...

Durch auskommentieren habe habe ich nun rausgefunden das er nun
an der Register Adresse senden die LED anmacht.

Die ganzen Adressen habe ich schon mehrmals kontroliert die passen.

von Dennis H. (t1w2i3s4t5e6r)


Lesenswert?

Aber offensichtlich bestätigt dein Sensor die Adresse nicht..


Dennis

von kk (Gast)


Lesenswert?

schick bitte mal den Slave Code .c

von Ben B. (gericom89)


Lesenswert?

Hallo,
ich habe meine "Fehler" gefunden.

1. Hab ich teilweise die TWINT Flag überprüfung per while vergessen.
2. Hatte der Chip einen Wackelkontakt wegen einer schlechten Lötstelle.

Ja, nun funktioniert alles wie gedacht mit dem TWI.

Vielen Dank an alle :)

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.