ATmega8 Ausgabe TWI Stopbedingung abfragen? Assmbler!

OP #1785600
Lesenswert?

Hallo,


ich habe ein kleines Verständnis-Problem mit der Ausgabe der 
Stopbedingung
der TWI-Schnittstelle.
Ich betreibe den ATmega8 als Master.( 10Khz TWI )
Wie fragt ihr ab ob die Stopbedingung schon komplett ausgegeben ist?
Ich hatte die letzten Tage das Problem, dass wenn ich zu schnell wieder
auf den TWI zugegriffen habe, die Stopbedingung nicht fertig ausgegeben 
worden ist sondern mit der nächsten Startbedinung überschrieben worden 
ist.
--> Auf dem IIC-Bus wurde keine Stopbedinung gesendet.
Bis jetzt hatte ich anscheinend immer Glück, dass die Zeit zwischen 
senden einer Stop-Start-bedingung groß genug war, dass keine Fehler 
passiert sind.
( Liegt vielleicht auch daran, dass ich eigentlich fast immer mit 100Khz 
bzw wenn es geht mit 400Khz fahre)
Atmel macht die Abfrage in ihrem Bsp leider auch nicht. Datenblatt Seite 
177
Mein Program
Start  sende Adresse  sende Datum  sende Datum  Stop
Es kann passieren dass nach dieser Routine gleich wieder
auf den TWI gesendet wird und dann die Stopbedingung der ersten Routine 
nicht fertig gesendet wird.
Meine Abhilfe: eine kleine Schleife nach dem senden der Stopbedinung die 
erst im Program weitermacht wenn das TWSTO-Bit im TWCR-Register 0 ist.
Gibt es hier ne bessere Lösung?

mfG patt
Gast #1785620
Lesenswert?

Hi

Datenblatt:

TWCR

Bit 4 – TWSTO: TWI STOP Condition Bit
Writing the TWSTO bit to one in Master mode will generate a STOP 
condition on the Two-wire
Serial Bus. When the STOP condition is executed on the bus, the TWSTO 
bit is cleared automatically.

MfG Spess
OP #1785624
Lesenswert?

Das ging ja schnell mit der Antwort :-)
Das mit dem warten hab ich am Anfang auch gemacht. ( hat mir aber
überhaupt nicht gefallen :-( )
Wenn man jetzt mal irgendwas baut was am TWI sehr langsam sein muss,
muss man jedesmal aufpassen dass man lange genug wartet.
Deswegen hab ich ja auch die Abfrage eingebaut ob das StopBit wieder
0 ist und dann erst weiter im Program.

Danke!!!

mfG patt

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren