Forum: Mikrocontroller und Digitale Elektronik Arduino Pro Mini: Analog-Referenz 1,1V verschiebt sich bei kleiner Last?


von Andreas F. (solipo)


Lesenswert?

Hallo,

bin inzwischen schon recht weit gekommen mit meinem ersten Projektchen, 
aber jetzt hänge ich an einem blöden Problem mit der analogen 
Spannungsmessung.

Ich messe mit dem Arduino eine Bleiakku-Spannung und mittle einige 
Messwerte nacheinander. Habe die interne Referenz auf 1,1V gesetzt und 
den Spannungsteiler entsprechend ausgelegt (33k und 2k), sodass mir auch 
in etwa die korrekte Spannung am angeschlossenen Display ausgegeben 
wird. Die ganze Breadboard-Geschichte hängt per USB am PC und mein 
Messgerät zeigt mir 4,5V auf dem Board an. So weit, so gut.

Das Problem ist allerdings, dass die gemessene Spannung deutlich 
ansteigt (um 1-2V), wenn ich 3 LEDs über 3 Digitalports nacheinander 
einschalte. Man sieht dann auch, dass die USB-Spannung nachgibt auf 
4,3V.

Nun ging ich nach all den Infos, die ich fand, eigentlich davon aus, 
dass die internen 1,1V im Gegensatz zur Versorgung des Arduino stabil 
sind, wenngleich sie natürlich nicht exakt sind, aber das gleiche ich 
mit einem Offset aus. Doch scheinbar sind die 1,1V eben doch nicht 
stabil.

Oder ich habe einen Denkfehler/Schaltfehler gemacht? Dann allerdings 
dürfte das Teil gar nichts richtig messen, oder? Hat jemand ähnliche 
Erfahrungen gemacht und ich muss damit jetzt leben?

Das Problem ist auch, dass der Pro Mini kein AREF hat, falls damit das 
Problem gelöst werden könnte. Bin total ratlos nach stundenlangem 
Experimentieren.

Vielen Dank für einen Tipp.

von Uwe S. (de0508)


Lesenswert?

Andreas,

es fehlt dein Programm und der Schaltplan dazu ?

von Uwe S. (de0508)


Lesenswert?

Hallo,

ich finde z.B. zwei Schaltpläne, die sich mit deiner Beschreibung nicht 
decken !

# 
https://cdn.sparkfun.com/datasheets/Dev/Arduino/Boards/Arduino-Pro-Mini-v14.pdf

# http://arduino.cc/en/uploads/Main/Arduino-Pro-Mini-schematic.pdf

von Andreas F. (solipo)


Lesenswert?

Ich hab dazu leider keinen Schaltplan, weil es in dem Fall lediglich um 
einen einfachen Spannungsteiler am analogen Eingang geht. Das 
angeschlossene Display und die LEDs kann man sich doch auch so 
vorstellen und sind für das Problem irrelevant, weil ich dieselben Daten 
auch seriell auslese.

Dasselbe gilt für den Code. Pin auslesen und anzeigen, fertig. Braucht 
man nicht meinen ganzen langen Code.

Es geht lediglich um das Phänomen, dass die 1,1V offenbar einbrechen, 
wenn der Mini Pro 1 bis 3 LEDs speisen muss. Falls das jemand schon mal 
beobachtet hat, weiß ich schon mal, dass ich sonst nichts falsch gemacht 
habe.

Wenn ich statt den 1,1V die Default-Referenz verwende, ist das Verhalten 
fast identisch, aber das ist in dem Fall noch irgendwie logisch, weil 
die 4,5V ja durch die LEDs sinken und mein USB nicht viel leistet.

von Uwe S. (de0508)


Lesenswert?

Hallo Andreas,

ich bin dann raus.

Aber noch eine Anmerkung zu USB, 0,5A sollte ein Host schon leisten 
können.
Wie wird dein USB HOST initialisiert ?

von Hubert G. (hubertg)


Lesenswert?

Andreas F. schrieb:
> Das Problem ist auch, dass der Pro Mini kein AREF hat, falls damit das
> Problem gelöst werden könnte.

Laut Schaltplan ist der AREF über 100n nach GND geschaltet, wie im 
Datenblatt vorgesehen.
LEDs über Vorwiderstand angeschaltet?

von Andreas F. (solipo)


Lesenswert?

> ich bin dann raus.

Sorry, ich hab keine Zeit, stundenlang Bilder zu malen.


> Aber noch eine Anmerkung zu USB, 0,5A sollte ein Host schon leisten
> können.
> Wie wird dein USB HOST initialisiert ?

Was meinst Du damit?

von Andreas F. (solipo)


Lesenswert?

> Laut Schaltplan ist der AREF über 100n nach GND geschaltet, wie im
> Datenblatt vorgesehen.

Hab ich von einem Bekannten eben schon erfahren. Aber hey, da mit dem 
Lötkolben ran? Vielleicht an den Kondensator direkt. Aber die Frage ist, 
bevor ich die Platine dabei schrotte: Löst das mein Problem? Ist das mit 
den 1,1V normal, dass die instabil sind?


> LEDs über Vorwiderstand angeschaltet?

Natürlich.

Habe eben noch einen 1mF auf das Board geklemmt in die 5V rein und jetzt 
steigt die gemessene Spannung bei 3 LEDs "nur" noch um 0,6V. Das ist 
dennoch Murks.

von Mike J. (linuxmint_user)


Lesenswert?

Die 1.1V sind zwar nicht genau, aber extrem konstant, auch über einen 
sehr weiten Temperaturbereich.

Du wirst die Referenzspannung wahrscheinlich belasten, vielleicht mit 
einem Poti oder so, das Problem ist nur dass die interne Spannungsquelle 
nur extrem geringe Ströme liefern kann.

Die da die 1.1V jetzt auf vielleicht 1V zusammenbricht wird nicht mehr 
der richtige Wert berechnet, sondern ein höherer da der ADC einen 
höheren Wert ausgibt.

von Uwe S. (de0508)


Lesenswert?

Hallo,

es wird vielleicht an der fehlerhaften Programmierung um den ADC liegen.

Oder ?

Auch bei mir läuft die interne Bandgrapreference mit 1,1V oder 2,56V 
stabil.

von Andreas F. (solipo)


