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
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.
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?
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.