Forum: Mikrocontroller und Digitale Elektronik I2C Adressierung des PCF8582C-2


von Fabio (Gast)


Lesenswert?

Hii Leute

Ich will mit dem Arduino UNO ein EEPROM beschreiben und anschliessend 
auslesen..
Nur bereitet mir die Adressierung des PCF8582C-2 probleme..

Wie auf der Arduino Website beschriben ist das schreiben/ lesen bit 
ausser acht zu lassen und die andern bits nach rechts zu schieben..

Nun bin ich jetzt ein bischen verwirrt.! Da im Datenblatt des PCF8582C-2
steht dass (The Most Significant Bit (MSB) ‘b7’ is sent first.)
nun aber wen ja das 7bit zuerst gesendet wird kann ja die adresse nicht
mit 0 beginen sondern mit 1.

Oder habe ich da was völlig falsch verstanden..?

Ich habe alle hardware pins auf GND gesetzt..

Also hat die adresse ohne das lese bit und wie auf der arduino website 
beschriben.
Eine adresse von B01010000 also wäre das 0x50..

Nun leider mit dieser addresse bekome ich nachfolgenden fehler..
Habt ihr eine ahnung wie diese adresse aussehen könnte.!?

Nur aber bei Serial.print(endTransmission); gibts mir immer 2 raus..
Also "2" das heisst received NACK (not acknowledge) on transmit of 
address..

Meine frage nun.. Kann man mit der Wire library dies trotzdem machen..??
Also weil ja das 7 bit zuerstgesendet wird.. Oder muss man die address
auf eine andere art herleiten für dieses EEPROM..
Oder geht das garnicht mit diesem EEPROM.!?

Kleine anmerkung... ^^
Ich habe noch nicht so viel erfahrung mit Programmieren.
Erst vor einpaar monaten damit angefangen..
Bin aber gewillt mehr zu erfahren und dazulernen..

Danke euch schonmal für eure mithilfe.. ;)

MfG

Fabio

von holger (Gast)


Lesenswert?

>Eine adresse von B01010000 also wäre das 0x50..

Na, wenn es damit kein Ack gibt dann versuchs mit 0xA0.

von Fabio (Gast)


Lesenswert?

holger schrieb

>>Eine adresse von B01010000 also wäre das 0x50..
>
> Na, wenn es damit kein Ack gibt dann versuchs mit 0xA0.

Ok, werde ich gleich machen..

Kann nicht ganz nachvollziehen wie du drauf gekommen bist..
Also ich bin ja auch schon auf 10||0 also B1010000 gekommen
und mit 0x100 probiert wie auch mit B.. ging nicht..

Aber jetzt hat es ahha gemacht.. A = 10 in HEX.. :)

Danke

MfG

Fabio

von Fabio (Gast)


Lesenswert?

Also habe es ausprobiert und es ging nicht.. Wie erwartet..
Hatte nämlich schon mit B10100000 probiert und es ging nicht..

Wie würdet ihr so eine adresse deklarieren..
Ich habe es mit #define / byte deklariert ..

Die Word addresse wird bei jedem durchgang inkrementiert..
Und vom EEPROM beim erreichen von 255 auf null gestellt..

Könnte es sein das die slave adresse soweit stimmt aber
ein fehler in der word adresse den gleichen fehlermeldung hervorrufen 
würde..

Hier mal ein kleiner code..

#include <Wire.h>
#define address 0xA0

byte word_address=0x00;

void setup() {
Wire.begin();
Serial.begin();
}
void loop() {
Wire.beginTransmission(address);
Wire.write(word_address);
Wire.write('H');
Wire.endTransmission();
Serial.println(Wire.endTransmission());
delay(1000);

word_address++;
}

Erkennt vielleicht jemand einen fehler oder kann man mir welche tipps 
geben..

MfG

Fabio

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.