mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega32: TWI mit C


Autor: Markus Dörschmidt (cipher1978)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe ... (uwegw)
Datum:

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

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus Dörschmidt (cipher1978)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.