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
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));"
Hast du denn externe Pull up Widerstände in die beiden Leitungen eingelötet? Dennis
Gast
#3204202
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?
Gast
#3204204
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...
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.
Hast du denn irgend ein Oszi? Das du dir einfach mal anschauen kannst, was überhaupt auf dem Bus passiert. Dennis
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
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.
Aber offensichtlich bestätigt dein Sensor die Adresse nicht.. Dennis
Gast
#3204237
schick bitte mal den Slave Code .c
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 :)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