Lesenswert?

Das mit dem "konstant" dachte ich eben auch. Aber kann es sein, dass 3 
LEDs den Chip so stark belasten, dass er dementsprechend nachgibt? Ich 
will schlussendlich die LEDs eh durch Mosfets ersetzen, dann müsste das 
ja einigermaßen stabil bleiben, aber das hat mich jetzt doch enttäuscht.

Was meinst Du mit Referenzspannung mit Poti belasten? Die 5V vom USB? Da 
sind nur der Mini Pro mit USB-Adapter, ein LCD 16x2 und eben die 3 LEDs 
dran. Offenbar ist der USB-Port am Rechner ziemlich schwächlich.

von Andreas F. (solipo)


Lesenswert?

> es wird vielleicht an der fehlerhaften Programmierung um den ADC liegen.
>
> Oder ?

Inwiefern kann man denn bei analogRead() was fehlerhaft programmieren?

variable = analogRead(pin);

Krieg ich grad noch so hin.


> Auch bei mir läuft die interne Bandgrapreference mit 1,1V oder 2,56V
> stabil.

Was für ein Gerät und was ist an den Ports angeschlossen?

von Uwe S. (de0508)


Lesenswert?

Tag,

Wie wird der ADC initialisiert?

Clock Mode, Trigger Mode, Denoiser-ISR Betrieb, ADC Referenzspannung ?

Es ist schon schade diese Bruchstücke zu sehen - zeige den gesamten Code 
bitte !

von Hubert G. (hubertg)


Lesenswert?

Andreas F. schrieb:
> Inwiefern kann man denn bei analogRead() was fehlerhaft programmieren?
>
> variable = analogRead(pin);
>
> Krieg ich grad noch so hin.

Wo hast du auf interne Referenz 1,1V gestellt?

von Andreas F. (solipo)


Lesenswert?

> Wo hast du auf interne Referenz 1,1V gestellt?

In setup():

analogReference(INTERNAL);

von Uwe S. (de0508)


Angehängte Dateien:

Lesenswert?

Hallo,

zu deiner anderen Frage, ich entwickele meine Schaltungen, 
Platinenlayouts und Programme selbst.

Z.B. hier eine HF-Leistungsmesser (mW Powermeter) mit AD307.

# eine Messung: Mittelwertbildung über 32 Messwerte
# Anzeige eines Messergebnis alle 250ms: IIR Filter über 16 Messungen.
# Ein ADC-Messwert wird durch einen 2 Punkt Spannungsabgleich 
realisiert.

Die Leistungsmessung wir auch über einen 2 Punkt Leistungsabgleich bei 
0dBm und -60dBm gebildet. Der AD8307 hat eine Steigung von ca. 25mV/ pro 
dBm.

Die gesamte Kommunikation erfolgt seriell über einen USB-TTL-Wandler im 
Vollduplexmodus mit TX- und RX-FiFo.
So kann ich Remote eine Konfiguration des Moduls durchführen.

Firwareupdates erfolgen über einen Bootloader (Fastboot 2.9 von Peter 
Dannegger). Dieser ist sehr klein und schnell.

: Bearbeitet durch User
von Schlumpf (Gast)


Lesenswert?

Leute, wieso fragt ihr denn noch, was eventuell faul sein könnte?
Andreas hat keine Zeit (wörtlich), um alle Details rauszulassen und 
schließt, so klingt es jedenfalls, einen Fehler seinerseits aus.

Er will doch hier einfach nur die Bestätigung, dass die Bandgap auf dem 
Silizium Schrott ist.
Alle anderen Fehlerquellen sind ja bereits von ihm ausgeschlossen 
worden.

von Hubert G. (hubertg)


Lesenswert?

Andreas F. schrieb:
> In setup():
>
> analogReference(INTERNAL);

Versuche es mal mit:
analogReference(INTERNAL1V1);

von Andreas F. (solipo)


Lesenswert?

> Versuche es mal mit:
> analogReference(INTERNAL1V1);

Das gilt nur im Mega. Beim Pro Mini geht das nicht laut Doku.

von Uwe S. (de0508)


Lesenswert?

Danke,

bezogen auf das AVR Register ADMUX

könnte die Anweisung *analogReference(INTERNAL)* bedeuten,
dass in ADMUX die Bits REFS1 und REFS0 setzt.

Also in C:
1
ADMUX |= (1<<REFS1) | (1<<REFS0);

Bitte überprüfe das mal im Assembler Listing.

Andreas F. schrieb:
>> Wo hast du auf interne Referenz 1,1V gestellt?
>
> In setup():
>
> analogReference(INTERNAL);

Wie hoch ist der Strom durch die LED, bitte komplett mit Berechnung 
angeben.

von Andreas F. (solipo)


Lesenswert?

> Wie wird der ADC initialisiert?
>
> Clock Mode, Trigger Mode, Denoiser-ISR Betrieb, ADC Referenzspannung ?

Siehe oben.


> Es ist schon schade diese Bruchstücke zu sehen - zeige den gesamten Code
> bitte !

Bitte um Verständnis, ich poste hier nicht 400 Zeilen Code, von denen 
390 nichts mit der Frage zu tun haben.

von chris (Gast)


Lesenswert?

Andreas F. schrieb:
> Bitte um Verständnis, ich poste hier nicht 400 Zeilen Code, von denen
> 390 nichts mit der Frage zu tun haben.

gut dann schreib doch mal an Atmel.
Vielleicht können die deinen Chip untersuchen - muss ja ein 
Fertigungsfehler sein.

von Andreas F. (solipo)


Lesenswert?

> bezogen auf das AVR Register ADMUX
>
> könnte die Anweisung *analogReference(INTERNAL)* bedeuten,
> dass in ADMUX die Bits REFS1 und REFS0 setzt.
>
> Also in C:
>
1
ADMUX |= (1<<REFS1) | (1<<REFS0);
>
> Bitte überprüfe das mal im Assembler Listing.

Verstehe nur Bahnhof.

Aber nochmal: Die Referenzeinstellung auf 1,1V funktioniert ja 
grundsätzlich. Ich hatte zunächst immer die Default-Referenz gelassen, 
die war aber ungenau und dann stellte ich auf 1,1V um, auch mit einem 
neuen Spannungsteiler.

