Forum: Mikrocontroller und Digitale Elektronik Arduino selfmade Internal Clock 8MHz I2C probleme


von m a k e r (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe community,

ich habe ein nerviges Problem was ich nicht lösen kann, ich hoffe jemand 
hatte das selbe und hat es lösen können.

Nun ich habe mir ein board selber designed mit einem Atmega328 mit einem 
internal clock (8MHz), die Schaltung habe ich angehangen, 
Betriebsspannung kommt vom USB 5 V. Das System hat einen arduino 
bootloader.
Der nachfolgender Link zeigt das vorgehen für solch ein Projekt und die 
richtigen Einstellungen zu übertragen.

https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

Den bootloader habe ich über ISP und einen AVR mkII gelasht.

Nachdem ich alles vorbereitet hatte kam das coden (Arduino 1.8.5), Code 
im Anhang, einpaar Spielereien eingebaut, wie LEDs blinken, einpaar 
seriele Ausgaben etc. funktioniert alles so wie gewollt.

Dann habe ich angefangen die I2C Komponente anzusprechen, dafür habe ich 
die standard Wire Library verwendet, wie auf dem Schaltplan zu sehen ist 
ein SHT31 (Addr. 0x44, Lib von Adafruit) verbaut und ein OLED mit einem 
SSD1306 Chip (Addr. 0x3C, Lib von Adafruit), Anschlusse mehrmals 
überprüft (auf der Schaltung sowie der Platine). Sobald ich anfange die 
Befehle zu senden hängt das Programm, es ist bekannt das in der Wire Lib 
eine while-Schleife gibt (Wire.endTransmision()) die unendlich auf ein 
ACK wartet, sprich da hängt es fest. Nun gut, dachte das Problem ist die 
Adresse aber alles ist richtig, pullup Widerstände sind auch vorhanden 
(probiert mit 10k, 4,7k und 1k, leider erfolglos). Keins der I2C devices 
(setClock() variirt) antwortet, mit unterschiedlichen i2c_scan probiert, 
da wurde nichts gefunden, hängt halt fest oder gibt einfach alle 
Adressen raus.


Dann ging es an die Elektronik, erstmal mit einem Multimeter, SDA und 
SCL hängen leider immer bei 1,8 V - 2 V fest, sollten aber bei 5 V sein, 
sprich keine Veränderung wenn eine Kommunikation stattfindet. Weiter mit 
einem Osszi, die Signale sehen immer noch so mikrig aus.
Einzeln die Pins ausprobiert mit hoch und runterschalten die Flanken 
kommen, daraufhin verschiedene SoftwareI2C ausprobiert, die Flanken 
kommen aber keine Werte bzw. die I2C Devices reagieren nicht. Das OLED 
hatte ich davor noch an einem Arduino Nano programmiert und es 
funktioniert mit den selben Libs und Einstellungen.


Also zurück zu der Software, meine Vermuttung ist es, dass die 8MHz eine 
Rolle spielen oder irgendwelche Einstellungen falsch sind bzw. vergessen 
wurden.


Hatte jemand schon mal soein Projekt gemacht bzw. was/wo kann ich noch 
ansetzen um die Problemquelle zu finden. Hoffe ich habe nichts vergessen 
und jemand hätte noch einen Vorschlag was ich ausprobieren kann bzw. wo 
mein Denkfehler ist.

von K. S. (the_yrr)


Lesenswert?

vorweg: ich hab wenig bis keine Ahnung von der Arduino Umgebung.

m a k e r schrieb:
> Dann ging es an die Elektronik, erstmal mit einem Multimeter, SDA und
> SCL hängen leider immer bei 1,8 V - 2 V fest,
hast du es mal mit nur dem "Arduino" ohne OLED/SHT31 versucht?
mach mal Bilder vom Oszillogram, aber wenn du die Pins nicht zerschossen 
hast ist da irgendwo noch ein Fehler im Programm den ich so nicht sehe.

m a k e r schrieb:
> Dann habe ich angefangen die I2C Komponente anzusprechen,
ist die Adresse im 7 oder 8 Bit Format? und erwartet wire 7 oder 8 Bit?

m a k e r schrieb:
> mit unterschiedlichen i2c_scan probiert,
> da wurde nichts gefunden, hängt halt fest oder gibt einfach alle
> Adressen raus.
also doch eher hardware Problem?
versuch mal eventuell in einer Schleife die Pins nacheinander auf alle 
zustände zu setzen (low/high/input bzw. tristate) und miss nach, dann 
erkennst du falls ein Pin defekt ist oder es Probelme beim Aufbau gibt 
(Lötbrücken, Fehler im Layout ...)

was hast du denn? einen Mega8 wie im Bild oder einen Mega328 wie im 
Text?
hast du deiner Arduino Umgebung mitgeteil dass es sich um einen 
Mega8/328handelt der bei 8MHz läuft? hast du eventuell mal einen im 
Schaltplan und den anderen real vor dir, dann hast du vllt. völlig 
falsche Pins. Toggle mal PC4/5 und halt ne LED (+Widerstand) dran, ist 
das wirklich der richtige?

das "hängt bei 1.8-2V" ist entweder tristate (ohne Pullup) oder ein zu 
kleiner pullup und kommt nicht runter. hast du die Pins nicht 
ausversehen doppelt definiert?

m a k e r schrieb:
> Einzeln die Pins ausprobiert mit hoch und runterschalten die Flanken
> kommen, daraufhin verschiedene SoftwareI2C ausprobiert, die Flanken
> kommen aber keine Werte bzw. die I2C Devices reagieren nicht.
Bilder, bei Prosa kann man sich viel Vorstellen und nur wenig wirklich 
wissen.

: Bearbeitet durch User
von Anselm (Gast)


Lesenswert?

Hast du mal die I²C Module einzeln getestet?
Nicht dass du einen Hardwarefehler hast (z.B.: SDA/SCL bei einem 
vertauscht)

von Stefan F. (Gast)


Lesenswert?

m a k e r schrieb:
> SDA und SCL hängen leider immer bei 1,8 V - 2 V fest,
> sollten aber bei 5 V sein

Ich hoffe das hast du mit einem Oszilloskop gemessen, nicht mit einem 
Multimeter. Wenn dem so ist, dann liegt mit Sicherheit ein 
Hardwarefehler vor.

Denn weder der AVR, noch das Display ist dazu imstande, so einen 
Spannungspegel zu verursachen - bei korrekter Beschaltung, wohlgemerkt.

Der SSD1306 Controller verträgt am I²C maximal 3,6 Volt. Den hast du mit 
deinen 5V womöglich zerstört. Außerdem brauchen meine Displays mit 
diesem Chip ein externes Reset Signal.

von m a k e r (Gast)


Lesenswert?

Guten morgen alle zusammen, vielen Dank für die rege Diskussion und 
Tips.

K. S. schrieb:
> hast du es mal mit nur dem "Arduino" ohne OLED/SHT31 versucht?

Ich habe mich überwunden und das 2x2mm großen SHT31 von meiner Platine 
entlötet. Scheint wohl so zu sein das der Chip einige Probleme hat oder 
ich habe unsauber gelötet, hatte leider noch nicht so viel Glück mit den 
Sensoren von Sensirion.

Es funktionier alles, aber leider ohne SHT31, ich schaue mal ob ich es 
wieder anlöte oder vorerst so belasse.

Stefanus F. schrieb:
> Der SSD1306 Controller verträgt am I²C maximal 3,6 Volt. Den hast du mit
> deinen 5V womöglich zerstört. Außerdem brauchen meine Displays mit
> diesem Chip ein externes Reset Signal.

Hängt von der eingesetzten Variante ab, hatte ich leider nicht in der 
Beschreibung geschrieben, RST wird nicht unbedingt benötigt.

Anselm schrieb:
> Nicht dass du einen Hardwarefehler hast (z.B.: SDA/SCL bei einem
> vertauscht)

Ein häufiger Fehler, aber nach 1000x Prüfen war ich mit sicher das es 
hier nicht der Fall ist ))

K. S. schrieb:
> Toggle mal PC4/5 und halt ne LED (+Widerstand) dran, ist
> das wirklich der richtige?

Ich sehe hierbei keinen Mehrwert wenn ein Oszi zur Verfügung steht.

K. S. schrieb:
> was hast du denn? einen Mega8 wie im Bild oder einen Mega328 wie im
> Text?

Ist natürlich einwenig verwirend, aber die Bezeichnung war nicht von 
mir, pinout ist aber identisch

von K. S. (the_yrr)


Lesenswert?

Stefanus F. schrieb:
> Denn weder der AVR, noch das Display ist dazu imstande, so einen
> Spannungspegel zu verursachen - bei korrekter Beschaltung, wohlgemerkt.
ich hab mal vor lange zeit bei so einem Modul [1](Mega8 mit FM 
transmitter) einen ähnlichen Pegel gemessen (ich glaube eher richtung 
2-2.5V), da war etwas sehr falsch konfiguriert, später hats dann 
funktioniert, daher würd ich das nicht völlig ausschließen.

Stefanus F. schrieb:
> Ich hoffe das hast du mit einem Oszilloskop gemessen, nicht mit einem
> Multimeter.
steht doch oben, mit beidem.

aber es wäre mal gut nur den "Arduino" mit einem I2C Scanner Programm in 
Endlosschleife ohne Module (aber mit Pullup) zu testen und dann Bilder 
vom Oszillogramm hier hochladen.


m a k e r schrieb:
> Sobald ich anfange die
> Befehle zu senden hängt das Programm, es ist bekannt das in der Wire Lib
> eine while-Schleife gibt (Wire.endTransmision()) die unendlich auf ein
> ACK wartet, sprich da hängt es fest.
glaub ich nicht, entweder ein ACK oder NACK kommt im letzten Takt, der 
Mega wird den Clock Pegel als low und damit Clock stretching erkennen.



edit: ignorier das hier, kam gleichzeitig mit deinem letzten Post

[1] https://hackaday.com/2014/11/12/2-fm-transmitter-for-rasberry-pi/

: Bearbeitet durch User
von m a k e r (Gast)


Lesenswert?

So als update,

ich habe den SHT31 ersetzt und es funktioniert, also was es der Chip 
selber der die Probleme bereitet hat.

Danke nochmal an alle!!

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.