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.
Andreas, es fehlt dein Programm und der Schaltplan dazu ?
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
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.
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 ?
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?
> 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?
> 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.
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.
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.
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.
> 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?
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 !
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?
> Wo hast du auf interne Referenz 1,1V gestellt?
In setup():
analogReference(INTERNAL);
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
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.
Andreas F. schrieb: > In setup(): > > analogReference(INTERNAL); Versuche es mal mit: analogReference(INTERNAL1V1);
> Versuche es mal mit: > analogReference(INTERNAL1V1); Das gilt nur im Mega. Beim Pro Mini geht das nicht laut Doku.
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.
> 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.
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.
> 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.
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.
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.
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.
> 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 :)
dann miss doch einfach mal die Referenzspannung mit einem Multimeter am AREF Pin.
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.
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.
> 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.
> 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.
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
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
> 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 | } |
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?
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?
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.
> 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.
Dann heißt es jetzt: Strom messen.. Wenn der deutlich höher als der erwartete ist, dann passt was mit der Schaltung nicht.
> 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.
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.
> 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.
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
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
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
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?
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.
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?
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
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.
>> 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
> 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.
> 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...
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.
Hab doch grad geschrieben, dass ich dann die 1,1V nicht mehr nehmen kann.
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.
> 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
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.
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.
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
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?
> 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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.