Wäre hier was verkehrt, könnte ich nichts brauchbares messen und bis auf 
Toleranzen stimmt der gemessene Wert auch.


> Andreas F. schrieb:
>>> Wo hast du auf interne Referenz 1,1V gestellt?
>>
>> In setup():
>>
>> analogReference(INTERNAL);
>
> Wie hoch ist der Strom durch die LED, bitte komplett mit Berechnung
> angeben.

Ich habe 220Ohm an jeder LED (4,5V vom USB), gehe also von 11-12mA aus.

von Uwe S. (de0508)


Lesenswert?

Ok Andreas,

danke für die LED Beschreibung.

Wie sieht es mit dem ADC Clock aus, wo wird dieser eingestellt ?

Schaltest Du für die ADC Eingänge die digitalen Eingangsfunktion des 
Pins ab ?

Stichwort DIDR0.
DIDR0 – Digital Input Disable Register 0
Bit 5 4 3 2 1 0
--- ADC5D ADC4D ADC3D ADC2D ADC1D ADC0D

Wenn Du nicht weiß was das ist, dann lese dies bitte im atmega328p 
Datenblatt nach.

von Uwe S. (de0508)


Lesenswert?

Ich würde mit deinem Ergebnis,
der Arduinoteil für die ADC Bedienung nun komplett ersetzten und selbst 
anhand des Datenblattes schreiben.

Deine Kontrolle ist dabei die Assemblerausgabe des C-Codes.

Nur so hättest Du die Kontrolle über das Was und Wie, mit deinem 
jetzigen Wissen steht Du noch am Anfang den AVR ADC richtig zu nutzen.

von Andreas F. (solipo)


Lesenswert?

Danke Uwe.
Ich mach sonst gar nichts weiter, ich hab nur analogReference(INTERNAL); 
im setup gesetzt und dann loope ich regelmäßig durch ein analogRead(). 
Das ist alles, was das Auslesen betrifft.

Ich setze keine Clock und sonst nix, weiß gar nicht, was man da noch 
setzen muss, da ich mich an diversen Beispielen orientiert habe. Ist 
also alles Standardeinstellung.

von Andreas F. (solipo)


Lesenswert?

> Ich würde mit deinem Ergebnis,
> der Arduinoteil für die ADC Bedienung nun komplett ersetzten und selbst
> anhand des Datenblattes schreiben.
>
> Deine Kontrolle ist dabei die Assemblerausgabe des C-Codes.

Ich habe vor rund 20 Jahren mal ein klein wenig mit Assembler gemacht, 
kannst Du vergessen.


> Nur so hättest Du die Kontrolle über das Was und Wie, mit deinem
> jetzigen Wissen steht Du noch am Anfang den AVR ADC richtig zu nutzen.

Was ich nicht verstehe: Worin liegt denn genau das Problem, kann man 
nicht einfach die obigen beiden Zeilen verwenden, um einigermaßen 
verlässlich ADC auszulesen?

Wie sähe denn der korrekte Code dafür aus, eine Spannung auszulesen? Ich 
bin der Ansicht, dass ich genau das getan habe ohne Schnickschnack und 
beobachte einfach diesen Spannungsabfall an der internen Referenz, 
obwohl ich überall las, das wäre eine stabile Referenz. Mehr will ich 
doch gar nicht :)

von chris (Gast)


Lesenswert?

dann miss doch einfach mal die Referenzspannung mit einem Multimeter am 
AREF Pin.

von Mike J. (linuxmint_user)


Lesenswert?

Nimm dir doch mal einen 10k Ohm Poti, hänge den Mittelpin an einen 
ADC-Pin, den einen äußeren Anschluss über 40kOhm an + und den anderen an 
GND.

Jetzt kannst du dir die Werte über das LCD ausgeben lassen.

Wenn du jetzt an dem Poti drehst muss sich die angezeigte Spannung von 
0V bis ca. 1V ändern.

von Schlumpf (Gast)


Lesenswert?

Laut Spec liefert USB 5V +- 5% bei mindestens 100mA.
Wenn dein Board den USB-Port in die Knie zwingt, dann nur, wenn es mehr 
als 100mA zieht.

LEDs: 3*10mA = 30mA
µC : 1-2mA
Vogelfutter: paar mA

Ich behaupte mal, dass du irgendwo auf dem Board nen Kurzen hast und da 
mehr Strom fließt, als eigentlich sollte.

An welcher Stelle hast du diese niedrige USB-Spannung gemessen?
Direkt am USB? Auf dem Board? An einem GPIO?

Tritt der Fehler nur im Einschaltmoment der LEDs auf und erholt sich 
dann wieder zu normalen Werten, wenn die LEDs an sind?

Was mich irritiert ist, dass ein 1mF an der Versorgung Besserung 
gebracht haben soll. Der kann nur Stromspitzen abdämpfen 
(niederfrequente) und kann auch keine Energie herhexen.

von Andreas F. (solipo)


Lesenswert?

> Nimm dir doch mal einen 10k Ohm Poti, hänge den Mittelpin an einen
> ADC-Pin, den einen äußeren Anschluss über 40kOhm an + und den anderen an
> GND.
>
> Jetzt kannst du dir die Werte über das LCD ausgeben lassen.
>
> Wenn du jetzt an dem Poti drehst muss sich die angezeigte Spannung von
> 0V bis ca. 1V ändern.

Danke, aber nochmal: Ich kann diese Spannung jawunderbar messen. Das 
Problem ist, dass sie verfälscht gemessen wird, weil sich die Referenz 
von 1,1V offenbar dann verschiebt, wenn man einen digitalen Ausgang mit 
12mA belastet.

von Andreas F. (solipo)


Lesenswert?

> Laut Spec liefert USB 5V +- 5% bei mindestens 100mA.
> Wenn dein Board den USB-Port in die Knie zwingt, dann nur, wenn es mehr
> als 100mA zieht.
>
> LEDs: 3*10mA = 30mA
> µC : 1-2mA
> Vogelfutter: paar mA

ca. 60mA für LCD mit Beleuchtung, wenn ich die Spec richtig im Kopf habe 
(LCD 1602a).


> Ich behaupte mal, dass du irgendwo auf dem Board nen Kurzen hast und da
> mehr Strom fließt, als eigentlich sollte.

