OLED friert mit externer Spannungsversorgung ein

Hallo zusammen,

habe zur Zeit ein Problem mit meinem Infrarotthermometer. Ich betreibe das mit einem Nano. Die Daten werden per Infrarotsensor erfasst und auf dem OLED angezeigt. Im USB Betrieb läuft auch alles stabil. Sobald ich das mit einer 9V Batterie betreibe, friert das Display nach ca. 5 Messungen ein.

Das passiert auch mit einem externen Netzteil.

Im Anhang befindet sich der Code:

//Temperatur per Infrarotmessung. Datenausgabe per 0.96 inch OLED. Infrarotsensor : MLX90615. 
#include <MLX90615.h>
#include <I2cMaster.h>
#include <U8glib.h>
#include <Wire.h>

#define SDA_PIN A1   //define the SDA pin definierte I2C Pins da Sensor nur SMBus kann. Bezieht sich auf I2cMaster. Temp.Sensor
#define SCL_PIN A2   //define the SCL pin definierte I2C Pins da Sensor nur SMBus kann. Bezieht sich auf I2cMaster. Temp. Sensor

//beim Nano sind die PINS A4 und A5 I2C Pins. A4 = SDA A5 = SCL Pins für das Display!

SoftI2cMaster i2c(SDA_PIN, SCL_PIN);
MLX90615 mlx90615(0x5B, &i2c); //Infrarot Sensor mit Devide Adresse 
U8GLIB_SSD1306_128X64 u8g(0x7B);  // OLED Display mit entsprechender Device Adresse. Angeschlossen an I2C Pins 


void draw(void) { 

 u8g.setFont(u8g_font_unifont);
 u8g.setPrintPos(0, 20);  
 u8g.print("T_Obj:");  //gibt die gemessene Objekt Temperatur aus
 u8g.setFont(u8g_font_unifont);
 u8g.print(mlx90615.getTemperature(MLX90615_OBJECT_TEMPERATURE)); //Daten die vom Sensor abgegriffen werden für Objekt Temperatur
 u8g.print(" C");
 u8g.setFont(u8g_font_unifont);
 u8g.setPrintPos(0, 60); 
 u8g.print("T_Ab:"); //gibt die gemessene Umgegebungstemperatur an
 u8g.setFont(u8g_font_unifont);
 u8g.print(mlx90615.getTemperature(MLX90615_AMBIENT_TEMPERATURE)); //Daten die vom Sensor abgegriffen werden für die Umgebungstemperatur
 u8g.print(" C");
}

void setup() 
{
  Serial.begin(9600);
  Serial.println("Temperatur per Infrarot:"); //zusätzliches Anzeigen der Sensordaten auf dem Serial Monitor zwecks Überprüfung der Funktionalität

}

void loop()
{
 u8g.firstPage();  //Anzeigen der Daten auf OLED Display
do 
 draw();
while( u8g.nextPage() );
  Serial.print("T_Obj:"); //Ausgeben der Sensordaten auf Serial Monitor. 
  Serial.print(mlx90615.getTemperature(MLX90615_OBJECT_TEMPERATURE)); Serial.println(" C");
  Serial.print("T_Amb:");
  Serial.print(mlx90615.getTemperature(MLX90615_AMBIENT_TEMPERATURE)); Serial.println(" C");
  Serial.println();
  
  delay(1000); //jede Sekunde eine Messung
}

Mir scheint als würde die Spannung zusammen brechen. Daher meine Frage was man tun könnte? Kondensator für den I2C Bus? Bin da etwas überfragt.

Wwo hast du die 9 Volt angeschlossen ?
Zeige uns dein Schaltbild.

Recht hast du!

Hab vergessen zu erwähnen, wo die 9V angeschlossen sind. Da mein Spannungsregler von Vin Pin seinen Dienst quittiert hat, habe ich ein "Stromversorgungsmodul" aus meinem Elegoo Starter Kit genommen.
Da gibt es diesen Anschluss für diesen 9V Batterie Clip, einen USB Anschluss und mehrere 5V und 3.3 V Pins.

