Forum: Mikrocontroller und Digitale Elektronik I2C (oled) gestörter Bus


von Daniel (Gast)


Lesenswert?

Hallo,

ich bräuchte Ideen oder eine Lösung für I2C Bus.
Aufbau: Raspberry im Metall case (inkl. Sensoren, Lüfter, Steuerungen 
etc.). Am i2c bus hängen insgesamt 2 Geräte dran und eigentlich das oled 
Display. Alle i2c Geräte sind ohne Widerstand am Bus dran.

Zuerst hatte ich nur versuchsweise das Display angesteuert, da war noch 
alles Fliegend verdrahtet und funktionierte wunderbar.

Seit ich aber alles zusammen gebaut habe, ist eine addresierung am Bus 
nicht mehr möglich, das oled erzeugt Fehler auf den Bus.

Meine Frage ist daher was ich gegen den Fehler unternehmen könnte... 
Würde mir nen 4k7 Widerstand am oled was bringen?
Oder weitere/andere Ideen?


Gruß Daniel

von Stefan F. (Gast)


Lesenswert?

Daniel schrieb:
> Meine Frage ist daher was ich gegen den Fehler unternehmen könnte...

erst einmal nachmessen, was Sache ist. Im Moment ist die Form der 
Flanken auf dem I²C Bus am interessantesten.

> das oled erzeugt Fehler auf den Bus.

Wie genau ist das zu verstehen?

Du solltest vielleicht wenigstens die Produkte konkret benennen und dein 
Blockschaltbild zeigen, damit potentielle Helfer nicht ausschließlich 
auf ihre Phantasie zurückgreifen müssen. Fotos vom Aufbau wären auch 
gut.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Raspberry pi 4
I2C:
Geekworm X708 usv Modul
APDS-9960
Ssdp1306(128x64px)


Anschluß Plan:
GPIO27 -> 3v3 SSDP1306 (gpio27 muss eingeschaltet werden)
GND -> GND SSDP1306
SCL -> SCL SSDP1306
SDA -> SDA SSDP1306


Fotos gibt es zwar, aber das Display ist einfach viel zu versteckt 
eingebaut...Das oled wurde vom kleber an der schaltung entfernt sodas 
der screen vorne zu sehen ist und die schaltung im Inneren....

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Noch das Bild von vorne und oben hinzugefügt.
Es halt wirklich schwer zu erkennen wo die schaltung vom oled sitzt

von Stefan F. (Gast)


Lesenswert?

a) zeige dein Blockschaltbild
b) messe das Signal, zeige wie dessen Flanken und das Timing aussehen
c) beantworte die Frage, was "das oled erzeugt Fehler auf den Bus" 
bedeutet
d) werfe deine Kamera weg oder benutze sie nie wieder

Immerhin kann man sehen, dass es nur um wenige Zentimeter Leitungslänge 
geht. Ansonsten sehe ich viel bunte Knete.

Aus deinem Blockschaltbild sollten Position und Größe der Pull-Up 
Widerstände hervor gehen. Wenn du keine hast, lies mal die Spezifikation 
vom I²C Bus (UM10204). Das steht alles Wissenswerte gut verständlich 
drin, sofern man englisch kann.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

a) zeige dein Blockschaltbild
Habe kein Schaltplan. Es ist doch bloß direkt am raspberry 
angeschlossen.

b) messe das Signal, zeige wie dessen Flanken aussehen

Hab natürlich kein Oszilloskop zur Verfügung.

von Timmo H. (masterfx)


Lesenswert?

Der RasPi hat schon mal keine Pullups. Bzw die internen (wenn aktiviert) 
sind um die 50k. Haben deine Devices Pullups? Wenn nicht kann jeweils 
ein 2-5k Pullup an SDA und SCL sicherlich nicht schaden

von Daniel (Gast)


Lesenswert?

Schonmal danke für den Hinweis mit den i2c Spezifikationen.

Mit den Pullup Widerständen hab ich gerade nachgelesen, das die doch 
sinnvoll sein könnten...

Die Devices haben keinen Pullup Widerstand, bzw. beim X708 Modul könnte 
ich es gar nicht beantworten.

Ich hoffe ich finde gleich zwei 2-5K Widerstände, dann probier ich das 
direkt mal aus. Dankeschön

von Timmo H. (masterfx)


Lesenswert?

Daniel schrieb:
> Mit den Pullup Widerständen hab ich gerade nachgelesen, das die doch
> sinnvoll sein könnten...
Eher notwendig...

Daniel schrieb:
> Ich hoffe ich finde gleich zwei 2-5K Widerstände, dann probier ich das
> direkt mal aus.
Die müssen nicht dynamische Werte haben. 2.7k, 3.3k oder 4.7k sind okay. 
Selbst 10k ist besser als gar nichts (zumindest sollte 10k für Low-Speed 
~100kHz reichen)

: Bearbeitet durch User
von Daniel (Gast)


Lesenswert?

