Forum: Mikrocontroller und Digitale Elektronik PCF8591 - I2C Protokoll


von Peter N. (customer23)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich bin gerade dabei, einen PCF8591 an ein Raspberry Pi anzuschließen.
Bis jetzt bin ich leider gescheitert...
Ich habe das Datenblatt schon mehrmals studiert, doch leider ohne 
Erfolg.

Das ganze programmiere ich in Python.
Da ich als I2C-Modul das von Adafruit verwende, da ich andere Module 
damit anspreche, kann ich auch nicht das fertige Modul von quick2wire 
verwenden.

Konkret will ich:
  Adresse: 0x4d
  Single Ended Mode
  Auto-Increment
  Output disabled
und anschließend die Werte als Dezimalzahlen einlesen.

Ich würde mich über eine genaue Erklärung bzw. über eine Lösung wirklich 
freuen!

von Spess53 (Gast)


Lesenswert?

Hi

>  Adresse: 0x4d

Wo kommt die her?

MfG Spess

von Wilhelm S. (wilhelmdk4tj)


Lesenswert?

Hallo Peter,

die Frage von Spess kann ich nur wiederholen!
Woher hast du diese Zahl?
Ich habe es nicht so mit HEX-Zahlen; mit Binär kann ich
besser leben.

Hex 0x4d = 77 dez.

Was bei I2C immer wieder gerne vergessen wird, die 7-Bit Adresse
mit 2 zu multiplizieren, um die Adresse des Bausteins zu erreichen;
Bit 0 sagt eben nur 'Lesen' oder 'Schreiben'.
Ein 'ACK' müsstest du schon sofort erhalten bevor der ganze
Palaver losgeht!
Falls nicht -> Stress....

Deine Dez. 77 passen in kein Raster für einen PCF8591!
Es gibt ja welche mit unterschiedlichen Adresssen.
Deine ist sehr krumm.  Da solltest du nochmal nachsehen.

73
Wilhelm


PS:
So Etwas habe ich vor mehr als 20 Jahren unter Turbo-Pascal3
an der parallelen Schnittstelle auf die Beine gebracht.
Die Programmierung von I2C-ICs.. -> Kinderkram...
Selbst bei AVR-Controllern unter BASCOM - mit frei zu
definirieden Pins -  kein Problem.

von Peter N. (customer23)


Lesenswert?

Hallo!

Die Adresse kommt so zustande, dass ich einfach mit einem Codierschalter 
die Pins für die Adress-Einstellung gegen +3.3V oder GND schalte.
Somit ist die Adresse eigentlich willkürlich gewählt und ich kann sie 
auch ändern.
Da ich zwei PCF8591 habe, habe ich nur drauf geachtet, dass sie 
unterschiedliche Adressen haben.
Aber was 0x4d betrifft:
Fixe Adresse   A2 A1 A0
     1 0 0 1    1  0  1

von Spess53 (Gast)


Lesenswert?

Hi

Und du bist sicher, das deine Software diese Adresse auch automatisch um 
ein Bit nach links shiftet?

MfG Spess

von Peter N. (customer23)


Angehängte Dateien:

Lesenswert?

Sollte kein Problem sein, da es bei meinem LCD-Display ja auch klappt.

Ich hab mal die Python-Klasse, die ich verwende, in den Anhang gegeben.

von Chris B. (dekatz)


Lesenswert?

Dann probier doch einfach mal die beiden korrekten Adressen aus:
1001 1010 = 0x9A WRITE
1001 1011 = 0x9B READ

von Peter N. (customer23)


Lesenswert?

Es funktioniert!

Hab in der I2C-Klasse was übersehen. Deshalb hab ich auch immer die 
falsche Bitfolge geschickt.
Trotzdem danke für eure Hilfe!

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.