Dann würde hier gar nichts tun. Vielleicht ein bisschen Rauch oder so ;)


> An welcher Stelle hast du diese niedrige USB-Spannung gemessen?
> Direkt am USB? Auf dem Board? An einem GPIO?

Du meinst die 4,5V? Die mess ich am Vcc Port des Pro Mini.


> Tritt der Fehler nur im Einschaltmoment der LEDs auf und erholt sich
> dann wieder zu normalen Werten, wenn die LEDs an sind?

Nein, die Verschiebung bleibt so. Im konkreten Fall steigt pro 
eingeschalteter LED der gemessene ADC-Wert um 15-20 Punkte.


> Was mich irritiert ist, dass ein 1mF an der Versorgung Besserung
> gebracht haben soll. Der kann nur Stromspitzen abdämpfen
> (niederfrequente) und kann auch keine Energie herhexen.

Wer weiß... auf jeden Fall ist die gemessene Spannung jetzt super glatt, 
da ich 10 Messungen im Abstand von je 1000us mache und dann mittle.

Im Prinzip alles toll, bis auf die Verschiebung.

von Schlumpf (Gast)


Lesenswert?

Andreas F. schrieb:
> weil sich die Referenz
> von 1,1V offenbar dann verschiebt

Das ist DEINE Interpretation des Verhaltens deiner Schaltung.
Kann aber auch zig andere Gründe haben. Aber ich bekomme den Eindruck, 
dass du dich darauf festgebissen hast, dass es das sein MUSS und jede 
andere Möglichkeit oder jedes andere strukturierte Vorgehen zur 
Eingrenzung des Fehlers wird von dir konsequent abgeblockt.

Die Bitte, deinen Code zu Posten wird konsequent geblockt
Die Bitte, gewisse Messungen zu machen, wird für unnötig erklärt

Dann schicke den Chip zu Atmel mit der Bitte, ihn zu untersuchen. Denn 
du bist dir deiner Sache ja sicher, dass die Referenzspannung mit der 
Versorgungsspannung "wandert". Das ist dann definitiv ein Fehler im 
Silizium.

Dass dein USB-Port aber bei dieser Pups-Last bereits in die Knie geht, 
scheint dich gar nicht weiter zu wundern.. kopfschüttel

von Schlumpf (Gast)


Lesenswert?

Stimmt, ich vergaß das Display.. damit kommst du dann an die Grenze 
dessen, was ein USB-Port leisten kann oder muss.

Und deine Versorung mal mit dem Oszi gemessen? Vielleicht fängt die ja 
an zu rippeln, wenn sie über die Maß belastet wird?
Sowas kann sich dann schon auch auf eine Bandgap niederschlagen

von Andreas F. (solipo)


Lesenswert?

> Stimmt, ich vergaß das Display.. damit kommst du dann an die
> Grenze
> dessen, was ein USB-Port leisten kann oder muss.
>
> Und deine Versorung mal mit dem Oszi gemessen? Vielleicht fängt die ja
> an zu rippeln, wenn sie über die Maß belastet wird?
> Sowas kann sich dann schon auch auf eine Bandgap niederschlagen

Oszi? Hach, Du hast Träume... ich bin da vor 4 Tagen ganz neu 
eingestiegen.

Ich habe mich auch nicht festgelegt bei dem Fehler, aber gib mir doch 
mal eine andere Erklärung. Den ganzen Code zu posten macht keinen Sinn. 
Hier mal der relevante Teil:
1
#include <Event.h>
2
#include <Timer.h>
3
#include <LiquidCrystal.h>
4
#include <LowPower.h>
5
6
#define SPANNUNGS_MITTELUNGS_DURCHGAENGE 5
7
#define SPANNUNGS_MITTELUNGS_PAUSE 1000
8
#define SPANNUNGS_MESSPIN A0
9
#define ZYKLUS_SPANNUNG_LESEN 250         
10
#define TASTER_INTERRUPT 2                     
11
#define ENTPRELLZEIT 50000             
12
#define AUSGANG_USB_PIN 4
13
#define AUSGANG_USB_KURZ_PIN 5
14
#define AUSGANG_12V_PIN 6
15
16
int aktuellespannung = 0;
17
volatile unsigned long last_micros;
18
19
20
void timer_spannung_auslesen(void *context) {
21
   int summe = 0;
22
   int temp;
23
   int i;
24
   
25
   for (i=0; i < SPANNUNGS_MITTELUNGS_DURCHGAENGE; i++) {           
26
      temp = analogRead(SPANNUNGS_MESSPIN);                         
27
      summe += temp;                                                
28
      delayMicroseconds(SPANNUNGS_MITTELUNGS_PAUSE);                
29
   }
30
   aktuellespannung = summe / SPANNUNGS_MITTELUNGS_DURCHGAENGE;     
31
}
32
33
void taster_debounce() {
34
   if ((long)(micros() - last_micros) >= ENTPRELLZEIT) {
35
      taster();
36
      last_micros = micros();
37
   }
38
}
39
40
void setup() {
41
   // Referenzspannung für Analogeingang 1,1V
42
   analogReference(INTERNAL);
43
   
44
   // Timer zum Auslesen der Spannung
45
   timer.every(ZYKLUS_SPANNUNG_LESEN, timer_spannung_auslesen, (void*)0); // Jede ... Sekunde Spannung auslesen
46
47
   // Interrupt für manuelle Umschaltung
48
   digitalWrite(TASTER_INTERRUPT, HIGH);  
49
   attachInterrupt(0, taster_debounce, LOW);
50
   
51
   // Ausgabeports einstellen
52
   pinMode(AUSGANG_USB_PIN, OUTPUT);
53
   pinMode(AUSGANG_USB_KURZ_PIN, OUTPUT);
54
   pinMode(AUSGANG_12V_PIN, OUTPUT);
55
}
56
57
void loop() {
58
   // Alle Timer einschalten
59
   timer.update();
60
   LowPower.powerDown(SLEEP_120MS, ADC_OFF, BOD_OFF);  
61
   delay(125);
62
}

von Schlumpf (Gast)


Lesenswert?

Ich "programmiere" nicht mit Arduino. Ich lese lieber das Datenblatt des 
Controllers und beschreibe dann die Register direkt. Da weiss man 
wenigstens, was man tut ;-)

