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.
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
Hast du mal die I²C Module einzeln getestet? Nicht dass du einen Hardwarefehler hast (z.B.: SDA/SCL bei einem vertauscht)
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.