Forum: Mikrocontroller und Digitale Elektronik Error 2: Data send NACK received


von Dominik G. (moondryl)


Lesenswert?

Hallo,
ich versuche gerade einen AS1130 LED-Treiber zum Laufen zu bekommen. Ich 
habe mir meinen eigenen Arduino Clone auf eine Platine gebaut und dort 
auch gleich den AS1130 draufgesetzt. SDA und SCL gehen an SDA und SCL am 
Atmega328. Als Pull-Up-Widerstände verwende ich 4,7k Ohm Widerstände. 
RSTN und IRQ gehen an PC2 ud PC3 am Atmega.

Wenn ich nun im Programm

Wire.beginTransmission(AS1130ADDRESS);

  int ack = Wire.endTransmission();

  if (ack != 0) {
    Serial.print("ERROR: ");
    Serial.print(ack);
  }
  return ack;

aufrufe, dann bekomme ich immer den Error 2 (Data send NACK received). 
Allerdings konnte ich nichts genaues finden, was es jetzt genau bedeuten 
könnte geschweige denn, wie man den Fehler beheben kann.

Der Arduino an sich funktioniert (Blink-Sketch).

Könnt ihr mir vielleicht weiterhelfen, wonach ich suchen muss?

Grüße

von Diplomtroll (Gast)


Lesenswert?

Dominik Gebhardt schrieb:
> Data send NACK received
Das heisst "Slave antwortet nicht." Guck mal in die Spezifikationen vom 
I2C-Bus wie genau letzterer funktioniert, dann sollte es klar sein.

von Dominik G. (moondryl)


Lesenswert?

Aber das kann jetzt vieles bedeuten oder nicht?
Wenn ich es richtig verstanden habe, ist mein Atmega ja der Master und 
der AS1130 der Slave. Sagt der Atmega jetzt, dass er Daten Lesen bzw. 
Schreiben will, reagiert der Slave; in diesem Fall der AS1130. Als 
erstes würde ich denken, dass die Adresse falsch sein könnte. Das habe 
ich aber gerade überprüft und die stimmt. die letzten drei Bits (vor dem 
allerletztem Bit) der Adresse lege ich mit einem 4,7k Widerstand fest. 
Und das letzte Bit bei der Adresse sagt ja nur, ob der Atmega nun lesen 
oder schreiben will. Aber wenn es nicht an der Adresse liegt, woran kann 
es denn dann liegen, dass der Slave nicht antwortet?

von Dominik G. (moondryl)


Lesenswert?

Ha!
Ich habe den Fehler zwar gefunden, aber irgendetwas will da noch nicht 
in meinen Kopf. Es lag tatsächlich an der Adresse. Ich rufe den AS1130 
nun mit der Adresse 110111 auf (die erste Null kann wohl weggelassen 
werden; 110 ist vorgegeben und 111 ist durch den Widerstand festgelegt). 
Der Fehler lag nun darin, dass ich Anfangs 1101110 hatte. Die letzte 
Null steht doch aber fürs Lesen bzw. eine 1 für das Schreiben. Wenn ich 
aber jetzt nur 110111 habe, wie sage ich dem AS1130 denn nun ob ich 
Lesen oder schreiben möchte? (nutze die Wire-Library von der Arduino 
IDE). Ist das dann in der Library versteckt?

von Werner (Gast)


Lesenswert?

Da scheint die I2C-Konfusion mit 7-Bit Adresse und 8-Bit Adressbyte mal 
wieder zugeschlagen zu haben. Nur letzteres enthält das R/W-Bit.

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.