Aber hier gibt es sicher genug Experten, die deinen Code nun endlich mal 
durchschauen können.

Was mögliche Hardware-Fehler angeht, ist es natürlich blöd, wenn du kein 
Oszi hast.
Aber vielleicht hast du ja ein USB-Ladegrät vom Handy etc und steckst da 
mal das Board dran. Vielleicht ist der Fehler ja dann weg?

von Andreas F. (solipo)


Lesenswert?

Wenn ich ein USB-Netzteil nehme, verändert sich der ADC-Messwert auch, 
in diesem Fall etwas weniger:

Ohne LED: 706
1 LED: 716
2 LED: 724
3 LED: 732

Auch an einem anderen PC-USB-Port ist es anders. Am Hub, wo Maus und 
Tastatur dranhängen, ist der Anstieg noch geringer als am Netzteil. Am 
meisten steigt der Wert am USB-Port direkt am Rechner, an dem sonst 
nichts dranhängt.

Habe vielfach gelesen, dass man den 328 auch mit 3,6V laufen lassen 
kann, daran darf das dann ja eigentlich nicht liegen. Oder doch?

von Schlumpf (Gast)


Lesenswert?

Und bricht die Spannung an den diversen USBs auch ein, wenn du die LEDs 
einschaltest?

Andreas F. schrieb:
> Habe vielfach gelesen, dass man den 328 auch mit 3,6V laufen lassen
> kann, daran darf das dann ja eigentlich nicht liegen. Oder doch?

Weiss ich nicht.. muss man das Datenblatt lesen.
Aber die Bandgap muss über den gesamten spezifizierten 
Versorgungsspannungsbereich eine konstante Spannung ausgeben.

von Andreas F. (solipo)


Lesenswert?

> Und bricht die Spannung an den diversen USBs auch ein, wenn du die
> LEDs
> einschaltest?

Ja, das Verhalten ist überall ähnlich. 0,1 bis 0,2V gehts runter.


> Weiss ich nicht.. muss man das Datenblatt lesen.
> Aber die Bandgap muss über den gesamten spezifizierten
> Versorgungsspannungsbereich eine konstante Spannung ausgeben.

So dachte ich eben auch. Irgendwas muss doch hier die Ursache sein.

von Schlumpf (Gast)


Lesenswert?

Dann heißt es jetzt: Strom messen..
Wenn der deutlich höher als der erwartete ist, dann passt was mit der 
Schaltung nicht.

von Andreas F. (solipo)


Lesenswert?

> Dann heißt es jetzt: Strom messen..
> Wenn der deutlich höher als der erwartete ist, dann passt was mit der
> Schaltung nicht.

Gute Idee. Ohne LEDs schwankt er zwischen 17 und 30mA - trotz Display. 
Bisschen wenig, oder? Funkstrom habe ich keinen.
1 LED: 28-40mA
2 LED: 38-50mA
3 LED: 48-60mA

So passt das eigentlich. Keine Überraschung.

von Uwe S. (de0508)


Lesenswert?

Tipp Andreas,

schaffe die 5V aus dem USB Port ab und verwende ein stabilisiertes 5V 
Netzteil, bzw. baue dir einen LM7805 Spannungsregler für die +5V 
Versorgungsspannung ein und speise ihn über ein 9V Steckernetzteil.

von Andreas F. (solipo)


Lesenswert?

> Tipp Andreas,
>
> schaffe die 5V aus dem USB Port ab und verwende ein stabilisiertes 5V
> Netzteil, bzw. baue dir einen LM7805 Spannungsregler für die +5V
> Versorgungsspannung ein und speise ihn über ein 9V Steckernetzteil.

Danke, das kommt später, wenn ich das Ding einbaue.

Ich habe vor, dafür einen Step Down von 12V auf 5V zu nehmen, weil die 
7805 im Akkubetrieb wohl Verschwender sind. Muss ich ggfls. noch 
vergleichen.

Dennoch, auch bei 4,5V Vcc sollten die internen 1,1V doch stabil 
bleiben, oder? Ich bin kein HW-Mensch, daher kann ich das Innenleben der 
328 nicht beurteilen, sondern nur das, was ich gelesen habe.

von Schlumpf (Gast)


Lesenswert?

Also die Ergebnisse sind plausibel und deuten nicht auf einen 
Kurzschluss hin.
Dass ein USB-Port aber so "schlecht" ist, dass er bereits bei derartig 
geringen Belastungen schon so weit einbricht, hätte ich nicht geglaubt.

Spezifiziert sind 5V +-5% @ mindestens 100mA

Schade, dass du kein Oszi hast. Würde mich mal interessieren, wie stark 
dann die Spannung rippelt..

So, zeit für´s Bett

von Joachim B. (jar)


Lesenswert?

Andreas F. schrieb:
> Ich habe vor, dafür einen Step Down von 12V auf 5V zu nehmen, weil die
> 7805 im Akkubetrieb wohl Verschwender sind.

ich nehme gerne recomR785 pinkompatibel und sind brauchbar bis 1A und 
noch recht klein, die 1,5A Type ist aber ein Lügner, schafft nur 1,2A. 
Der PT78ST105 kann immerhin die 1,5A leider ist der größer

billiger nicht pinkompatibel, eine Kiste KIS 3r33 aus China

: Bearbeitet durch User
von Sebastian W. (wangnick)


Lesenswert?

Hallo Andreas,

ein Einbruch der AREF deutet auf Probleme bei der Stromversorgung hin. 
USB-Ports sind dafür notorisch und müssen auf der Verbraucherseite gut 
abgepuffert werden. Besser sind da USB-Netzteile.

Du sprichst von einem 5V Arduino Pro Mini mit einem Atmega328. Wie 
versorgst Du den Pro Mini mit Strom?

a) USB-Stromversorgung an RAW?
b) USB-Stromversorgung direkt an VCC?

Im Falle a) hat der bordeigene 5V-Linearregler schwer zu kämpfen. Besser 
wäre bei 5V-Versorgung wohl b).

Im Falle b) wird der Linearregler ja rückwärts beaufschlagt, den 
könntest Du dann eventuell mal abklemmen (bei Sparkfun nennt sich das 
"Power Isolation Jumper") um eine Fehlerquelle auszuschliessen.

