Rettung für meinen digitalem Poti MCP4651 wegen I2C-Problemen

OP #4007413
Lesenswert?

Hallo,

ich habe einen MCP4651 und den via I2C an einen Raspberry Pi 
geschlossen. Ich betreibe ihn mit 5V und einen Logik-Level-Shifter 
dazwischen (da der Raspberry nur 3,3V am GPIO liefert)

Anfangs hat alles super geklappt. Ich konnte mit i2cdetect den IC unter 
der Adresse sehen (0x28), mit der ich ihn gemäß der pins konfiguriert 
hatte.

Dann habe ich versucht den Status auszulesen. Dafür gibt es eine eigene 
Register-Adresse 0x05. Also bin ich mit

    i2cget -y 1 0x28 0x05 w

drauf losgegangen und habe auch 0x8100 zurückbekommen. Dieser Wert 
entspricht nicht dem, was im Datenblatt dazu steht. Deshalb habe ich 
versucht statt einem Word (siehe oben das w am Schluß) nur ein Byte (b) 
zu lesen. Das brachte nur 0x00, was auch nicht ganz passt.

Zum eigentlichen Problem: Leider "unabsichtlich" (ich hatte mich in der 
man-page verlesen) habe ich dann noch ein

    i2cget -y 1 0x28 0x05 c

abgesetzt, was - wie ich nachher rausbekommen habe - eine "schreibe ein 
Byte und lese ein Byte"-Kombination ist.

Danach - oder besser ich weiß nicht ob es dadurch oder schon nach dem 
0x8100 response war - spricht der IC gar nicht mehr und blockiert den 
ganzen I2C-Bus. Wenn ich i2cdetect aufrufe, bekomme ich eine Anzeige als 
hätte ich 127 Geräte am Bus hängen. Wenn ich den IC vom Bus nehme, dann 
ist die Anzeige normal, weshalb ich davon ausgehen, dass der IC nun 
etwas abbekommen hat.

Meine Frage nun: Hat irgendwer Erfahrung ob ich dieses Ding resetten 
kann oder mit i2cset (oder ähnlichem) die I2C-Kommunikation wieder 
herstellen kann? Natürlich habe ich das Ding schon vom Strom genommen 
und wieder angehängt, jedoch hat dies keine Auswirkung. Das alleine ist 
schon interessant, weil das Ding eigentlich keinen EEPROM hat, sondern 
nur RAM und das sollte doch bedeuten, dass ein Ab- und Anschaltung immer 
hilft!? Meine "graue" Theorie ist, dass ich durch das 
write/read-Kommando in die Status-Register-Adresse etwas hinein 
geschrieben habe, was ihn nun komplett durcheinander gebracht hat, aber 
warum sollte das dauerhaft sein?

Leider habe ich gerade nur den einen IC und einen weiteren zu besorgen 
würde Zeit brauchen (gibt es nicht im Laden, sondern nur auf 
Bestellung).

Hat wer eine Idee, wie ich das Ding wieder zum Laufen bringe?

Danke!
OP #4007939
Lesenswert?

> Das Ding kostet keinen Euro und ist innerhalb von einem Werktagen
> lieferbar. Was willst du da groß hinterherjammern.

Unter anderem, weil das Ding ein TSSOP Package ist und nicht eben 
einfach mal auf ein Steckbrett drauf geht. Ich hatte noch ein 
Breakoutboard von einem anderen IC den ich runtergelötet habe, aber das 
Board war selbst geätzt und die Platine verträgt es nicht nocheinmal 
etwas runter und wieder raufzugeben. Also bedeutet das neue 
Breakoutboards erstellen (ich mache so etwas mit dem 
Direkttonerverfahren). Alles in allem nicht wenig Aufwand.

Aber Leute: Bitte bei der Sache bleiben! Ich hatte diese Frage hier 
gestellt, um Input von Leuten zu bekommen, die mit I2C Erfahrung haben 
und nicht um die Sinnhaftigkeit meiner Frage zu diskutieren. 
Grundsätzlich geht es mir um das Verständnis und nicht darum eh 
offensichtliche Lösungen (jedoch ohne Lerngehalt) aufgezeigt zu 
bekommen.
OP #4008173
Lesenswert?

Peter Dannegger schrieb:
> Stephan P. schrieb:
>> Ich betreibe ihn mit 5V und einen Logik-Level-Shifter
>> dazwischen
>
> Welchen denn?
> Sind auch auf dessen beiden Seiten je 2 Pullups dran?

Es ist das Ding: http://electronics.semaf.at/Logic-Level-Converter

Der ist an sich unidirektional, aber der TX-Kanal ist eh bidirektional.

Aber grundsätzlich hat die Kommunikation schon funktioniert, weshalb ich 
die Funktion dessen nicht angezweifelt hätte. Aber ja, die zwei Pullups 
sind dran.
Gast #4008190
Lesenswert?

Peter Dannegger schrieb:
> Dann ist das i2cdetect Schrott. Es sollte wenigstens erkennen, ob SDA,
> SCL auch wirklich high ausgeben, wenn high gesendet wird.

Das scheint das Standard Linux Tool zu sein. Das kann natürlich nur das 
erkennen, was der Kerneltreiber und die darunterliegende Hardware 
unterstützt. Ein echter Zugriff auf die Hardware ist im Usermode nicht 
möglich.

MfG Klaus

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren