Forum: Mikrocontroller und Digitale Elektronik ATmega8 Ausgabe TWI Stopbedingung abfragen? Assmbler!


von Patt :. (patt)


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

von Sascha W. (sascha-w)


Lesenswert?

Patt :-) schrieb:
> Gibt es hier ne bessere Lösung?
nicht wirklich - ich warte einfach immer 10µs nach dem setzten der 
Stopbedingung. Die Slaves wollen ja meist noch eine kleine Pause 
zwischen der Stopbedingung und der nächsten Startbedingung.

Sascha

von spess53 (Gast)


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

von Patt :. (patt)


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

von Patt :. (patt)


Lesenswert?

spess53 schrieb:
> When the STOP condition is executed on the bus, the TWSTO
> bit is cleared automatically.

das hab ich schon auch gefunden, leider erst nachdem ich massive 
Probleme
mit dem IIC-Bus hatte und genauer nachgelesen habe.
Das man das nicht im Bsp-Program mit einbaut.
Naja.

Danke!!

mfG patt

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.