Schaltbild versuche ich gleich nachzureichen.

Das sieht wirklich nach einem Problem mit der Spannung aus.

Du solltest mal die Spannung am Arduino messen. Die 5 Volt und auch die 3,3 Volt.
An einer 9 Volt Batterie ist es immer problematisch. Die Spannung bricht da schnell zusammen.

Ja, hatte schon den 9V Block gemessen. Der liefert bereits nur noch ca. 8,4 V. Also voll ist der nicht. Wobei das Ganze mit dem Mega gut ging. War etwas überrascht, dass das Display einfach einfriert. Könnte ich auf dem I2C Bus Kondensatoren setzen um dieses Wegbrechen der Spannung zu kompensieren?

HarryKane:
Ja, hatte schon den 9V Block gemessen. Der liefert bereits nur noch ca. 8,4 V. Also voll ist der nicht. Wobei das Ganze mit dem Mega gut ging. War etwas überrascht, dass das Display einfach einfriert. Könnte ich auf dem I2C Bus Kondensatoren setzen um dieses Wegbrechen der Spannung zu kompensieren?

Nein, keine Kondensatoren am I2C-Datenbus. Damit wird dieser "blockiert" und funktioniert evtl. nicht mehr.

Die 8,4 Volt sind uninteressant, was machen die 5 Volt ?
Ein 9 Volt Block hat zu wendig Kapazität um damit einen längeren Betrieb zu erreichen.

Also Schaltbild zeigen und Spannung messen !

HarryKane:
Ja, hatte schon den 9V Block gemessen. Der liefert bereits nur noch ca. 8,4 V. Also voll ist der nicht. Wobei das Ganze mit dem Mega gut ging. War etwas überrascht, dass das Display einfach einfriert.

Könnte ich auf dem I2C Bus Kondensatoren setzen um dieses Wegbrechen der Spannung zu kompensieren?

Willst Du den I2C Bus sicher blockieren??

Miß wie gebeten die 5V und 3,3V.
Grüße Uwe

Friert nur das Display oder der Controller ein? Hab es mal beim letzten Projekt beobachten können, dass sich der Controller nach ein paar Zyklen aufhängt, wenn er Daten über die serielle Schnittstelle ausgibt, aber keine Konsole geöffnet ist. (also quasi wenn ich die USB-Verbindung getrennt und eine externe Versorgung genutzt habe)
Seitdem setze ich alles, was mit Serial zu tun hat zwischen #ifdef DEBUG und #endif.... brauche ich die Konsole kommt am Anfang #define DEBUG hin, ansonsten wird es auskommentiert

Also ich habe mal alles durchgemessen. Soweit sind 5V und 3,3 V auch vorhanden. Es friert nur das Display ein, aber das werde ich mal ausprobieren.
Ich schmeiße den Serial.print aus dem Code raus.

Teste doch mal ohne das "OLED-Display" und lass dir die Daten auf dem seriellen Monitor anzeigen.
Ob er da auch hängen bleibt.

Mit dem seriellen Ausgaben habe ich bisher noch nie Probleme gehabt, schon garnicht bei diesen langsamen Vorgängen.
Du muss dazu alles, was mit der "normalen" I2C-Schnittstelle zu tun hat auskommentieren.

So friert er nicht ein. Es scheint als würde nur das Display einfrieren. Ich habe mal mit fritzing den Schaltplan erstellt. Befindet sich im Anhang. (Bevor ihr den zerreißt, ich bin auf diesem Gebiet noch Anfänger; als Maschinenbauer habe ich mich lange der Elektronik mehr oder weniger verwehrt :D)

Kurze Erklärung dazu:

Die 9V Batterie versorgt dieses "Stromversorgungsmodul" (leider kein passendes gefunden, kommt diesem aber sehr nahe). Dieses Modul versorgt den Nano, das OLED und den Sensor jeweils mit 5V. GND greife ich da ebenfalls ab. OLED und Sensor sind gemäß Code mit dem Nano verbunden. Beim OLED benutze ich Jumper Kabel. Den Sensor habe ich mit Schaltdrähten (0,5 mm²) verdrahtet (nicht länger als 80 cm).

