Forum: Mikrocontroller und Digitale Elektronik AnwesenheitskontrolleTWI


von Stephan R. (Firma: FHK) (nautosteer)


Lesenswert?

Tach!
Vorhaben: Atmega2560 soll flux sämtliche Adressen im TWI- Adressraum 
(0-127) abklappern und vergebene Adressen mittels Auswertung des 
jeweiligen Ack registrieren.
Dachte, das wird ne drei- Minuten-Angelegenheit.

Bin ich völlig falsch davor?

Schleife:

i2c_start(addr);
if (TWCR & (1<<TWINT))   //wenn Ack vom Slave erfolgt
xyz(addr);               //Aktion ausführen
i2c_stop();
addr++;

von Stephan R. (Firma: FHK) (nautosteer)


Lesenswert?

Mein allerallererster eigener Threat..... und keener schreibt :(

von was? (Gast)


Lesenswert?

Was erwartest du, 5-Minuten Express-Antwort? Sonst noch Probleme? Einmal 
Netiquette bitte.

von Tim (Gast)


Lesenswert?

> 17:20:
> [etwas Quellcode]

> 17:36:
> und keener schreibt :(

in < 16 Minuten kann man eigentlich nur sagen:

Dein Fehler ist in Zeile 42.

von Stephan R. (Firma: FHK) (nautosteer)


Lesenswert?

Ich hatte darauf gehofft, dass jemand, der sich mit TWI auskennt, nur 
einen Blick auf

if (TWCR & (1<<TWINT))
do...

schmeisst und sagt "alles scheisse"/"kleiner Fehler".

von Tim (Gast)


Lesenswert?

> schmeisst und sagt "alles scheisse"/"kleiner Fehler".

Ok, alles scheisse.

> //wenn Ack vom Slave erfolgt

Grosser Fehler.

Hohl dir das Datenblatt und guck mal ganz genau wie
das TWI zu behandeln ist.
Da sind auch wunderbare Ablaufdiagramme drin.
Da wirst du Sehen das ein Check von TWINT nicht reicht.
Aber vermutlich hast den benötigten Rest ja in xyz(addr)
implementiert, wobei wir wieder bei der Zeile 42 währen.

von Peter D. (peda)


Lesenswert?

Ob ein ACK erfolgte, ist an dem Wert der 5 Statusbits abzulesen.


Peter

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.