Mit zwei 4,7k Widerständn wird die addresse vom oled gar nicht mehr 
erkannt 😕
Hab ich es vielleicht doch geschrottet? 🤔

von Falk B. (falk)


Lesenswert?

Daniel schrieb:
> Mit zwei 4,7k Widerständn wird die addresse vom oled gar nicht mehr
> erkannt 😕

Wie hast du die angeschlossen? Die müssen jeweils vom Signal SDA bzw. 
SCL nach +3,3V gehen. NICHT gegen GND!

Ein Oszi, und sei es noch so einfach, wäre jetzt viel Wert. Oder du mußt 
versuchen, die I2C Pins als Open Drain Ausgänge zu konfigurieren und per 
Hand/Konsole auf HIGH und LOW zu schalten. Da kann man mit einem 
Multimeter messen, ob gescheite HIGH und LOW Pegel erreicht werden.

von Daniel (Gast)


Lesenswert?

Achso, die müssen gegen Spannung gehen 😅
Hatte das so verstanden, daß die in die SCL bzw SDA Leitung zwischen 
master und Sklave kommen.

Oh man jetzt mach ich ja echt viel falsch 😅

von Ergo70 (Gast)


Lesenswert?

Die ziehen die Leitungen auf VCC hoch. Deswegen PullUP!

von Daniel (Gast)


Lesenswert?

Tja sobald ich das so anschließe, ist auf dem Bus gar nichts mehr los.

von Frank D. (Firma: Spezialeinheit) (feuerstein7)


Lesenswert?

Nur zur Sicherheit etwas bildlich dargestellt:


Raspi SDA----------------SDA Oled
         |
         |
        | | 5KOhm
        | |
         |
         |
Raspi VCC---------------VCC (3,3 oder 5V)



Raspi SCL----------------SCL Oled
         |
         |
        | | 5KOhm
        | |
         |
         |
Raspi VCC---------------VCC (3,3 oder 5V)

von Frank D. (Firma: Spezialeinheit) (feuerstein7)


Lesenswert?

Kleiner Nachtrag, das Display ist ja liebevoll mit Heißkleber auf die 
Blechkiste gepappt, auf der Rückseite sind ja Leitfähige Bauteile- 
Anschlüsse, die könnten das Blech kontaktieren. Weiterhin sieht die 
Kabeldurchführung für das Flexkabel auch optimierungsbedürftig aus. Wenn 
das Blech scharfkantig ausgeschnitten ist, könnte das Kabel dort auch 
ungewollten Kontakt zum Gehäuse haben.

PS: Nicht in den falschen Hals kriegen, ich mag auch manchmal den 
"rustikalen Bastlerstyle".

von Daniel (Gast)


Lesenswert?

Ja, hab ich genauso angeschlossen gehabt.

Auf der Rückseite des screens befindet sich nur ein blech, bei der 
Durchführung der Kabel geb ich dir recht.
Ich kann nicht 100%ig ausschließen, das es dort beschädigt ist. (aber 
ich hab die Durchführung etwas angefeilt)

auch im Gehäuse inneren ist die Isolierung und Befestigung: Heiß kleber.

Für Ideen wie ich ein Display an der Front befestige, bin ich offen. War 
die "akzeptabelste" Idee die mir eingefallen war

von Daniel (Gast)


Lesenswert?

Zumindest weiß ich jetzt, daß das ssd1306 Display ohne Probleme den 
Backofen bei 60-70 °C übersteht um den kleber zwischen Platine und Glas 
zu lösen.

Aber kleine mechanische belasse ist echt tödlich, falls ich es 
geschrottet hab, wäre es mein zweites oder drittes 🙄

von Joachim B. (jar)


Lesenswert?

Timmo H. schrieb:
> Der RasPi hat schon mal keine Pullups

an den default I2C Anschlüssen schon 1,8k pullups, kann man messen!

Der Beweis:
Daniel schrieb:
> Zuerst hatte ich nur versuchsweise das Display angesteuert, da war noch
> alles Fliegend verdrahtet und funktionierte wunderbar.

masterfx ich bin ja Fan seit deinem Zerlegen vom AES3 und anderen Dingen 
(Timer)

aber dem armen PI keine pullups an SDA und SCL anzudichten ist stark!

https://www.raspberrypi.org/forums/viewtopic.php?t=7664

LG

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Daniel schrieb:
> a) zeige dein Blockschaltbild
> Habe kein Schaltplan. Es ist doch bloß direkt am raspberry
> angeschlossen.

Der ist aber zum Verständnis des Aufbaus wichtig. Zu dem solltest du 
doch die Produkte bennenen. Bekommen habe ich Chip-Nummern. Du hast 
sicher mehr als nur nackte Chips angeschlossen. Und genau dieses mehr 
ist der entscheidende Punkt für die Fehleranalyse.

> b) messe das Signal, zeige wie dessen Flanken aussehen
> Hab natürlich kein Oszilloskop zur Verfügung.