Es könnten auch die Pufferkondensatoren (VCC, AREF) auf dem Pro Mini 
kaputt sein.

Andreas F. schrieb:
> Habe vielfach gelesen, dass man den 328 auch mit 3,6V laufen lassen
> kann, daran darf das dann ja eigentlich nicht liegen. Oder doch?

Aber dann offiziell gerade nicht mehr mit 16MHz, siehe Datenblatt 29.3, 
"Speed Grades". Sollte aber trotzdem noch gehen. Aber wie kommst Du auf 
3.6V???

Andreas F. schrieb:
> Habe eben noch einen 1mF auf das Board geklemmt in die 5V rein und jetzt
> steigt die gemessene Spannung bei 3 LEDs "nur" noch um 0,6V. Das ist
> dennoch Murks.

1 millifarad? Oder 1 mikrofarad? Bei 1 millifarad wirds wohl ein Elko 
sein, und die sind zu träge um die kurzfristigen Stromspitzen der 
Mikrocontroller abzufedern.

LG, Sebastian

von Jürgen S. (jurs)


Lesenswert?

Andreas F. schrieb:
>  LowPower.powerDown(SLEEP_120MS, ADC_OFF, BOD_OFF);

Wenn Du mit fremden Libraries programmierst, solltest Du Dich genau 
informieren, was die Funktionen in diesen Libraries eigentlich genau 
machen.

Also ich sehe da erstmal, dass der ADC komplett deaktiviert wird und Du 
den Controller schlafen legst. Und Du danach dann irgendwie Spannungen 
mißt, offenbar wieder mit aktiviertem ADC. Wo wird der ADC wieder 
aktiviert?

Tritt das Verhalten bei den Spannungsmessungen auch auf, wenn Du den 
Controller NICHT mit dieser Funktion zwischenzeitlich schlafen legst mit 
PowerDown und Abschaltung des ADC?

Oder tritt das Problem nur auf, wenn Du diese 
LowPower.powerDown()-Funktion zwischen den Messungen verwendest?

von Mike J. (linuxmint_user)


Lesenswert?

Jürgen S. schrieb:
> LowPower.powerDown()-Funktion zwischen den Messungen verwendest?

Im Power-Down Modus kann der AVR nur durch einen externen Interrupt, dem 
Watchdogtimer oder einen TWI-Adress-Match wieder aufgeweckt werden.

@  Andreas F. (solipo)
Probiere doch bitte mal den IDLE-Modus, schmeiß alles raus was dir 
dazwischenfunken kann, erzeuge das kleinste lauffähige Programm und lass 
eine LED im Sekundentakt blinken damit du siehst dass dein Programm 
richtig läuft.

von Rudolph (Gast)


Lesenswert?

Ein Original Arduino Pro Mini von Sparkfun?
Nach dem Referenz-Design hat das 100nF am ARef.
Nach Schaltplan ist da nur ein 100nF für die drei VCC Anschlüsse,
C10 vom Spannungsregler liegt aber direkt am ersten Pin.
C3 ist bei AVCC angeschlossen, nicht optimal immerhin.

Sieht eigentlich so aus als sollte das laufen, geht besser aber
dafür ist das auch winzig.

Das Arduino ist aber die 3,3V Version?

von Frank K. (fchk)


Lesenswert?

Nimm doch einfach zB einen MCP1525 (2.5V Referenz) und hänge ihn an 
einen Analogeingang. Der MCP1525 funktioniert von 2.7 bis 5.5V. Damit 
hast Du einen bekannten Messwert und kannst die anderen Messungen 
korrigieren.

http://www.microchip.com/wwwproducts/Devices.aspx?product=MCP1525

von Andreas F. (solipo)


Lesenswert?

Sebastian Wangnick schrieb:
> a) USB-Stromversorgung an RAW?
> b) USB-Stromversorgung direkt an VCC?

Der Pro Mini hängt über einen USB-Controller am USB-Port, d.h. der 
Vcc-Versorgungs-Pin bekommt die USB-Spannung.


> Im Falle b) wird der Linearregler ja rückwärts beaufschlagt, den
> könntest Du dann eventuell mal abklemmen (bei Sparkfun nennt sich das
> "Power Isolation Jumper") um eine Fehlerquelle auszuschliessen.

Versteh leider nicht, was Du meinst.


> Aber dann offiziell gerade nicht mehr mit 16MHz, siehe Datenblatt 29.3,
> "Speed Grades". Sollte aber trotzdem noch gehen. Aber wie kommst Du auf
> 3.6V???

Hab wo gelesen, dass jemand den Arduino mit 3 Akkus betrieb bzw. mit 
Lithium-Akku.


> 1 millifarad? Oder 1 mikrofarad? Bei 1 millifarad wirds wohl ein Elko
> sein, und die sind zu träge um die kurzfristigen Stromspitzen der
> Mikrocontroller abzufedern.

1000 Mikrofarad. Das hat zumindest für deutlich bessere Stabilität 
gesorgt, weil der USB-Anschluss offenbar am Limit ist.

von Andreas F. (solipo)


Lesenswert?

>>  LowPower.powerDown(SLEEP_120MS, ADC_OFF, BOD_OFF);
>
> Wenn Du mit fremden Libraries programmierst, solltest Du Dich genau
> informieren, was die Funktionen in diesen Libraries eigentlich genau
> machen.
>
> Also ich sehe da erstmal, dass der ADC komplett deaktiviert wird und Du
> den Controller schlafen legst. Und Du danach dann irgendwie Spannungen
> mißt, offenbar wieder mit aktiviertem ADC. Wo wird der ADC wieder
> aktiviert?

Der Watchdog übernimmt dieses Aufwachen alle 120ms. Aber ich habe diese 
Library natürlich auch schon rausgenommen zum Testen. Es macht 
allerdings Null Unterschied. Ist auch logisch, denn sonst könnte ich bei 
runtergefahrenem ADC gar keine Spannung messen.


> Tritt das Verhalten bei den Spannungsmessungen auch auf, wenn Du den
> Controller NICHT mit dieser Funktion zwischenzeitlich schlafen legst mit
> PowerDown und Abschaltung des ADC?

Ja. Wie gesagt, spielt keine Rolle. Und ich teste immer mit und ohne.


