Forum: Mikrocontroller und Digitale Elektronik ATmega32: TWI mit C


von Markus D. (cipher1978)


Lesenswert?

Ich habe mir einen Ultraschall-Entfernungsmesser (SRF02) bei 
robotikhardware.de gekauft. Diesen möchte ich über den I2C-Bus 
ansprechen. Dazu muss ich den µC im Master Receiver Modus betreiben. 
Laut I2C-Spezifikation muss ich den Empfang jedes Datenbytes mit einem 
ACK quittieren. Nur das letzte Datenbyte wird mit einem NACK quittiert.

Beim SRF02 war ein kleines Beispielprogramm dabei, das die Kommunikation 
mit BASCOM zeigt. Beim Lesen eines Datenbytes kann ich hier angegben ob 
ACK oder NACK gesendet werden soll. Wie kann ich das mit Assembler oder 
C festlegen? Ich habe im Handbuch leider nur gefunden, dass die 
Quittierung von der TWI-Hardware automatisch beim Auslesen des 
Datenregisters vorgenommen wird. Wo oder wie sage ich der Hardware, dass 
ein NACK statt einem ACK gesendet werden soll?

Danke schon mal für die Antworten,

Markus

von Uwe .. (uwegw)


Lesenswert?

Hier gibts ne lib für den TWI-Zugriff:
http://homepage.hispeed.ch/peterfleury/avr-software.html

von Marvin M. (Gast)


Lesenswert?

Schonmal ins Datenblatt des Mega-32 reingeschaut? Offenbar nicht, dort 
gibts Beispiele für TWI in C.
Im Kapitel über den TWI ist alles erklärt, was man braucht - auch nAck 
und Ack.

von Markus (Gast)


Lesenswert?

Die Beispiele betreffen leider nur das Senden von Daten, nicht den 
Empfang.

Im Datenblatt steht auch, dass die Quittierung beim Lesen über das 
TWCR-Register kontrolliert wird. Das einzige Bit, das von Namen her Sinn 
machen würde ist TWAE. Hier steht jedoch, dass bei gesetztem Bit ein ACK 
gesendet wird. Gleichzeitig steht dort ein paar Zeilen drunter, dass ein 
gelöschtes Bit (logisch 0) das Gerät vom Bus nimmt. Das ist eigentlich 
nicht das, was ich brauche.

von Markus D. (cipher1978)


Lesenswert?

(verdammt, wieder mit Gast-Login gepostet...)

Danke für den Link Marvin. Hätt ja auch gleich draufkommen können, dass 
schon ein Lib existiert :(

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.