PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino startet nicht an externer Spannungsquelle



VolkerB
13.12.2017, 16:23
Hallo Forum,

ich bin neu hier und möchte ein wenig von euch lernen und später auch meine Kenntnisse weitergeben.

Ich habe bereits einige kleinere Programme mit C++ geschrieben/modifiziert und habe aktuell einen Arduino Pro Mini in der 3,3V-Version als Entwicklungssystem in Betrieb.

Zur Zeit arbeite ich an einem kleinen Programm, welches aus einer Echtzeituhr DS3231 Zeit und Datum ausliest und auf einem OLED SSD1306 zur Anzeige bringt.
Zusätzlich wird auch noch die Temperatur aus einem Temperatursensor DS18B20 ausgelesen und angezeigt.

Bisher funktioniert auch alles zu meiner Zufriedenheit, allerdings nur wenn ich den Arduino über eine FTDI-Schnittstelle am PC hängen habe.

1. Ich lade mein Programm mittels IDE über die FTDI-Schnittstelle in den Arduino, das Programm beginnt sofort zu starten und die OLED-Anzeige zeigt mir sinnvolle Werte.

2. Wenn ich jetzt den Strom unterbreche (FTDI-Modul oder USB-Kabel abziehe), und die Verbindung wieder herstelle, beginnt das Programm erneut zu laufen, soweit ok.

3. Versorge ich jetzt den Arduino nicht über den PC sondern aus einem USB-Steckernetzteil oder auch über den RAW-Eingang mit Spannung (5V), startet das Programm nicht.
Erst ein Druck auf den RESET-Button bringt dann Erfolg. Aber so sollte es ja nicht sein.

Ich habe zu dem Thema schon sehr viel im Internet gelesen, ich bin da offensichtlich nicht allein, habe auch schon viel ausprobiert. Leider habe ich immer noch keine Lösung für das Problem.

Vielleicht finde ich hier jemanden der mir helfen kann?

Gruß Volker

oberallgeier
13.12.2017, 17:29
Hallo Volker,

willkommen im Forum.


.. Arduino Pro Mini .. 3,3V.. mit Spannung (5V), startet das Programm nicht. Erst ein Druck auf den RESET-Button bringt dann Erfolg ..Woher weißt Du dass das Programm nicht startet? Woran ist das eindeutig zu erkennen?


.. das Programm beginnt sofort zu starten und die OLED-Anzeige zeigt mir sinnvolle Werte ..Bin ich richtig wenn ich jetzt sage: Du schaltest nach Punkt 3. die Spannung von Netzteil oder so auf den arduino und das OLED bringt keine Anzeige ? Daher meinst Du, dass das Programm nicht läuft?

Oder gibt es andere Diagnosen?

Ich glaube (!) ich hatte etwas Ähnliches festgestellt als ich mit einem nanoClone (328er mit 20 MHz) ein OLED1306 angesteuert hatte. Behoben hatte ich das damals (glaub ich . . . ist halt nicht dokumentiert) durch ne lange Startzeit des Controllers : Fuse SUT_CKSEL auf Ext. Crystal Osc. 8.0- MHz; Start-up time PWRDWN/RESET: 16K CK/14CK + 65 ms. Grund war offenbar ein schneller Start des Controllers - der ans OLED die Startinitialisierung gesendet hatte, bevor das überhaupt ready war.

1) Zum Erkennen des Programmstarts durch einen echten RESET habe ich praktisch immer zu Startbeginn nach der Portinitialisierung, vor allen andern Initialisierungen, eine LED auf Blinklicht - meist 10 x (3 ms an, 97 ms aus). Danach läuft das "normale" Programm.

VolkerB
13.12.2017, 18:21
Ich erkenne das das Programm nicht startet daran, das das Display eben dunkel bleibt und nichts weiter passiert.
Ich kann da gerne noch mal eine Diode blinken lassen um das abzusichern.

Ok, mit den Fuse- Bits habe ich mich auch schon beschäftigt, die sind aber beim Arduino schon initial so vorbelegt, das der Start langsam ist (14CK + 65ms).
Ich wüsste auch nicht wie ich die mit meinen Mitteln umprogrammieren könnte.

Ich verstehe eben auch nicht warum das am PC funktioniert und am separaten Netzteil eben nicht.

Ich werde die Diode mal einbauen um zu beweisen das wirklich nichts läuft und nicht nur das Display dunkel bleibt. Das wird aber jetzt ein paar Tage dauern, da ich ab morgen 3 Tage unterwegs bin.

Gruß Volker

oberallgeier
13.12.2017, 18:31
Ich erkenne das das Programm nicht startet daran, das das Display eben dunkel bleibt und nichts weiter passiert ..Als erste Hilfe wäre es ja noch möglich gleich zum Programmanfang mal ein simples Delay von einer Sekunde einzprogrammieren und erst danach das Display zu initialisieren. Dann sollte man ziemlich sicher sein, dass "alles" bereit ist zu arbeiten *gg*.

Mein Blink-Krückstock ist eher als Allzweckwaffe für unsauber arbeitende Programmierer oder Tester gedacht. Jeder nicht abgefangene Interrupt zeigt sich so, ebenso auch jeder noch so kleinste Spannungseinbruch - weil hier jedes Programm beim Start vorbei muss. Und was kommt nach nem Reset? GEnau - ein Start. Der Code ist ziemlich simpel, mein main fängt so an (ok, ich weiß, dass das NICHT arduino-language ist).


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
int main(void)
{ //
uint8_t i; //
// - - - - - - - - - - - - - - -
// Ports: A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp, siehe oben
// DDRx: als Ein- (0) oder Ausgänge (1) konfigurieren, Pins/Pull Ups (1) aktiv
// PORTx: Eingänge: Pullup = 1; Ausgaenge: low = 0, high = 1
DDRB = 0b00100111; // Mot1/2: PB1 = OC1A-MotorPWM; PB2 = OC1B-MotorPWM
PORTB = 0b11011000; // PB5 - onBoard-rtLED
//
DDRC = 0b01101111; // PC6+7-Pin NUR bei babyorangutan (TQFP+MLF)
PORTC = 0b10100000; // PC0=LHeart/~beat, PC1=GND, PC2=LEDTst
// PC3=GND, PC4-ADC/Srv-Poti ohne Pullup, PC5=VccPoti!!
//
// PD5/PD6 = M1B/M1A, PD7 = Taste: PullUP !
DDRD = 0b01100010; // RX/TX-PD0/1, PD2 = INT0-Servopuls,
PORTD = 0b10010101; // Pull Ups aktivieren, mit pololuMot AUCH bei INT0/~1
//
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
for(i=0; i<10; i++) // LEDs blinken bevor Interrupts erlaubt sind ==> um
{ // ungewollte Resets u.ä. besser erkennen zu können
// ###>>> HeartbeatLEDs schalten Aode -<|- Portpin <<<###
SetBit(PCLED, LHeart); // gnLED/PC1 EIN, HELL << ist (m)ein Macro
SetBit(PORTB, PB5); // gnLED/PB EIN, HELL
wms(3); // << ein simples wait Millisekunden
ClrBit(PCLED, LHeart); // LED aus
ClrBit(PORTB, PB5); //
wms(97); //
SetBit(PCLED, LEDTst); // rtLED/PC6 EIN, HELL
SetBit(PDLED, LDr); // rtLED auf PD1, babyo-spezifisch = onBoard + TX !!
wms(3); //
ClrBit(PCLED, LEDTst); // LED aus
ClrBit(PDLED, LDr); // LED aus
wms(97); //
} // Ende von for(i=0; i<nn; i++)
ClrBit(PDLED, LDr); // rtLED auf JEDEN Fall aus
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ##>> JETZT werden die Timer-/Zeit-Größen gesetzt, siehe Header ~tmr~.h

HaWe
13.12.2017, 21:01
Ich erkenne das das Programm nicht startet daran, das das Display eben dunkel bleibt und nichts weiter passiert.
Ich kann da gerne noch mal eine Diode blinken lassen um das abzusichern.

Ok, mit den Fuse- Bits habe ich mich auch schon beschäftigt, die sind aber beim Arduino schon initial so vorbelegt, das der Start langsam ist (14CK + 65ms).
Ich wüsste auch nicht wie ich die mit meinen Mitteln umprogrammieren könnte.

Ich verstehe eben auch nicht warum das am PC funktioniert und am separaten Netzteil eben nicht.

Ich werde die Diode mal einbauen um zu beweisen das wirklich nichts läuft und nicht nur das Display dunkel bleibt. Das wird aber jetzt ein paar Tage dauern, da ich ab morgen 3 Tage unterwegs bin.

Gruß Volker

Mit fuse-bits hast du bei Arduino nichts am Hut, sowas kann nur von nicht-Arduinorianern kommen... ;)

kontrolliere doch einfach mal den Programmablauf per Serial.println(), womit du alle setup()-inits und dann in der loop() auch alle OLED-Anzeigen zusätzlich seriell ausgibst, zum Nachverfolgen!

- - - Aktualisiert - - -

edit -
Denkfehler: ich übersah. dass es ja angeschlossen am PC IMMER funktioniert, also NIE ein Startfehler - dann geht es ntl nicht mit Serial

