Forum: Mikrocontroller und Digitale Elektronik Digitalpoti stört I2C-Bus


von Peter K. (peter_kg)


Lesenswert?

Hallo Forum,

ich habe an meinem Raspberry Pi (Modell B Rev 2) ein LCD-Display per 
Pegelwandler am I2C-Bus und möchte nun den Digitalpoti MCP4551 
(I2C-fähig) ebenfalls daran anschließen. Sobald ich den Poti parallel an 
SCL und SDA anschließe, ist das Display nicht mehr ansprechbar und 
i2cdetect braucht extrem lange (gefühlt 30 Sekunden), um seine 
Adressliste auszugeben. Die ist daraufhin leer, weil nichts gefunden 
wird.
Sobald ich den Poti wieder entferne, läuft alles wieder normal. Das LCD 
kann ganz normal angesprochen werden und i2cdetect spuckt in einer 
halben Sekunde seine Liste (mit gefundener LCD-Adresse) aus.

Meine Vermutung war zunächst, dass ich den Mikrochip falschrum 
angeschlossen hätte. Das glaube ich nun nicht mehr, weil ein kleiner 
Kreis Pin1 kennzeichnet, wie Google mir verrit 
(http://www.raviyp.com/embedded/150-identifying-pin-no-1-on-an-ic), und 
der Anschluss dann doch stimmen müsste.
Auf Github (https://github.com/raspberrypi/linux/issues/1467) steht, 
dass eventuell zusätzliche Pullup-Wiederstände nötig wären, ohne zu 
verraten, welche. Intern hat der Raspberry wohl 1,8K-Widerstände am I2C, 
die fest verlötet sind. Wenn ich also welche anfügen würde, wären sie ja 
parallel geschaltet und hätten kaum Effekt.

Hat jemand eine Idee, wie ich den Chip an's Laufen kriege? Ich tappe 
ziemlich im Dunkeln und weiß nichtmal, ob ich bei der Fehlersuche auf 
dem richtigen Pfad bin.

: Bearbeitet durch User
von Christian S. (roehrenvorheizer)


Lesenswert?

Hallo,

vielleicht wird die Kapazität durch den zusätzlichen Busteilnehmer zu 
groß. Hast Du schon mal mit dem Oszilloskop die Signalform angeschaut? 
Welche Taktgeschwindigkeit ist eingestellt.

Durch Parallelschaltung eines Widerstandes könnte man Rückschlüsse 
ziehen auf den bereits wirksamen Pullup-Widerstand.

Mit freundlichem Gruß

: Bearbeitet durch User
von STK500-Besitzer (Gast)


Lesenswert?

Haben die beiden Geräte vielleicht die gleiche Adresse?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Guck doch mal ob LCD und DigPoti dieselbe I2C Adresse haben.

von TK (Gast)


Lesenswert?

Hallo,

das hört sich nach falsch verdrahtetem Poti-IC an. Für eine weitere 
Analyse des Problems ist der Schaltplan notwendig. Alles andere ist 
reine Spekulation.

Gruß
TK

von Felix Adam (Gast)


Lesenswert?

Hast du den Mcp vor oder hinter dem Pegelwandler angeschlossen? Und mit 
welcher Spannung werden beide Bauteile betrieben?

Vielleicht wird der Buspegel über die internen Schutzdioden des Mcp 
beeinflusst?

von Peter K. (peter_kg)


Lesenswert?

Neinein, ich bin absoluter Anfänger. So was tolles wie ein Oszilloskop 
wäre für mich viel zu teuer. Ich hatte mich gerade deshalb für 
I2C-Bausteine entschieden, weil der Standard sehr anfängerfreundlich zu 
sein scheint. Beim Display hatte ich sofort Erfolg. Mit zwei Bausteinen 
gibt's nun Probleme. Hab auch mal den Poti alleine angeschlossen - 
gleiches Bild: i2cdetect braucht extrem lange und findet nichts. Es muss 
also irgendwie mit dem Chip und/oder meiner Verkabelung mit diesem zu 
tun haben.

Edit:

Ich sehe gerade, meine Antwort hat sich mit anderen gekreuzt:

Spannung ist 3,3V.

Verkabelung ist extrem simpel: Die beiden Leitungen SCL und SDA vom Poti 
sind an den beiden Pins SCL und SDA des Raspberrys eingestöpselt. 
Gleiches beim LCD-Display. Ein Breadboard macht die multiple Verwendung 
der Raspberry-Pins möglich. Deshalb kann ich also mehrere Sachen am 
selben Pin anschließen.
Natürlich werden LCD und Poti zusätzlich mit Strom versorgt, wie in den 
Datanblättern gefordert. LCD braucht 5V, der Poti kriegt 3,3V (laut 
Datenblatt ist alles zwischen 1.8V und 5.5V okay).

: Bearbeitet durch User
von g457 (Gast)


Lesenswert?

> Es muss also irgendwie mit [..] meiner Verkabelung mit diesem zu
> tun haben.

Wie ist selbige denn? Gnd und Vcc ordentlich verbunden?

von Harald A. (embedded)


Lesenswert?

Ohne Messmittel ist das alles etwas schwierig. Vielleicht gibt es 
irgendjemand in der Umgebung, der zumindest mal per Oszilloskop auf die 
Signale schauen kann? Und dann gibt es da noch das geniale Werkzeug 
Logic Analyzer, welches Du dir für unter 10€(!) zulegen kannst. Gerade 
bei I2C Entwicklungen eine absolut geniale Sache. Du benötigst z.B. 
einen "Saleae Clone" und die freie Software Sigrok.
Logic Analyzer hört sich vielleicht kompliziert an, ist aber sehr 
einfach in der Anwendung. Der nimmt auf bis zu 8 Leitungen hochfrequent 
die Signale auf (aber nur den Logic Pegel, nicht das analoge Signal), 
diese werden dann nach der Aufnahme von der PC Software interpretiert 
und z.B. als I2C Signale dargestellt. So kannst Du genau verfolgen, was 
gerade passiert.

von Peter K. (peter_kg)


Angehängte Dateien:

Lesenswert?

???

VSS liegt an Masse. VDD ist mit 3,3V verbunden. P0B ist ebenfalls mit 
3,3V verbunden. P0W soll dann die abgegriffene Spannung rausführen.

Ich hab mal schnell ein Bild gemalt.

von STK500-Besitzer (Gast)


Lesenswert?

Welches Display?
Hast du die Fragen nach den Adressen gelesen (und kannst damit was 
anfangen)?

von Felix Adam (Gast)


Lesenswert?

Mir würde dann noch einfallen, dass die Taktgeschwindigkeit deines 
Busses zu hoch sein könnte. Kannst du die reduzieren auf 400kHz oder 
weniger zum Testen?

von HildeK (Gast)


Lesenswert?

Peter K. schrieb:
> LCD braucht 5V, der Poti kriegt 3,3V (laut
> Datenblatt ist alles zwischen 1.8V und 5.5V okay).

Könnte auch das Problem sein: I2C an 5V- und 3.3V-Bausteinen 
gleichzeitig.
Wenn das Digitalpoti schon mit 5V betrieben werden kann, dann mach das 
doch mal - vorausgesetzt der Prozessor wird auch mit 5V betrieben.

von Peter K. (peter_kg)


Lesenswert?

Ich hab mir erstmal ein paar Bookmarks zu "Saleae Logic Analyzer" und 
"Sigrok" angelegt. Das sieht ja sehr interessant aus.

Ja, das mit den Adressen habe ich gelesen, ich weiß auch was gemeint 
ist. Jedoch schrieb ich ja schon, dass das Problem auch auftritt, wenn 
nur der Poti angeschlossen ist und ich das Display abklemme. Ich weiß 
gerade nicht, welche Adresse der Poti hat (man kann wohl zwischen zwei 
wählen...Moment mal...vielleicht sollte ich A0 mal mit GND verbinden, um 
den runterzuziehen.

Ich verstehe das hier nicht im Datenblatt: A0 ist für zwei Sachen 
zuständig: High Voltage Command und Address0. Die Pins A2 und A1 gibt es 
bei dieser Single-Poti-Version nicht und würde das vorvorletzte und 
vorletzte Bit der Adresse definieren. A0 definiert das letzte Bit der 
Adresse...und eben auch diesen High Voltage Command.

Dass mit der Geschwindigkeit ist mir hier im Datenblatt auch irgendwo 
begegnet. Ahja, hier: Standard-Mode sind 100 KHz, Fast 400 Khz, 
High-Speed 1.7 1,7 Mhz und High-Speed 3.4 3,4 Mhz. Ich weiß jetzt nicht, 
was der Raspberry benutzt. Ich bin einfach vom Standard-Mode 
ausgegangen.

Achja, hier steht noch, dass A0 intern per Widerstand mit VDD verbunden 
sei. Vielleicht sollte ich den dann doch nicht runterziehen? Eigentlich 
steht hier auch nichts davon.

Edit:

Nein 3,3V und 5V können am Raspberry nicht gemischt werden. Der stirbt 
dann. Deswegen ja der Pegelwandler vor dem I2C-Display. Mein Problem 
bleibt aber bestehen, wenn ich das Display abklemme.

: Bearbeitet durch User
von Peter K. (peter_kg)


Lesenswert?

Versteht das jemand? Stammt aus dem Datenblatt (Seite 43):

"Address  0  is  multiplexed  with  the  High  Voltage
Command (HVC) function. So the state of A0 is latched
on the MCP4XXX’s POR/BOR event.
The state of the A2 and A1 pins should be static, that is
they should be tied high or tied low.

6.1.3.1 The High Voltage Command (HVC) Signal

The  High  Voltage  Command  (HVC)  signal  is  multi-
plexed with Address 0 (A0) and is used to indicate that
the command, or sequence of commands, are in the
High Voltage mode. High Voltage commands are sup-
ported for compatibility with the nonvolatile devices.
The HVC pin has an internal resistor connection to the
MCP45XX/46XXs internal VDD signal."

Auf Seite 46 ist dann eine Tabelle. Da steht, dass die Adresse für 
meinen Poti " ‘0101 11’b + A0 " lautet. B heißt wahrscheinlich Bit oder 
Byte.

Dann steht da noch:
"The state of the A0 address pin is latch on POR/BOR.
This  is  required  since  High-Voltage  commands  force
this pin (HVC/A0) to the VIHH level."

Ich glaube, ich zieh den Pin einfach mal runter (oder hoch?). Kann da 
was passieren?

von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Ich verstehe das hier nicht im Datenblatt: A0 ist für zwei Sachen
> zuständig: High Voltage Command und Address0.

Deshalb ist das auch kein gewöhnlichter Digitaleingang, sondern kann 
zwischen 3 Pegelbereichen (VIL, VIH or VIHH) unterscheiden.

Peter K. schrieb:
> Achja, hier steht noch, dass A0 intern per Widerstand mit VDD verbunden
> sei. Vielleicht sollte ich den dann doch nicht runterziehen?

Das ist ein Pull-Up, der dafür sorgt, dass der A0-Pin im unbeschalteten 
Zustand einen wohl definierten und erlaubten Pegel liefert.

Warum solltest du den nicht runterziehen, um dem Poti eine andere 
Adresse zu geben?
Der Pin muss allerdings schon beim Einschalten auf dem von dir 
gewünschten Pegel liegen, wie du dem Datenblatt Kap. 3.1 entnehmen 
kannst, sonst ist die Pegeländerung wirkungslos.

von px (Gast)


Lesenswert?

Ich würde das Diisplay jetzt mal außen vor lassen und mich aufs Poti 
konzentrieren.

"Check your current I2C speed by issuing the command in the terminal:

 sudo cat /sys/module/i2c_bcm2708/parameters/baudrate
"

von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Ich glaube, ich zieh den Pin einfach mal runter (oder hoch?). Kann da
> was passieren?

Wieso hoch? Wohin?

Der liegt doch über den Pull-up Widerstand schon auf VIH. Und auf VIHH 
willst du ihn für deine Fragestellung nicht wirklich ziehen, oder?

Lass den Pin mal in der Luft hängen und dann miss mit deinem Multimeter 
die Spannung - eh voilá ...

von Peter K. (peter_kg)


Lesenswert?

Vielen Dank. Das mit dem "latched" (verriegelt) hatte ich nicht 
verstanden. Dann probier ich das mit dem Runterziehen gleich mal.

Zur Frage:
Wenn der ja schon hochgezogen ist, dürfte die Adresse nicht Ursache 
meines Problems sein, weil der Chip beim Hochfahren ja dann eine gültige 
Adresse hat.

Ich verbinde A0 jetzt trotzdem mal mit GND.

Edit:

Ist ja Wahnsinn wieviele Antworten Samstags morgens um 11 zu kriegen 
sind. Schon wieder kam meine Antwort zu spät.
1
# sudo cat /sys/module/i2c_bcm2708/parameters/baudrate
2
0

Welche Spannung soll ich genau messen?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Welche Spannung soll ich genau messen?

Zwischen A0-Pin und Gnd? (1-4).

von Peter K. (peter_kg)


Lesenswert?

ah, ok. Muss mal kurz weg. Bin in'ner Stunde wieder da und poste Dann.

von Peter K. (peter_kg)


Lesenswert?

Zwischen A0 und Ground sind 3,3V. Hab die beiden jetzt verbunden und da 
passierten interessante Dinge:
i2cdetect konnte den Chip zum ersten mal finden. Er hatte die Adresse 
2e.

Unmittelbar danach habe ich i2cdetect erneut ausgeführt. Seitdem zeigt 
es bei jedem Aufruf eine Liste in der angeblich alle Adressen gefunden 
wurden. Die Liste enthält nun also gar keine unbelegten Adressen mehr, 
was natürlich nicht sein kann. Habe die i2ctreiber deaktiviert und 
wieder geladen: Kein Unterschied, es werden immernoch alle Adressen auf 
einmal ausgegeben, statt nur die beiden von Display und Poti.

von Christian M. (Gast)


Lesenswert?

Ein Multimeter hast Du...? Miss doch mal SDA und SCL im Ruhezustand, 
ist das High? Sonst wäre der Bus blokiert...

Gruss Chregu

von Peter K. (peter_kg)


Lesenswert?

Bin mir jetzt mit der Anweisung nicht ganz sicher. Was heißt 
Ruhezustand? Ich hab jetzt alles aus SDA und SCL ausgestöpselt und beide 
jeweils gegen GND gemessen. Bei beiden liegen je 3,2V Spannung an. Wenn 
der Chip angeschlossen ist liegen zwischen SDA und GND 0,09V. Zwischen 
SCL und GND messe ich dann 3,22V.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Wenn der Chip angeschlossen ist liegen zwischen SDA und GND 0,09V.

Damit blockiert er den Bus.

von Peter K. (peter_kg)


Lesenswert?

Hilft mir die Erkenntnis irgendwie? Hab ich beim Löten was 
kaputtgemacht? Evtl. bezüglich elektrostatischer Entladung nicht genug 
aufgepasst? Oder kurz: Ist der Chip im Eimer?

: Bearbeitet durch User
von Felix Adam (Gast)


Lesenswert?

Es könnte auch sein, dass die Taktfrequenz gerade so zu hoch ist und der 
Chip den einen oder anderen takt nicht bekommt und er so den Bus nicht 
wieder frei gibt.

Grund kann die Größe der Pullups sein, da jeder am Bus angeschlossene 
Chippin eine Kapazität aufweist, die in Kombination mit dem Widerstand 
einen Tiefpass bilden. Kleinere Pullups würden hier womöglich genauso 
helfen wie eine Verringerung der Taktfrequenz.

von Peter K. (peter_kg)


Lesenswert?

Tja, zur Frequenz kann ich leider nichts sagen. Der Raspberry-Befehl, 
der die Frequenz anzeigen soll, zeigt einfach nur eine Null.

von Christian M. (Gast)


Lesenswert?

Schalte nur mal ein und mache noch nichts am I2C-Bus ausser 
initialisieren. Wenn SDA dann immer noch 0 ist, ist wirklich was nicht 
in Ordnung!

Gruss Chregu

von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Hab ich beim Löten was kaputtgemacht?

Zeig mal ein Photo von deinem Aufbau, speziell Lötstellen/Anschlüsse am 
MCP4551 und Busverdrahtung.

von Peter K. (peter_kg)


Angehängte Dateien:

Lesenswert?

Die hintere Schiene des Breadboard führt 5V, die vordere 3,3V. Die 
hintere wird für das Display gebraucht, das ich aber vorübergehend 
ausgestöpselt habe. Die beiden I2C-Kabel halte ich auf dem Foto gerade 
in der Hand.

Ich habe das Raspberry-Pinout nocheinmal perspektivisch beigefügt, damit 
man die Pins identifizieren kann. Der Chip ist extrem klein (4x4 mm²) 
und war dementsprechend schwer zu löten. Eine sehr starke Vergrößerung 
ist in der Ecke oben rechts. Der Chip hängt an den Kabeln, die unten 
rechts aus dem Bild ragen.

Das zusätzliche weiße Kabel (erster Pin von rechts im Bild) gehört zu 
einem Piezzo-Kristall (und hat mit dem Problem vermutlich nichts zu 
tun).

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Eine sehr starke Vergrößerung ist in der Ecke oben rechts.

Das Gehäuse sieht bei Pin 1 und 2 ein bisschen eigenwillig aus, muss 
aber nix heißen.

Miss doch mal die Spannungen auf Pin 2 und 3 gegen Gnd, wenn du den 
MCP4551 vom Bus nimmst und seine SCL und SDA Leitung per separatem 
Pull-up (4k7 o.ä.) auf 3V3 ziehst.

von Jim M. (turboj)


Lesenswert?

Oben links zeigt das Chipfoto deutliche Hitzeschäden. Da hat der OP 
vermutlich zu lange mit dem Brateisen dran gesessen, der Chip ist wohl 
hinüber.

Dead Bug macht man mit dünnem Fadeldraht auf Lochraster, damit weniger 
Wärme in den Chip beim Löten eingetragen wird.

Der OP könnte mal einen Diodentest mit dem Multimeter von den SDA/SCL 
Pins nach GND machen. Da ist laut DB eine Diode drin.

Vorsicht: Nach VCC ist wohl keine Diode drin. Da könnten die I²C Pins 
u.U. auch ESD zum Opfer fallen.

von Peter K. (peter_kg)


Lesenswert?

Werd' die Messungen gleich mal machen. Mit den Hitzeschäden bin ich mir 
nicht sicher: Da klebt nämlich auch reichlich Flussmittel in der Ecke. 
Kann das selbst unter der Lupe kaum erkennen.

von Peter K. (peter_kg)


Lesenswert?

*
SDA und SCL sind vom Bus getrennt, der Chip liegt noch an GND und VDD:
Pin 2 (SCL) gegen Gnd: 0,4V
Pin 3 (SDA) gegen Gnd: 0,0V


SCL an 6,8KOhm, die am 3,3V-Pluspol hängen:
SCL gegen GND: 0,5V


SDA an 6,8KOhm, die am 3,3V-Pluspol hängen:
SDA gegen GND: 0,05V

Allererste Messung (die mit dem Stern: *) nochmal wiederholt:

Pin2 (SCL) gegen GND: 0,21V
Pin3 (SDA) gegen GND: 0.0V

von Peter K. (peter_kg)


Angehängte Dateien:

Lesenswert?

Ich glaube der Chip ist nicht verschmort. Bin nochmal mit 'nem 
Taschentuch d'ran und hab ein neues Makro-Foto gemacht. Jetzt ist die 
vordere Kante unscharf und die Kante bei Pin1 sieht glatt aus.

Auf den Kabeln ist übrigens Kleber, deshalb sind die so dick und 
unförmig. Nur so konnte ich die parallel anlöten, ohne zu verrutschen.

: Bearbeitet durch User
von Peter K. (peter_kg)


Lesenswert?

Jim M. schrieb:
> Der OP könnte mal einen Diodentest mit dem Multimeter von den SDA/SCL
> Pins nach GND machen. Da ist laut DB eine Diode drin.

Die kann ich im Datenblatt beim besten Willen nicht finden. Richtiges 
Datenblatt verwendet? Ich benutze dieses : 
https://www.mikrocontroller.net/part/MCP4551

Was bedeuten die Messergebnisse? Als Slave ist das Bauteil doch passiv, 
muss also nicht zwingend was senden wollen.

von Dieter F. (Gast)


Lesenswert?

Peter K. schrieb:
> Was bedeuten die Messergebnisse? Als Slave ist das Bauteil doch passiv,
> muss also nicht zwingend was senden wollen.

Kauf Dir bitte einen einfachen Logik-Analysator und schaue, was 
passiert.

Schneller Versand, aus DE z.B.:

http://www.ebay.de/itm/USB-Logic-Analyzer-24MHz-8CH-/181767474651?hash=item2a522f8ddb:g:eWMAAOSwal5YJH66

Langsamerer Versand (ca. 6 Wochen aus China):

http://www.ebay.de/itm/24MHz-8-Channel-USB-Logic-Analyzer-8-CH-Logic-Analyzer-for-Arduino-MCU-/272306243922?hash=item3f66b78952:g:LLsAAOSwygJXhg-v

Ohne stocherst Du im Nebel ... Oszilloskop muss für digitale Signale 
nicht immer sein.

von Manfred (Gast)


Lesenswert?

Dieter F. schrieb:
> Peter K. schrieb:
>> Was bedeuten die Messergebnisse? Als Slave ist das Bauteil doch passiv,
>> muss also nicht zwingend was senden wollen.
> Kauf Dir bitte einen einfachen Logik-Analysator und schaue, was
> passiert.
Was soll der dann zeigen, außer einem blockierten Bus? Wenn sich das 
Poti-IC auch mit einem I2C-Scanner nicht meldet, wird es wohl defekt 
sein oder es liegt ein grober Schaltungsfehler vor.

Unabhängig davon: Der von Dir verlinkte "Analyzer", was kann der, welche 
Software gibt es dazu? Ich habe mein Zeug bislang ohne in Gang bekommen, 
ich kann mit DVM und Scope umgehen - dennoch reizt mich Dein Vorschlag, 
mal damit zu spielen.

von Dieter F. (Gast)


Lesenswert?

Manfred schrieb:
> Ich habe mein Zeug bislang ohne in Gang bekommen,
> ich kann mit DVM und Scope umgehen - dennoch reizt mich Dein Vorschlag,
> mal damit zu spielen.

Heißt Du Peter? Du hast ein "Scope" -im Gegensatz zu Peter - oder?

Manfred schrieb:
> Unabhängig davon: Der von Dir verlinkte "Analyzer", was kann der, welche
> Software gibt es dazu?

Kennst Du Google?

von W.A. (Gast)


Lesenswert?

Manfred schrieb:
> Unabhängig davon: Der von Dir verlinkte "Analyzer", was kann der, welche
> Software gibt es dazu?

Die Produktbeschreibung sagt, das er mit 24MHz 8 Digitalkanäle parallel 
erfassen kann. Fertig. Den Rest macht die Software auf einem PC (z.B. 
Sigrok)
http://sigrok.org/wiki/Main_Page

> Ich habe mein Zeug bislang ohne in Gang bekommen,
> ich kann mit DVM und Scope umgehen - dennoch reizt mich Dein Vorschlag,
> mal damit zu spielen.

Was nützt der sichere Umgang mit einem Scope, wenn man keins hat. 
Übrigens wird dir das Scope keinerlei Unterstützung bei Protokollanalyse 
leisten, sofern da nicht insgeheim ein LA mit drin steckt.
Und die 6€ für einen kleinen LA sollten zum Nikolaus vielleicht gerade 
noch drin sein.

von Harald (Gast)


Lesenswert?

Manfred schrieb:
> Was soll der dann zeigen, außer einem blockierten Bus? Wenn sich das
> Poti-IC auch mit einem I2C-Scanner nicht meldet, wird es wohl defekt
> sein oder es liegt ein grober Schaltungsfehler vor.

Wenn der Bus denn blockiert ist, er wird es ja nicht immer sein. 
Spätestens ohne Slaves sollte etwas sichtbar sein und man kann sich an 
den Fehler herantasten.

Manfred schrieb:
> Unabhängig davon: Der von Dir verlinkte "Analyzer", was kann der, welche
> Software gibt es dazu?

Freie Software: Sigrok. Illegal aber möglich wäre die Nutzung der 
Original-Software von Saleae. Beschreibung auf den jeweiligen Webseiten, 
sehr anschaulich die Saleae Webseite. Funktionsumfänge (bezogen auf 
dieses Problem) ungefähr identisch.

Manfred schrieb:
> Ich habe mein Zeug bislang ohne in Gang bekommen,

Probiers mal! Wenn Du es einmal probiert hast, wirst Du dich fragen, wie 
man bisher ohne arbeiten konnte.

von Manfred (Gast)


Lesenswert?

Dieter F. schrieb:
> Manfred schrieb:
>> Unabhängig davon: Der von Dir verlinkte "Analyzer", was kann der, welche
>> Software gibt es dazu?
> Kennst Du Google?
Wer oder was ist Google?
Du verlinkst hier ein Stück Chinahardware auf der Bet*****-Plattform, 
was keine ordentliche Beschreibung hat. Nach was soll ich suchen?

W.A. schrieb:
> Die Produktbeschreibung sagt, das er mit 24MHz 8 Digitalkanäle parallel
> erfassen kann. Fertig. Den Rest macht die Software auf einem PC (z.B.
> Sigrok)
> http://sigrok.org/wiki/Main_Page
Danke Dir, zur Software habe ich dort keinen Verweis gesehen.

Harald schrieb:
> Manfred schrieb:
>> Ich habe mein Zeug bislang ohne in Gang bekommen,
> Probiers mal! Wenn Du es einmal probiert hast, wirst Du dich fragen, wie
> man bisher ohne arbeiten konnte.
Deswegen habe ich nachgehakt, auch Dir danke für die Antwort.

von Peter K. (peter_kg)


Lesenswert?

Also sind sich alle einig, dass der Chip wahrscheinlich im Eimer ist? 
Denn auf meine Frage, was die Messergebnisse denn jetzt bedeuten, kam 
gar keine Antwort.

Ich habe noch zwei MCP4551s und könnte einen neuen Versuch starten. Mir 
gruselt es zwar vor dem Löten mit Lupe und Pinzette, aber werde es 
natürlich erneut probieren.

Zu dem Logic Analyzer: Das klingt wahnsinnig interessant. Doch weiß ich 
ja nichtmal wie der angeschlossen wird und was ich noch damit machen 
kann. Ich befürchte, wenn ich den jetzt kaufe benutze ich ihn einmal und 
nie wieder.

von W.A. (Gast)


Lesenswert?

Peter K. schrieb:
> Doch weiß ich ja nichtmal wie der angeschlossen wird und was ich noch
> damit machen kann.

Ganz einfach:
Ein Ende USB zum PC, anderes Ende Gnd und bis zu 8 Digitalsignale, die 
dich interessieren.
Dann kannst du deinen µC laufen lassen und dabei minutenlang die Signale 
aufzeichnen. Die Zeitauflösung der Aufzeichnung beträgt dabei bis zu 
42ns und hinterher kannst du dir in Ruhe alles angucken. I2C wird z.B. 
fertig dekodiert und du siehst dann genau, wie ein Baustein auf 
Steuerbefehle reagiert, was und wie schnell er antwortet u.s.w.

von Felix Adam (Gast)


Lesenswert?

Bevor du den Chip wieder so wie jetzt an Kabel dran lötest, möchte ich 
auf
Adapterplatinen aufmerksam machen, die es zu kaufen gibt:

Diese für MSOP8 (ein SO8-Gehäuse gibt es für diesen Chip scheinbar 
nicht):
http://www.reichelt.de/Laborkarten/RE-914/3/index.html?ACTION=3&LA=2&ARTICLE=167711&GROUPID=7787&artnr=RE+914&SEARCH=%252A

Hier passt dein Chip (so er denn ein MSOP8-Gehäuse hat) drauf und du 
kannst die Kabel außen anlöten, was die Pins vom Chip entlastet. 
Außerdem sollte es so besser lötbar sein.

Dazu vielleicht noch etwas Flussmittel, damit keine Lötbrücken von Pin 
zu Pin entstehen. Vielleicht der hier:
https://www.reichelt.de/Flussmittel-Loetpasten/STANNOL-X32-10I/3/index.html?ACTION=3&LA=2&ARTICLE=96335&GROUPID=4132&artnr=STANNOL+X32-10I&SEARCH=%252A

Womöglich haben andere Forenianer aber noch bessere Vorschläge.

Und eine Ergänzung: baue bitte einen (Standard 100nF, 47nF bis 220nF 
aber auch okay) Kondensator nahe an die VCC-GND-Pins zur Abblockung.

von Peter K. (peter_kg)


Lesenswert?

Oh toll, die Laborkarte! Wie finde ich sowas bei anderen Händlern? 
Reichelt will min. 6 Euro Versandkosten und wir haben 'nen Conrad-Shop 
in der Nähe, zum selber Hinlaufen. Auf deren Homepage finde ich zwar 
Laborkarten und auch Bauteilfassungen 
(https://www.conrad.de/de/bauteilefassungen-c987684.html), aber nichts 
passendes für MSOP8.

Dass mit dem Kondensator bitte genauer erklären: Wogegen ist der? Wie 
schließe ich den an? "Nahe VCC-GND-Pins" verunsichert mich sehr. Meinst 
Du Pluspol des Kondensators an VCC und Minus an GND, also parallel zu 
den angeschlossenen Leitungen? Meinst Du zwei Kondensatoren, je einer 
für VCC und einer für GND, also beide Kondensatoren jeweils in Reihe? 
Was heißt hier "nahe"?

Dass mit dem Logic Analyzer hört sich gar nicht so kompliziert an...

von Einer K. (Gast)


Lesenswert?

Peter K. schrieb:
> Dass mit dem Kondensator bitte genauer erklären: Wogegen ist der? Wie
> schließe ich den an? "Nahe VCC-GND-Pins" verunsichert mich sehr. Meinst
> Du Pluspol des Kondensators an VCC und Minus an GND, also parallel zu
> den angeschlossenen Leitungen? Meinst Du zwei Kondensatoren, je einer
> für VCC und einer für GND, also beide Kondensatoren jeweils in Reihe?
> Was heißt hier "nahe"?

Es hieß: Kondensator
Und nicht: Kondensatoren

Nahe - Pins?
Entfernung!
In Millimeter.
Nahe === wenige Millimeter

Plus Minus?
Ein 100nF Kerko hat kein Plus oder Minus.

Lesen: Google(abblockkondensator)

von uwe (Gast)


Lesenswert?

> Dass mit dem Kondensator bitte genauer erklären: Wogegen ist der?
Der ist nicht irgendwogegen, sondern der ist dafür da, daß das IC 
Funktioniert...

von uwe (Gast)


Lesenswert?

Dein Display und der rPi haben die auch schon eingebaut... nur deine 
Schaltung hat keinen...

von Peter K. (peter_kg)


Lesenswert?

Ahh, danke....
hab den Begriff mal gegoogelt und sofort das hier bekommen (LOL):

"Viele Anfänger in Sachen Elektronik bekommen, wenn sie eine selbst 
entworfene Schaltung im Forum posten, als erstes zu hören: "Alle ICs mit 
Kondensatoren an den Stromversorgungspins versehen!!!". Die Erklärungen, 
die dazu geliefert werden, schwanken zwischen <nicht vorhanden>, und 
langen, ausführlichen, physikalisch korrekten, aber für Laien kaum 
verständlichen Ausführungen. Dieser Artikel soll nun dazu dienen, die 
Wirkung eines Abblockkondensators zu beschreiben und zu erklären, sodass 
in Zukunft vom Forum einfach hierhin verlinkt werden kann, wenn das 
Thema mal wieder zur Sprache kommt..."

Quelle:
http://rn-wissen.de/wiki/index.php/Abblockkondensator


Ich les' mir das jetzt mal in Ruhe durch...

von Einer K. (Gast)


Lesenswert?

Peter K. schrieb:
> Ich les' mir das jetzt mal in Ruhe durch...
Daran tust du gut!

Recht oberflächlich, der Artikel, aber für den Anfang sehr gut!

von Wolfgang (Gast)


Lesenswert?

Peter K. schrieb:
> Dass mit dem Kondensator bitte genauer erklären: Wogegen ist der?

Gegen kurze Spannungseinbrüche auf der eigenen Versorgung auf Grund von 
kurzfristigem Ladungsbedarf des IC.

von Dieter F. (Gast)


Lesenswert?

Arduino F. schrieb:
> Recht oberflächlich, der Artikel, aber für den Anfang sehr gut!

Hast Du besseres im Griff?

von Manfred (Gast)


Lesenswert?

Peter K. schrieb:
> Laborkarten und auch Bauteilfassungen
> (https://www.conrad.de/de/bauteilefassungen-c987684.html), aber nichts
> passendes für MSOP8.
Wenn Du garnicht laufen willst und viel Zeit hast, suche nach "sop8 pcb"
und finden z.B. den: 
https://www.aliexpress.com/item/10x-SOP8-SSOP8-TSSOP8-to-DIP8-Interposer-Moudle-PCB-Board-Adapter-Plate-10PCS-30641/32327739080.html?ws_ab_test=searchweb0_0,searchweb201602_3_10065_10068_10084_10083_10080_10082_10081_10060_10061_10062_10056_10055_10054_10059_10099_10078_10079_10073_10100_10096_10070_10052_423_10050_10051_424,searchweb201603_2&btsid=776c5607-3c97-4a2e-b2a7-36fd199eedcc

Meist sind die doppelseitig, so dass man mit einem Typ Adaperplatte zwei 
verschiedene Gehäuse abdecken kann - habe ich hier ein paar von 
gebunkert.

von Peter K. (peter_kg)


Lesenswert?

Wollte mich mal zurückmelden. Hab den Logic-Analyzer zwar immernoch 
nicht gekauft, dafür aber den empfohlenen Kondensator. Der wirkt Wunder: 
i2cdetect findet den Poti jetzt (Adresse 2f) und wird offenbar nicht 
mehr gestört. Hab gleichzeitig mein i2c-display angeschlossen, dass auch 
wieder funktioniert. Seltsamerweise änderte sich zwischenzeitlich seine 
Adresse von 3b nach 3f und wieder zurück. Unter der jeweils gültigen 
Adresse war er aber sets ansprechbar.
Jedenfalls weiß ich noch nicht wie ich den Poti denn jetzt nun 
eigentlich steuere. Hab noch nie was mit Python gemacht und mir deshalb 
die Skripte vom LCD-Display angeguckt. Mein Problem ist jetzt, dass das 
Versenden von Daten mit der i2c-Bibliothek in Bytes erfolgt, das 
Datenblatt aber Bitmuster vorgibt. Hab die deswegen mal in Hex 
umgerechnet und in mein Skript geschrieben.

Resultate waren I/O-Fehler. Weiß jetzt nicht, ob das an dem Datenformat 
liegt oder wirklich an Kommunikationsproblemen mit dem Poti.
Vielleicht ist das aber auch eher was für ein Python-Forum...

Edit:
Achja...und ich hab das Beinchen samt Kabel am A0/HVC-Pin abgerissen. 
Sehr ärgerlich, aber zum Glück kann ich ja trotzdem weitermachen. Ich 
muss halt nur auf High-Voltage-Commands und Adressänderungen verzichten.

: Bearbeitet durch User
von Peter K. (peter_kg)


Lesenswert?

Inzwischen sind drei Monate vergangen, ich habe mir diese tollen 
Adapterplatinen zugelegt und auch der Logic-Analyzer ist vor einigen 
Tagen eingetroffen.

Jetzt wollte ich den ausprobieren und das ursprüngliche Problem ist 
wieder da: Wenn ich den Logicanalyzer mit GND, SDA und SCL verbinde wird 
mit i2cdetect wieder nichts gefunden. Ohne Logicanalyzer springt die 
LCD-Adresse immer zwischen 3b und 3f hin- und her. Poti-Adresse ist 
immer 2f. Mein LCD-Testskript bricht zwischendurch immer mit einem 
I/O-Fehler ab.

Ziehe ich den Poti (mit angelötetem Kondensator) ab, läuft alles super. 
I2cdetect braucht keine 30 Sekunden und ich kann mit dem Logicanalyzer 
aufzeichnen. Habe drei dieser Potis: Den alten (mit den Kabeln, siehe 
alte Fotos), einen neuen auf Platine mit Kondensator und einen neuen auf 
Platine ohne Kondensator.

Wenn ich den Poti tausche sieht's folgendermaßen aus:

Alter Poti mit Kondensator gegen neuen mit Kondensator: Kein Unterschied
Alter Poti mit Kondensator gegen neuen ohne Kondensator: Wird oft nicht 
gefunden.

Eines ist mir noch aufgefallen: Wenn ich bei der langsamen Suche von 
i2cdetect gegen die Kabel klopfe, springt die langsame Ausgabe 
plötzlich. Weiß nicht ob das hilft, wollte ich aber nicht unerwähnt 
lassen.

Klemme ich das Display ab, erkenne ich keine Unterschiede in der 
Erkennung. WENN der Poti gefunden wird ist die Adresse immer 2f. Gibt's 
außer dem Kondensator noch einen "Trick", um das Signal irgendwie zu 
verbessern? Habe ich vielleicht ein Problem mit der Stromversorgung? Ich 
benutze zwei Stromquellen: Einmal den Raspberry selbst und einmal 5V per 
USB, die ich mit einem Stepdown auf 3,3V runterwandle, um den Raspberry 
zu unterstützen. Habe den Stepdown auch mal abgezogen - kein Unterschied 
beim Fehlverhalten.

von Sven B. (scummos)


Lesenswert?

i2c mag keine langen Leitungen, so Kabel auf dem Steckbrett führen 
schnell dazu dass es nicht mehr tut. Versuch mal die Kabel kürzer zu 
machen und/oder direkt an beide Seiten in den Bus einen kleinen Tiefpass 
zu bauen (22 Ohm in Reihe und 10 nF nach Masse oder sowas).

Lötverbindungen statt Steckbrett und Signalkabel mit Massekabel 
verdrillen statt wild fliegen lassen hilft auch viel.

100 nF von Masse nach VCC direkt am IC sollte eigentlich jeder Baustein 
immer haben.

: Bearbeitet durch User
von Harald A. (embedded)


Lesenswert?

Peter K. schrieb:
> und einmal 5V per
> USB, die ich mit einem Stepdown auf 3,3V runterwandle, um den Raspberry
> zu unterstützen.

Das klingt nicht gut, speist Du die rückwärts ein? Mach doch mal ein 
Foto vom gesamten Aufbau, einen Schaltplan wirst Du nicht haben, oder?

Das mit den Leitungen, wo etwas beim "Gegenklopfen" etwas passiert, 
klingt ebenfalls nicht gut. Du musst das zunächst einmal Schritt für 
Schritt vernünftig aufbauen, sonst wird das nichts.

: Bearbeitet durch User
von Einer K. (Gast)


Angehängte Dateien:

Lesenswert?

Harald A. schrieb:
> Und dann gibt es da noch das geniale Werkzeug
> Logic Analyzer, welches Du dir für unter 10€(!) zulegen kannst. Gerade
> bei I2C Entwicklungen eine absolut geniale Sache. Du benötigst z.B.
> einen "Saleae Clone" und die freie Software Sigrok.
> Logic Analyzer hört sich vielleicht kompliziert an, ist aber sehr
> einfach in der Anwendung. Der nimmt auf bis zu 8 Leitungen hochfrequent
> die Signale auf (aber nur den Logic Pegel, nicht das analoge Signal),
> diese werden dann nach der Aufnahme von der PC Software interpretiert
> und z.B. als I2C Signale dargestellt. So kannst Du genau verfolgen, was
> gerade passiert.

Ja, ein LA ist in vielen Situationen hilfreich.
Aber beim I2C Debugging eher weniger...
Da muss ein Oszi sein.

Grund:
Ein LA hat sicherlich andere Schaltschwellen, als die beteiligten I2C 
Komponenten. Er zeigt nicht das an, was die Partner sehen.
Ein LA zeigt immer Rechtecke, auch wenn die Realität er einem Haigebiss 
ähnlich sieht

Bei dem I2C Signalbild im Anhang, zeigt der LA noch ein tolles Signal.
Aber man sieht, dass dieser Bus nicht stabil arbeiten wird.

von Harald A. (embedded)


Lesenswert?

Genau das habe ich auch geschrieben, aber genau diesen Teil hast du im 
Zitat ausgeschnitten. Warum?

von Einer K. (Gast)


Lesenswert?

Harald A. schrieb:
> Ohne Messmittel ist das alles etwas schwierig. Vielleicht gibt es
> irgendjemand in der Umgebung, der zumindest mal per Oszilloskop auf die
> Signale schauen kann?
Diesem Teil stimme ich zu!
Keine Kritik, darum nicht zitiert.


Die Gewichtung deines Beitrags war mir zu LA lastig.

Ich habe nichts gegen LAs!
Die sind prächtig.
Aber eben NICHT beim I2C debugging auf physikalischer Ebene.
Ist die Kurvenform gut, dann darf der LA ran.

Ein weiterer Grund:
Mit einem LA kann man nicht erkennen ob der Slave Clockstretching 
betreibt.
Mit einem Oszi kann man das sehen (wenn man denn will).

von Harald A. (embedded)


Lesenswert?

Alles richtig, stimme zu. Aber ein Scope hat er ja nun mal nicht, 
offensichtlich auch nicht in der Umgebung. Die 6€ für nen LA sind so 
gesehen besser als überhaupt nichts. Du musst auch die Chronologie der 
Beiträge sehen, erst nach den letzten Beiträgen wird deutlich, dass er 
ein generelles Problem hat.

von Peter K. (peter_kg)


Lesenswert?

Harald A. schrieb:
> Das klingt nicht gut, speist Du die rückwärts ein? Mach doch mal ein
> Foto vom gesamten Aufbau, einen Schaltplan wirst Du nicht haben, oder?

Im Grunde ja, ich speise zusätzlichen Strom rückwärts ein. 
Aufbau/Schaltplan habe ich gerade nicht zur Hand, kann ich aber gerne 
anfertigen.

Ein Oszilloskop habe ich leider nicht zur Hand. Ich verstehe aber das 
Problem.

Sven B. schrieb:
> i2c mag keine langen Leitungen, so Kabel auf dem Steckbrett führen
> schnell dazu dass es nicht mehr tut. Versuch mal die Kabel kürzer zu
> machen und/oder direkt an beide Seiten in den Bus einen kleinen Tiefpass
> zu bauen (22 Ohm in Reihe und 10 nF nach Masse oder sowas).
>
> Lötverbindungen statt Steckbrett und Signalkabel mit Massekabel
> verdrillen statt wild fliegen lassen hilft auch viel.
>
> 100 nF von Masse nach VCC direkt am IC sollte eigentlich jeder Baustein
> immer haben.

Das hilft mir sehr. Hätte nicht gedacht, dass I2C so empfindlich ist. 
Vielleicht wären Drahtbrücken statt Kabel besser. Auf jeden Fall weiß 
ich, wo ich was optimieren kann. Eine gelötete Version wäre auch 
denkbar, dauert aber natürlich etwas.

Was heißt "Signalkabel mit Massekabel verdrillen"? SDA+GND? Wirklich?
"Beide Seiten vom Bus"...verstehe ich auch nicht ganz. Ich vermute mal 
direkt hinter'm Raspi und dann direkt vor'm Poti...doch am Poti ist doch 
schon ein 100nF-Kondensator.

Ich melde mich, sobald ich die Schaltung abfotografiert/aufgezeichnet 
habe.

von Einer K. (Gast)


Lesenswert?

Harald A. schrieb:
> Aber ein Scope hat er ja nun mal nicht,
> offensichtlich auch nicht in der Umgebung.
Ja, das ist in diesem Fall sehr schade.

Harald A. schrieb:
> erst nach den letzten Beiträgen wird deutlich, dass er
> ein generelles Problem hat.
Da bin ich anderer Ansicht.
Für mich ist da schon klar, dass der Fehler Hardware nah zu suchen ist.

Was genau?
Falschanschluss, Pullupfehler?
Was anderes, überraschendes..?
KA!
Da warte ich auf Aufbau/Schaltplan.

von Sven B. (scummos)


Lesenswert?

Peter K. schrieb:
> Das hilft mir sehr. Hätte nicht gedacht, dass I2C so empfindlich ist.
> Vielleicht wären Drahtbrücken statt Kabel besser. Auf jeden Fall weiß
> ich, wo ich was optimieren kann. Eine gelötete Version wäre auch
> denkbar, dauert aber natürlich etwas.
Also eigentlich ist i2c dazu entworfen um Kommunikation zwischen ICs auf 
demselben PCB zu machen. Die vorgesehene Leitungslänge ist da halt sowas 
wie 15cm, ohne irgendwelche Stecker oder was auch immer.

> Was heißt "Signalkabel mit Massekabel verdrillen"? SDA+GND? Wirklich?
Ja, genau. Es fließt ja Strom durch das SDA/SCL-Kabel (ganz wenig aber 
trotzdem), und der muss auch irgendwo wieder zurück fließen. Am liebsten 
tut er das (geometrisch) genau auf dem Weg über den er auch hin 
geflossen ist.

> "Beide Seiten vom Bus"...verstehe ich auch nicht ganz. Ich vermute mal
> direkt hinter'm Raspi und dann direkt vor'm Poti...
Das meinte ich, ja.

> doch am Poti ist doch
> schon ein 100nF-Kondensator.
An der Spannungsversorgung, oder? Mein Vorschlag war den Tiefpass in die 
Busleitungen zu bauen.

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Sven B. schrieb:
> An der Spannungsversorgung, oder? Mein Vorschlag war den Tiefpass in die
> Busleitungen zu bauen.
Och nööö...
Das habe ich noch nie in einer Appnote oder Datenblatt gesehen....

Hast du Quellen für mich?

von Sven B. (scummos)


Lesenswert?

Arduino F. schrieb:
> Sven B. schrieb:
>> An der Spannungsversorgung, oder? Mein Vorschlag war den Tiefpass in die
>> Busleitungen zu bauen.
> Och nööö...
> Das habe ich noch nie in einer Appnote oder Datenblatt gesehen....
>
> Hast du Quellen für mich?

Weil i2c nicht dazu gedacht ist das fliegend über 40cm Kabel zu 
verdrahten. Wenn man das macht muss man sich halt was überlegen damit es 
trotzdem tut ;)

: Bearbeitet durch User
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.