> @  Andreas F. (solipo)
> Probiere doch bitte mal den IDLE-Modus, schmeiß alles raus was dir
> dazwischenfunken kann, erzeuge das kleinste lauffähige Programm und lass
> eine LED im Sekundentakt blinken damit du siehst dass dein Programm
> richtig läuft.

Das hab ich schon gemacht. Sobald ich die LEDs in der Teststellung 
einfach abklemme, sehe ich das Problemverhalten nicht. Ich will später 
auch nur Mosfets und einen Transistor schalten, was wahrscheinlich die 
1,1V nicht oder nur minimal verzerrt, so hoffe ich. Trotzdem bin ich 
wegen der LED-Problematik jetzt ziemlich skeptisch.

: Bearbeitet durch User
von Andreas F. (solipo)


Lesenswert?

> Ein Original Arduino Pro Mini von Sparkfun?

Ne, nur den hier: ebay: 281422104702


> Nach dem Referenz-Design hat das 100nF am ARef.
> Nach Schaltplan ist da nur ein 100nF für die drei VCC Anschlüsse,
> C10 vom Spannungsregler liegt aber direkt am ersten Pin.
> C3 ist bei AVCC angeschlossen, nicht optimal immerhin.

Du meinst, das kleine Modell ist hier möglicherweise "anfälliger" auf 
Spannungsschwankungen als die größeren?


> Sieht eigentlich so aus als sollte das laufen, geht besser aber
> dafür ist das auch winzig.
>
> Das Arduino ist aber die 3,3V Version?

Ist die 5V 16MHz-Version.

von Andreas F. (solipo)


Lesenswert?

> Nimm doch einfach zB einen MCP1525 (2.5V Referenz) und hänge ihn an
> einen Analogeingang. Der MCP1525 funktioniert von 2.7 bis 5.5V. Damit
> hast Du einen bekannten Messwert und kannst die anderen Messungen
> korrigieren.

Danke, das ist eine interessante Option, bei der ich nicht mit dem 
Rastertunnelmikroskop am Pin 20 rumlöten müsste. Habe auch schon einen 
LM336Z-2.5 zur Verfügung.

Du meinst also, ich soll immer beide analogen Eingänge zeitgleich 
auslesen und dann den (wegen der Last schwankenden) ADC-Wert des 
LM336Z-2.5 verwenden, um dem anderen Spannungsmesswert um die Differenz 
zwischen gemessenem Referenz-ADC-Wert und dem theoretisch entsprechenden 
Wert 511 jeweils nach oben oder unten zu korrigieren?

Klingt auf jeden Fall gut und wäre eine günstige Lösung, auch wenn es 
natürlich die Sache verkompliziert. Dann kann ich halt nicht mit den 
1,1V hantieren, sondern muss die Default-Referenz nehmen, sonst brauch 
ich ja noch einen Spannungsteiler.

Und ich dachte neulich noch, ich programmier da mal eben einen Atmega...

von Uwe S. (de0508)


Lesenswert?

Andreas - Kopf einschalten!

Die ADC Messspannung darf nicht höher als die ADC Referenzspannung sein.

Also ?

Die 2,5V an den ARef Pin legen und das Programm ändern.

von Andreas F. (solipo)


Lesenswert?

Hab doch grad geschrieben, dass ich dann die 1,1V nicht mehr nehmen 
kann.

von Uwe S. (de0508)


Lesenswert?

Ich habe noch ein Bild gefunden:

http://wondphoto.com/images/wond/BI/WOND-BI00160-4.jpg

Und denke durch das direkte Versorgen mit +5V Über einen USB Wandler ist 
der eingebaute Spannungsregler im Weg. Wenn der für 3,3V ausgelegt ist, 
könnte er hin sein und einen Kurzschluss nach Masse haben.

von Andreas F. (solipo)


Lesenswert?

> http://wondphoto.com/images/wond/BI/WOND-BI00160-4.jpg

Nur zur Info: Das ist nicht meiner.


> Und denke durch das direkte Versorgen mit +5V Über einen USB Wandler ist
> der eingebaute Spannungsregler im Weg. Wenn der für 3,3V ausgelegt ist,
> könnte er hin sein und einen Kurzschluss nach Masse haben.

Regelt denn der Vcc-Eingang überhaupt oder macht das nicht nur Raw?

: Bearbeitet durch User
von stefanus (Gast)


Lesenswert?

Ich würde mal ganz simpel ein anderes USB Kabel verwenden. Denn es darf 
nicht sein, dass die Versorgungsspannung bei so geringem Strom schon auf 
4,5V einbricht. Und es darf auch nicht sein, das ein Fetter Kondensator 
hilft.

Ich hab mal an mein Notebook gedankenlos einen 1000µF Elko gesteckt, mit 
dem Resultat, dass er sich prompt resetted hat.

Ich denke, Du hast ein Problem mit der Stromversorgung.

von stefanus (Gast)


Lesenswert?

Die 1,1V Refrenz funktioniert natürlich auch mit weit weniger als 5V 
Spannungsversorgung.

Wichtiger ist, dass die Versorgungsspannung stabil ist, alsi nicht wild 
zwischen 4V und 5V hin und her springt. Das kann Dein Multimeter gar 
nicht erfassen, dazu wäre ein Oszilloskop hilfreich. Dass der Dicke Elko 
geholfen hat bestätigt meine Annahme, dass Du ein gravierendes Problem 
mit der Spannungsversorgung hast.

von Sebastian W. (wangnick)


Lesenswert?

Hallo Andreas,

Ich hab bis jetzt folgendes verstanden:

1. Du benutzt ebay: 281422104702 (5V Atmega328P 16MHz). Leider gibt es 
zu genau diesem Board wohl keinen Schaltplan, oder?

2. Dieses Board hat einen RAW-Eingang (5V-12V) und einen VCC-Ein/Ausgang 
(das Board hat einen Linearregler, der aus der RAW-Spannung 5V auf VCC 
machen kann). Du versorgst das Board nicht über den RAW-Eingang, sondern 
über den VCC-Ein/Ausgang von einem PC-USB-Port aus. Dort misst Du 
zunächst 4.5V.

3. Du hast einen Elko mit 1000μF zwischen VCC und GND gesetzt, der das 
Problem vermindert hat. Auch die Benutzung eines USB-Ladegeräts anstelle 
des PC-USB-Ports verringert das Problem, behebt es aber nicht gänzlich.