Hubert.G
14.12.2017, 09:59
Der Unterschied beim Starten des Programms ist der, das nach dem Programm laden, die Stromversorgung schon vorhanden ist und das Display damit schon genug Zeit hatte Startbereit zu sein.
Beim Anstecken der Stromversorgung, auf RAW sollten es zumindest 7V sein, läuft der Arduino schon bei Erreichen der in den Fuses eingestellten 2,7V los, das OLED etwas später und möglicherweise auch etwas langsamer.

Einfache Abhilfe schafft hier das von Oberallgeier genannte Blinken oder ein einfaches "delay(100);" im setup.

HaWe
14.12.2017, 10:19
Der Unterschied beim Starten des Programms ist der, das nach dem Programm laden, die Stromversorgung schon vorhanden ist und das Display damit schon genug Zeit hatte Startbereit zu sein.
Beim Anstecken der Stromversorgung, auf RAW sollten es zumindest 7V sein, läuft der Arduino schon bei Erreichen der in den Fuses eingestellten 2,7V los, das OLED etwas später und möglicherweise auch etwas langsamer.
nicht ganz, der OP schreibt ja:

2. Wenn ich jetzt den Strom unterbreche (FTDI-Modul oder USB-Kabel abziehe), und die Verbindung wieder herstelle, beginnt das Programm erneut zu laufen, soweit ok.

3. Versorge ich jetzt den Arduino nicht über den PC sondern aus einem USB-Steckernetzteil oder auch über den RAW-Eingang mit Spannung (5V), startet das Programm nicht..
also per USB/PC geht es nach ab- und anstecken,
aber per USB/Adapter geht es nicht.

die +5V Buchse am Arduino ist identisch mit der stabilisierten 5V Spannung, die der interne Arduino-Adapter liefert, also auch kein Unterschied zu USB+5V, also braucht man da auch keine 7V - wobei ich da auch nicht weiß, wo und wie "RAW-Eingang" definiert ist (der Pin, der mit dem Netzteil-Stecker identisch ist, heißt normalerweise Vin, nicht RAW).

Hubert.G
14.12.2017, 11:46
nicht ganz, der OP schreibt ja:


also per USB/PC geht n es ach ab- und anstecken,
aber per USB/Adapter geht es nicht.

die +5V Buchse am Arduino ist identisch mit der stabilisierten 5V Spannung, die der interne Arduino-Adapter liefert, also auch kein Unterschied zu USB+5V, also braucht man da auch keine 7V - wobei ich da auch nicht weiß, wo und wie "RAW-Eingang" definiert ist (der Pin, der mit dem Netzteil-Stecker identisch ist, heißt normalerweise Vin, nicht RAW).

s
Ich bin trotzdem der Meinung das es mit der Stromversorgung zusammenhängt.
Hatte selbst schon mal so ein ähnliches Problem das mit einem delay behoben war.
RAW ist der Spannungseingang bis 12V, geht intern auf den Spannungsregler. Vin wäre der 5V Eingang/Ausgang.

HaWe
14.12.2017, 13:12
s
Ich bin trotzdem der Meinung das es mit der Stromversorgung zusammenhängt.
...
Vin wäre der 5V Eingang/Ausgang.


das stimmt so nicht, Vin ist das was man per Cinch Stecker anschließt, also an den Spannungswandler:


VIN: This should be above 6.2V (since the dropout voltage is 1.2V) and preferably between 9V and 12V.


VIN is the completely unaltered input power before the regulator (it will be useless if regulated 5v is supplied directly).