Wenn ich die Batterie abklemme und den Nano direkt mit dem USB vom Laptop verbinde, funktioniert alles.
Benutze ich die Batterie oder ein Netzteil (angeklemmt am Batterieclip) friert das Display ein.

HarryKane:
So friert er nicht ein. Es scheint als würde nur das Display einfrieren. Ich habe mal mit fritzing den Schaltplan erstellt.

Bei welchem Versuch ?
Ok, da kann ich keinen Fehler erkennen.

Wenn ich die Batterie abklemme und den Nano direkt mit dem USB vom Laptop verbinde, funktioniert alles.
Benutze ich die Batterie oder ein Netzteil (angeklemmt am Batterieclip) friert das Display ein.

Zeige mal einen Link deines OLED, es gibt da welche, die nur mit 3,3 Volt betrieben werden dürfen.

Evtl. Wird ja auch der Spannungsregler schon heiß.

Es ist ein China OLED von der "Firma Heltec". Ich finde noch nicht mal ein Datenblatt im Internet. Mich wundert es nur, warum es im USB Betrieb nicht einfriert und nur mit der externen Versorgung. OK die Spannung bricht wahrscheinlich ein, aber wieso..... :-\

HarryKane:
Es ist ein China OLED von der "Firma Heltec". Ich finde noch nicht mal ein Datenblatt im Internet. Mich wundert es nur, warum es im USB Betrieb nicht einfriert und nur mit der externen Versorgung. OK die Spannung bricht wahrscheinlich ein, aber wieso..... :-\

Du hast doch bestimmt noch einen Link vom Kauf.

Ohne weitere Daten ist das nur Spekulation.

Bei USB ist die Spannung niedriger, da könnte ein 3,3 Volt Display gerade noch funktionieren.
Aber wie gesagt, Spekulation.

Hab es bei Amazon gekauft. https://www.amazon.de/gp/product/B00NHKM1C0/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1
Auch für weniger als 4 Euro ;-).

Dein Verdacht mit den 3,3 V war nicht verkehrt. Jetzt dauert es schon länger bis das Display einfriert :-D.
Hab mal gefühlt soweit wird nix heiß ect. Hab es nochmal mit dem externen Netzteil (konstante Spannung) versucht, es friert genauso ein.

BTW:

Vielen Dank fürs Zeit nehmen und helfen.

UPDATE:

Gerade nochmal quer gemessen. USB Betrieb zu Batterieversorgung: 3,3 V sind bei beiden Varianten identisch. Nur aus 5V bei Batterieversorgung werden beim USB Betrieb 4,7 V. Das ist der einzige Unterschied.

So hier gibt es was neues. Ich habe den Fehler nicht ganz gefunden, kann ihn aber umgehen. Dieses Stromversorgungsmodul hat einen USB Anschluss für "externe" Geräte. War am Anfang der Meinung, dass das ebenfalls für Spannungsversorgung ist (ähnlich wie der Batterieanschluss). Hab mir aber ein Datenblatt besorgt, wo es anders drin steht.

Lange Rede, kurzer Sinn:

Hab einfach mal das +5V Kabel entfernt und den Nano per USB Kabel mit dem Modul verbunden. Siehe da es funktioniert besser. Ab und zu kommen die Daten etwas verzögert, aber es friert nicht mehr ein.

Überlege ob ich nicht einen neuen Nano nehme und die 9V direkt daran anschließe. Anschließend würde das Modul komplett rausfliegen. Ich glaube, dass da der Fehler liegt.

HarryKane:
Überlege ob ich nicht einen neuen Nano nehme und die 9V direkt daran anschließe. Anschließend würde das Modul komplett rausfliegen. Ich glaube, dass da der Fehler liegt.

Gut dass es funktioniert und mit dem neuen Nano macht auf jeden Fall Sinn.