4. Du misst mit dem ADC die Spannung eines Bleiakkus an Arduino-A0 über 
einen 33k/2k Spannungsteiler gegen die interne 1.1V-Referenz als AREF.

5. Drei LEDs sind mit einem Vorwiderstand von jeweils 220Ω zwischen den 
Arduino-Pins D4/D5/D6 und GND geschaltet.

6. Sobald die LEDs angeschaltet werden, steigt die ADC-Messwerte, obwohl 
die Spannung des Bleiakkus gleich bleibt. VCC sinkt dabei auf 4.3V.

7. Du hast auch noch ein LCD1602 mit Hintergrundbeleuchtung 
angeschlossen.

8. Du hast kein Oszilloskop und kannst eventuelle kurzzeitigen Einbrüche 
der Versorgungsspannung daher nicht ausschliessen.

Folgende Fragen:

A: Ist das so richtig? Sind noch andere Komponenten im Spiel, oder tritt 
das Problem in genau dieser Konfiguration schon auf?

B: Wie gibst Du deine Messwerte aus. Per serieller Schnittstelle an den 
PC, oder auf dem LCD1602?

C: Wenn Du die LEDs (natürlich über die Vorwiderstände) direkt an die 
VCC-Versorgungsspannung anschliesst, steigen die ADC-Messwerte dann auch 
an?

D: Hast Du noch einen etwas kleineren Elko (so 1-10μF)? Was passiert, 
wenn Du den noch zusätzlich zwischen VCC und GND setzt?

LG, Sebastian

von Rudolph (Gast)


Lesenswert?

Andreas F. schrieb:
> Ne, nur den hier: ebay: 281422104702

Also vom Bild her sieht das Ding schon nicht gut aus, da war ja echt ein 
Künstler am Werk, hauptsache geometrisch. :-(

Selbst wenn einer der Kondensatoren mit ARef verbunden sein sollte, dann 
maximal weit weg von dem Pin.
AVCC hat auch keinen Kondensator direkt.

Wegwerfen und selber machen?

von Andreas F. (solipo)


Lesenswert?

> Wichtiger ist, dass die Versorgungsspannung stabil ist, alsi nicht wild
> zwischen 4V und 5V hin und her springt. Das kann Dein Multimeter gar
> nicht erfassen, dazu wäre ein Oszilloskop hilfreich. Dass der Dicke Elko
> geholfen hat bestätigt meine Annahme, dass Du ein gravierendes Problem
> mit der Spannungsversorgung hast.

Ich habe erst etwas basteln müssen, weil ich auf Anhieb keine 5V außer 
vom PC zur Verfügung habe. Aber nun ist die Schaltung mit 5V aus einem 
Netzteil versorgt und zwar nicht mehr über das USB-Kabel, sondern direkt 
auf dem Breadboard. Und siehe da: Es funktioniert, die LEDs stören die 
Schaltung nicht mehr. Ich bin begeistert. Hätte ich schon früher 
ausprobieren können, aber mangels sofort verfügbarer Möglichkeiten hab 
ich mich eben auf den USB verlassen.

Das ist eine sehr gute Nachricht, danke für den Tipp.

Allerdings noch eine Frage dazu: Wenn ich nun wieder einen neuen Sketch 
aufspielen will, muss ich dazu die neue externe Spannungsversorgung 
immer erst abklemmen und USB wieder ran oder geht auch beides 
gleichzeitig? Ich will es nicht wirklich ausprobieren, da ich nur einen 
Arduino habe.

von Andreas F. (solipo)


Lesenswert?

Sebastian Wangnick schrieb:
> A: Ist das so richtig? Sind noch andere Komponenten im Spiel, oder tritt
> das Problem in genau dieser Konfiguration schon auf?

Ja, alles richtig, genau so in der Konstellation stellte es sich dar.


> B: Wie gibst Du deine Messwerte aus. Per serieller Schnittstelle an den
> PC, oder auf dem LCD1602?

Beides.


> C: Wenn Du die LEDs (natürlich über die Vorwiderstände) direkt an die
> VCC-Versorgungsspannung anschliesst, steigen die ADC-Messwerte dann auch
> an?
> D: Hast Du noch einen etwas kleineren Elko (so 1-10μF)? Was passiert,
> wenn Du den noch zusätzlich zwischen VCC und GND setzt?

Hab ich gar nicht mehr probiert, denn es läuft nun, wenn ich nicht über 
USB versorge. Trotzdem Danke! Guter Testansatz.

Danke auch den restlichen Helfern und Tippgebern.

: Bearbeitet durch User
von Sebastian W. (wangnick)


Lesenswert?

Hallo Andreas,

schön das es jetzt funktioniert. Gerade Notebooks sind bekannt schlechte 
USB-Stromversorger.

Andreas F. schrieb:
> Allerdings noch eine Frage dazu: Wenn ich nun wieder einen neuen Sketch
> aufspielen will, muss ich dazu die neue externe Spannungsversorgung
> immer erst abklemmen und USB wieder ran oder geht auch beides
> gleichzeitig? Ich will es nicht wirklich ausprobieren, da ich nur einen
> Arduino habe.

Der Pro Mini hat ja keinen USB-Port, du benutzt also einen FTDI oder 
einen anderen USB-UART-Konverter. Den solltest Du weiterhin und 
gleichzeitig mit der anderen Stromversorgung benutzen können, und zwar 
wie folgt:

*) +5V des USB-Konverters nicht anschliessen.
*) Die vier anderen (GND, RX, TX, RST) anschliessen.

Dabei werden die zwei GND (des PCs und der anderen Stromversorgung) auf 
das gleiche Potential gezwungen. Wenn du ganz sicher gehen willst, 
dann miss zuvor den Stromfluss zwischen diesen zwei Potentialen: Es 
sollte kein Strom fliessen.

LG, Sebastian

: Bearbeitet durch User
von Andreas F. (solipo)


Lesenswert?

Genau, ich habe einen FTDI dran (ebay: 271595059344).

Perfekt, so mach ichs, vielen Dank. Dann wäre ich also mit einem Arduino 
mit eingebauter USB-Schnittstelle sogar benachteiligt bezüglich dieser 
Möglichkeit. Gut zu wissen.

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.