Vin is the voltage powering the arduino. If you hook it up to a 12V power supply the Vin pin will be 12V.
5V is the 5V power coming from the onboard regulator. If you hook up the arduino to a 12V power supply this pin will still be 5V.
If you're using a regulated 5V power supply they're interchangeable, though from my understanding you can use the 5V pin if you want a bit of overvoltage protection or the Vin pin if you need a bit more power (where you're limited by the current limit of the traces, not by the regulator).
It's important to note that both pins are not outputs - you can put power through them as well.

"RAW" hingegen ist eine Bezeichnung, die Arduino.cc nirgends anführt.

Hubert.G
14.12.2017, 13:28
Das mit Vin war mein Fehler. Der 5V Eingang/Ausgang ist mit 5V gekennzeichnet.
RAW ist eine Bezeichnung die auf einem Pro-Mini steht, ist gleichzusetzten mit Vin. Vielleicht gibt es die Bezeichnung auch nur auf einem Klone.

Rabenauge
14.12.2017, 19:21
Nö.
Den RAW-Eingang haben die Originale (https://store.arduino.cc/arduino-pro-mini) auch.
Ist auch dokumentiert.

HaWe
14.12.2017, 21:45
Nö.
Den RAW-Eingang haben die Originale (https://store.arduino.cc/arduino-pro-mini) auch.
Ist auch dokumentiert.

stimmt, hast recht, sehe ich jetzt auf diesem Board zum ersten Mal.

damfino
16.12.2017, 14:08
Ich hatte bei meinem Arduino das Problem das der eingebaute Spannungsregler viel zu schwach ist. Mit Display dran überhitzt der und regelt die Leistung zurück.
Abhilfe war ein DCDC Wandler und direkt auf 5V.
Am PC/Laptop ging es auch weil dort entgegen der Spezifikation mehr als 500mA geliefert wurden.

Möglichkeit 2: blöde Library fürs Display, wenn es die UTFT von Henning Carlson ist, die sehr oft exakt so ein Fehler verursacht, da hätte ich einen Tipp dafür. Bzw der Tipp ist unter Sainsmart TFT gepostet.

oberallgeier
16.12.2017, 16:22
.. und auf einem OLED SSD1306 zur Anzeige bringt ..
.. Problem das der eingebaute Spannungsregler viel zu schwach ist. Mit Display dran überhitzt der und regelt die Leistung zurück ..Habs grad an (m)einem 1306 gemessen (nanoClone, 20 MHz, I²C: SCL_CLOCK 400000L):
Keine Anzeige ("Nicht"Start trotz Initialisierung) : . . . . . . . . .. . . . . . . . .1,15 mA
Wenig Anzeige (Uhrgrafik analog und acht Buchstaben) weiß auf schwarz: 22,94 mA
Wenig Anzeige (Uhrgrafik analog und acht Buchstaben) schwarz auf weiß: 21,83 mA

@damfino: welches Display war das denn bei Dir ? Wieviel Power zieht Dein Display?

damfino
16.12.2017, 16:56
War ein 3.2" TFT am Arduino Mega. Je nach Eingangsspannung stieg der Regler ab 120mA aus. Die angebenenen 500mA erreicht man nur bei ca 6.5V Eingangsspannung. Darunter geht er nicht, darüber wird er zu heiss.
Es ist auch mehr als nur Display angeschlossen

HaWe
16.12.2017, 17:11
War ein 3.2" TFT am Arduino Mega. Je nach Eingangsspannung stieg der Regler ab 120mA aus. Die angebenenen 500mA erreicht man nur bei ca 6.5V Eingangsspannung. Darunter geht er nicht, darüber wird er zu heiss.
Es ist auch mehr als nur Display angeschlossen

In der Tat machen viele ILI9225 oder ILI9341 etc solche Probleme, allerdings sind es meist SPI Geräte, nicht I2C wie beim OP.
Auch die Libs von Henning Karlsen sind (Software-) SPI-Libs.
Vermutlich hilft dann dieser Tipp mit dem TFT nicht sehr viel weiter.

Der OP hingegen hat wohl ein i2c OLED, das hat normalerweise noch nicht einmal einen Reset-Pin. Es wäre in der Tat interessant, welche Lib er benutzt, oftmals werden die von Adafruit verwendet (verwende ich auch am ESP8266 und am Nano, dort hatte ich aber nie solche Start-Probleme beobachten können).

@VolkerB: welche OLED-Lib benutzt du? Und wieviel mA liefern dein Netzgerät bzw. dein USB Steckernetzteil?

oberallgeier
16.12.2017, 17:23
War ein 3.2" TFT am Arduino Mega .. Die angebenenen 500mA erreicht man nur bei ca 6.5V Eingangsspannung ..Da grins ich mich eins. Mein nanoClone war an 6,50 V (Netzteilanzeige) angeschlossen, das OLED am 3,3V-Pinn des nanos. Weniger als 6,5 V Eingang hatte ich schon mal geprüft - ab 6,4V sinkt am 5V-Ausgang dieses nanos die Spannung (bei andern auch).

VolkerB
19.12.2017, 13:38
So ihr Lieben,
hat leider etwas länger gedauert mit meiner Auszeit, aber jetzt bin ich wieder auf dem Damm.

Habe jetzt mal auf die Schnelle den Tip von oberallgeier ausprobiert (Delay (1000) am Beginn des Setup).
Was soll ich noch groß herumreden: Volltreffer, es läuft ::Weihnacht

Herzlichen Dank an oberallgeier und natürlich auch an alle anderen die sich an der Diskussion beteiligt haben für ihre Ideen.

Frohe Festtage an Alle!

Gruß Volker