Dann kaufe oder leihe dir eins. Zur Not tut es ein DSO138, das kann sich 
jeder leisten.

> Für Ideen wie ich ein Display an der Front befestige, bin ich offen.

Klebe es mit doppelseitigem Klebeband auf eine größere Trägerplatte aus 
Kunststoff oder dicker Pappe. Dann hast du rundherum genug Platz, 
Montagelöcher zu bohren.

Schrauben zur Befestigung kann mit 2-Komponenten Kleber unsichtbar an 
die Innenseite des Gehäuses kleben. Es gibt alternativ dazu 
selbstklebende Platinenhalter in unterschiedlichen Längen, die dazu 
taugen: 
http://shop.griederbauteile.ch/product_info.php?products_id=23532

von Daniel (Gast)


Lesenswert?

A)
Ich hab nur die Chips angeschlossen, ich brauch ja auch nur die I/O der 
Chips.
Klar sind auf anderen Pins auch kleine Transistor schaltungen dran, aber 
die diese schalten nur Lüfter an/aus. Selbst dabei könnte ich nicht 
sagen welche Widerstände oder Kondensatoren verwendet wurden.

B) Oszilloskop und Signal Prüfung ist einfach nicht mein Ding, das lohnt 
sich auch nicht. Entweder hab ich nen "einfachen" Fehler gemacht, wie 
z.B. die PullUps oder defekt.

C) Vom Grundsatz her kenne ich das Vorgehen daß du beschreibst, finde 
ich auch schöner gelöst, wenn das Display auf der Platine verbleibt. Nur 
der Platz im case 😅 - da ist einfach kein Platz für da. Es ist schon 
absicht im minimal case alles unterzubringen. Minimalistisch und 
trotzdem luftig.

Ich weiß das es alles nicht gerade ordentlich dokumentiert ist, aber 
eigentlich hatte ich gehofft, keinen Fehler beim Einbau gemacht zu haben 
🙄
Aber irgendwas ist ja immer.
Für mich sind es eben nur Hardware Module, die Signale empfangen bzw 
verschicken, die ich für die Programmierung und Steuerung benötige

von Stefan F. (Gast)


Lesenswert?

Daniel schrieb:
> Oszilloskop und Signal Prüfung ist einfach nicht mein Ding, das lohnt
> sich auch nicht.

Doch, das lohnt sich gerade für Fälle wie diesem sehr. Wir reden hier 
von 20 Euro als Bausatz bzw. 30 Euro als Fertiggerät, ist dir das 
bewusst?

von Daniel (Gast)


Lesenswert?

Ja, das ist mir bewusst.
Aber bei nen rund 2€ Display, rechnet es sich nicht.
Ich bastel zwar "jährlich was neues", aber normalerweise geht nix kaputt 
- aber wenn dann richtig 🙄
War irgendwie nie interessant genug um als Bausatz bei mir zu landen.

von Stefan F. (Gast)


Lesenswert?

Daniel schrieb:
> Aber bei nen rund 2€ Display, rechnet es sich nicht.

Es geht nicht um die 2€, sondern darum, ob dein Projekt scheitert oder 
nicht. Es sei denn, dein Projekt ist, das Display irgendwie anzusteuern.

Du hast dir ja auch einen Lötkolben gekauft, um Bauteile zu verarbeiten, 
die einzelne Cent kosten. Werkzeug kostet halt Geld.

von Stefan F. (Gast)


Lesenswert?

Daniel,

ich habe meine OLED Klasse anlässilich deiner Reklamation nochmal auf 
einem Arduino Nano geprüft. Sie funktioniert. Auf der Seite 
http://stefanfrings.de/arduino_oled/index.html siehst du ein Foto vom 
Aufbau und da kannst du auch den exakten Quelltext von meinem Test 
downloaden.

Dein Speicherproblem wird damit wohl nicht gelöst. Ich wollte nur zurück 
melden, dass der Code funktionsfähig ist.

von Schlaumaier (Gast)


Lesenswert?

Ich hab da mal ne Idee.

Er hat ein METALL-Gehäuse. Ein Display verbaut man normal in ein 
Gehäuse.
Da die Hersteller in den seltensten Fällen von Metall ausgehen, denke 
ich mal da ist einfach irgendwie ZU VIEL Masse (oder sogar Spannung). 
Ich würde das Gehäuse mal messen, ob es irgendwo Kontakt hat wo es nicht 
soll.

Ich hatte so was mal vor 30 Jahren mit einen Mainboard. Das lief prima, 
nur nicht im Gehäuse. Ich habe das Gehäuse dann Klarlack-Lackiert innen. 
Und oh Wunder das Mainboard lief bis zu seiner Verschrottung prima.

Seit dem machen mich Metallgehäuse immer misstrauisch.

von Stefan F. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> ich habe meine OLED Klasse anlässilich deiner Reklamation nochmal auf
> einem Arduino Nano geprüft

Daniel, sorry. Ich habe den Thread verwechselt. Vergiss meinen Beitrag.

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.