Go Down

Topic: Mega 2560 - Power Saving - Strom sparen (Read 17149 times) previous topic - next topic

Doc_Arduino

Hallo,

was wäre der Vorteil einen 16U2 Adapters im Gegensatz zum FTDI? Machen doch beide das gleiche?
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

SkobyMobil

Hallo,
beim "16U2" ist die Firmware "fest" installiert und weiß was sie zu tun hat. Kabel ran, läuft.
Beim "FTDI" brauchst Du normalerweise irgend welche Treiber und Software. Du bist damit
aber flexibler, weil Du es für mehrere Systeme einsetzen kannst.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Serenifly


Doc_Arduino

Hallo,

ach'so. Der 16U2 funktioniert mit Windows Standardtreiber und sonst muß man den FTDI Treiber installieren?

Wenn es wirklich nur der eine Unterschied ist, wäre mir das egal. FTDI Treiber ist eh installiert.

Interessanter wäre dann bestimmt der hier:  http://arduino.cc/en/Main/ArduinoISP
Wobei ich da wieder fragen müßte, was der Unterschied zu den AVR ISP Programmer wäre?

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

SkobyMobil

Hallo,
was der Unterschied ist kann ich nicht sagen. Aber- wenn Du mit Arduino´s und Arduino IDE fummelst,
dann würde ich mich hier auf der sicheren Seite fühlen.
Ich habe so ein wenig das Gefühl, das alles was mit Programmern zusammenhängt erst einmal nur
Ärger verursacht.
Wenn Du auch andere Software/Hardware nutzt, würde ich den nicht kaufen.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Doc_Arduino

Hallo,

die Antwort ist jetzt im gesamten aber nicht ganz klar und widersprüchlich in sich.   :)
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

SkobyMobil

Hallo,
"was der Unterschied zu den AVR ISP Programmer wäre?"

in Bezug auf den ArduinoProgrammer…
Bei dem Arduino könnte ich mir vorstellen, das er mit der Arduino IDE sehr
schön funktionieren könnte.
Bei einem AVR ISP Programmer hätte ich da schon Bauchweh.
und auch umgekeht…
ein AVR ISP Programmer muß nicht umbedingt mit der Arduino IDE funktionieren
und der ArduinoProgrammer nicht mit jeder AVR-Soft.
Das meinte ich.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Doc_Arduino

Hallo,

okay verstanden, Du hättest Bauchschmerzen beides zu jeweils zu kombiniert zu nutzen.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Doc_Arduino

Hallo,

hab meinen zweiten Mega 2560 erhalten und habe beim "alten" den Spannungsregler runtergelötet und nochmal verglichen. Die Messung bzw. Stromaufnahme reagiert empfindlich auf jeden Unterschied der Versorgungsspannung. Deswegen komme ich auch nicht mehr auf die alten 27mA in Sleep ohne Jumper. Habe beide Boards nochmal vermessen.

In Idle leuchtet LED 13, in Sleep ist die aus.

Den Effekt ohne Spannungsregler hatte ich etwas größer erwartet. Dachte an 5mA in Sleep. Aber nun gut, sind immerhin 5mA weniger, was der Batterielaufzeit auch einiges bringt. Der Jumper am 16U2 hat seine Wirkung behalten. Sehr wichtig zu wissen.

Testcode:
Code: [Select]

/* Sleep Demo Serial
* -----------------
* Example code to demonstrate the sleep functions in a Arduino. Arduino will wake up
* when new data is received in the serial port USART
* Based on Sleep Demo Serial from http://www.arduino.cc/playground/Learning/ArduinoSleepCode

"Aufwach-Schalter" an Pin 2 gegen Masse

Originalboard Arduino Mega 2560
Idle 59,2mA   Sleep 22,3mA   ohne 16U2 Jumper
Idle 54,5mA   Sleep 15,5mA   mit Jumper auf GND-Reset für 16U2

ohne Spannungsregler auf Board, abgegelötet
Idle 55,1mA   Sleep 16,5mA   ohne 16U2 Jumper
Idle 49,9mA   Sleep  9,8mA   mit Jumper auf GND-Reset für 16U2

*/   
   

#include <avr/sleep.h>

int sleepStatus = 0;        // variable to store a request for sleep
int count = 0;              // counter

int ledPin = 13;            // LED connected to digital pin 13
//int interruptPin = 10;      // LED to show the action of a interrupt
int wakePin = 2;            // active LOW, ground this pin momentary to wake up
//int sleepPin = 12;          // active LOW, ground this pin momentary to sleep
int ledState = LOW;

void wakeUpNow()        // here the interrupt is handled after wakeup
{
  // execute code here after wake-up before returning to the loop() function
  // timers and code using timers (serial.print and more...) will not work here.
  // digitalWrite(interruptPin, HIGH);  // LED an Pin 10 ein
}


void sleepNow()
{
    /* Now is the time to set the sleep mode. In the Atmega8 datasheet
     * http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf on page 35
     * there is a list of sleep modes which explains which clocks and
     * wake up sources are available in which sleep modus.
     *
     * In the avr/sleep.h file, the call names of these sleep modus are to be found:
     *
     * The 5 different modes are:
     *     SLEEP_MODE_IDLE         -the least power savings
     *     SLEEP_MODE_ADC
     *     SLEEP_MODE_PWR_SAVE
     *     SLEEP_MODE_STANDBY
     *     SLEEP_MODE_PWR_DOWN     -the most power savings
     *
     *  the power reduction management <avr/power.h>  is described in
     *  http://www.nongnu.org/avr-libc/user-manual/group__avr__power.html
     */ 
       
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // sleep mode is set here

  sleep_enable();          // enables the sleep bit in the mcucr register
                           // so sleep is possible. just a safety pin
 
    /* Now it is time to enable an interrupt. We do it here so an
     * accidentally pushed interrupt button doesn't interrupt
     * our running program. if you want to be able to run
     * interrupt code besides the sleep function, place it in
     * setup() for example.
     *
     * In the function call attachInterrupt(A, B, C)
     * A   can be either 0 or 1 for interrupts on pin 2 or 3. 
     *
     * B   Name of a function you want to execute at interrupt for A.
     *
     * C   Trigger mode of the interrupt pin. can be:
     *             LOW        a low level triggers
     *             CHANGE     a change in level triggers
     *             RISING     a rising edge of a level triggers
     *             FALLING    a falling edge of a level triggers
     *
     * In all but the IDLE sleep modes only LOW can be used.
     */

  attachInterrupt(0,wakeUpNow, LOW); // use interrupt 0 (pin 2) and run function
                                     // wakeUpNow when pin 2 gets LOW
     
  sleep_mode();            // here the device is actually put to sleep!!

                           // THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
  sleep_disable();         // first thing after waking from sleep:
                           // disable sleep...
 
  detachInterrupt(0);      // disables interrupt 0 on pin 2 so the
                           // wakeUpNow code will not be executed
                           // during normal running time.
   
}


void setup()
{
   
  pinMode(ledPin, OUTPUT);         // LED connected to digital pin 13
  //pinMode(interruptPin, OUTPUT);   // LED to show the action of a interrupt pin 10
 
  pinMode(wakePin, INPUT);         // active LOW, ground this pin momentary to wake up
  digitalWrite(wakePin, HIGH);     // Pullup aktiv
  //pinMode(sleepPin, INPUT);        // active LOW, ground this pin momentary to sleep
  //digitalWrite(sleepPin, HIGH);    // Pullup aktiv
     
  attachInterrupt(0,wakeUpNow, LOW);   // use interrupt 0 (pin 2) and run function
                                       // wakeUpNow when pin 2 gets LOW
                           
}


void loop()
{
   if ( digitalRead(2) == LOW ) {
     digitalWrite(ledPin, HIGH);     
   }
   else {
     digitalWrite(ledPin, LOW);
     sleepNow();     // sleep function called here
   }
     
}

Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

jurs

#24
Aug 18, 2014, 12:46 pm Last Edit: Aug 18, 2014, 02:03 pm by jurs Reason: 1

hab meinen zweiten Mega 2560 erhalten und habe beim "alten" den Spannungsregler runtergelötet und nochmal verglichen.


Und was ist mit der Power-On LED?
Hast Du die nicht ausgelötet?

Laut Schaltplan ist die LED auf dem MEGA2560 Board grün und hat einen 1K Vorwiderstand.
Grüne LED = 2,5V Vorwärtsspannung, macht 2,5V an 1K, I=2,5/1000= 2,5 mA

D.h. Auslöten der ständig leuchtenden Power-On LED bringt ca. 2,5 mA.

Edit/Nachtrag: Und was ist eigentlich mit dem 3.3V Spannungsregler? Brauchst Du 3.3V? Weil der 3.3V Regler braucht doch auch einen Ruhestrom von ca. 5.5 mA laut Datenblatt, falls auf Deinem Board der MC33269D-5.0 verbaut ist, wie er im Referenzdesign des MEGA-Boards enthalten ist. Wenn Deine Schaltung keine 3.3V benötigt, kannst Du also nochmal sparen, wenn Du auch den 3.3V Regler auslötest und nicht nur den 5V-Regler.

uwefed

#25
Aug 18, 2014, 01:54 pm Last Edit: Aug 18, 2014, 01:56 pm by uwefed Reason: 1

Hallo,

ach'so. Der 16U2 funktioniert mit Windows Standardtreiber und sonst muß man den FTDI Treiber installieren?

Wenn es wirklich nur der eine Unterschied ist, wäre mir das egal. FTDI Treiber ist eh installiert.

Interessanter wäre dann bestimmt der hier:  http://arduino.cc/en/Main/ArduinoISP
Wobei ich da wieder fragen müßte, was der Unterschied zu den AVR ISP Programmer wäre?



* Der Upload über die serielle Schnittstelle und eventuellen USB-Serial-Adapter funktioniert über einen im Flash vorhandenen Bootloader. So können Programme raufgeladen werden. Es können aber keine Einstellungen an der Fuse Bits gemachet werden. Dazu braucht es keine zusätzliche Hardware weil über USB-Kabel und ist somit für Anfänger am einfachsten.

* ISP braucht keinen Bootloader und man hat vollen zugriff auf die Einstellungen. Man kann einen Kontroller aber auch kaputtprogrammieren wenn man falsche Einstellungen macht (zB Watchdog mit zu kurzen Intervallen oder externen Quarz aktiviert wenn in der Schaltung keiner vorgesehen ist ecc) Es braucht eine Programmierer. Ein Arduino kann, wie Du erwänst, dazu programmiert werden.

* HV-Programming. Mittels einer Spannung von 12V an Reseteingang und einer bestimmten Programmierungssequenz kann der Controller aus einem zerschossenen Situation gerettet werden und auf den Auslieferungszustand gebracht werden.

ISP und HV prog kann mittels eines zweiten Arduinos und dem entsprechenden Sketch/Shield gemacht werden.

Grüße Uwe

Doc_Arduino

#26
Aug 18, 2014, 11:57 pm Last Edit: Aug 19, 2014, 12:00 am by Doc_Arduino Reason: 1
Hallo,

Danke für die Programmer Erklärung, bedeutet, ich lass das erstmal sein, kann ich zu viel falsch machen.  ;)

Ich habe mich erstmal mit dem 5V Spannungsregler beschäftigt um zu sehen was das bringt. Die Power LED kann ich noch auslöten. Kann ich auch zum Schluss machen wenn alles fertig ist. Die 2,5mA sind zum Glück konstant und bekannt. Den 3,3V Regler kann ich noch loswerden. Brauch ich nicht. Allerdings ist laut Schaltplan ein LP2985 verbaut und wenn ich mit Lampe auf beide Boards schaue, lese ich was von LPF9 oder so ähnlich, kann auch LP29 sein, womit durchaus der LP2985 gemeint sein könnte. Die Position ist rechts neben dem Quarz, wenn Power/USB links ist.

Auf welchen Board ist der MC33269D-5.0 verbaut? Wobei die 5.0 am Ende auf 5V Ausgangsspannung hindeuten würden. Mein 5V Spannungsregler ist ein NCP1117ST50T3G. Irgendwas mit 17-50 steht drauf.

Der LP2985 bekommt ja von mir dann trotzdem 5V an Vin und ON/OFF Pin. Jetzt weis ich nicht recht wie ich das Datenblatt lesen soll. Bei 0mA Laststrom, wären es wohl max. 125µA was er sich nimmt. Bei 5V an ON/OFF sind es max 15µA. Heißt das jetzt der nimmt sich in Leerlauf in meinem Fall zusammen 140µA? Das dürfte keine Rolle spielen, wenn meine Annahme stimmt. Den könnte ich drin lassen. Oder?

Wobei natürlich jetzt die Frage wäre, was sich noch 7,5mA gönnt, abzüglich der 2,5mA der LED von 10mA in Sleep. Der Sleepmodus ist doch vollständig richtig? Mehr geht mit Code nicht?


Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

jurs


Auf welchen Board ist der MC33269D-5.0 verbaut? Wobei die 5.0 am Ende auf 5V Ausgangsspannung hindeuten würden.


Stimmt, da habe ich mich vertan, das ist ein 5V Regler, und zwar wohl der auf dem ersten MEGA-Board.

Auf dem MEGA2560-R3 sollte ein LP2985-33DBVR als 3.3V Regler sitzen, und der braucht laut Datenblatt wirklich nur knappe 0,1mA und sollte nicht gross zum Stromverbrauch beitragen.

Aber hast Du ein Original-Board mit diesem speziellen LP2985-33DBVR Regler?
Übliche Regler können deutlich mehr Strom fressen als dieser spezielle Lowdrow/LowBias-Regler von TI.
Und wenn Dein 3.3V Regler eher ein "üblicher" als ein "LP2985-33DBVR" ist, kannst Du mit dem auch einsparen, wenn Du ihn auslötest, wenn Du ihn nicht brauchst.


Wobei natürlich jetzt die Frage wäre, was sich noch 7,5mA gönnt, abzüglich der 2,5mA der LED von 10mA in Sleep. Der Sleepmodus ist doch vollständig richtig? Mehr geht mit Code nicht?


Also vom Sleepmode her ist PowerDown schon das niedrigste. Da kann man zwar womöglich noch etwas rausholen über die Abschaltung der Brownout-Detection (keine Ahnung ob das beim 2560 auch per Software geht oder nur über die Fuses), oder die Deaktivierung des ADC, aber da ist man mehr im Microamperebereich als bei Milliampere.

Was ist denn mit den zwei Milliampere, die Du in  Reply #14 beim 16U2 noch als Sparpotential erkannt hast?
Die sparst Du bisher noch nicht ein, oder?

Doc_Arduino

Hallo,

meine beiden Mega 2560 sind beides Originale. Bei exp-tech gekauft. Laut Chip Aufdruck lese ich das verstümmelte bzw. abgekürzte LP...., was auf den TI hinweisen würde wie im Schaltplan bezeichnet. Deshalb löte ich den erstmal nicht aus.

Den seltsamen Effekt mit den 2mA konnte ich nicht mehr nachstellen. Der kam zu stande mit der Reihenfolge wann man den 16U2 Reset jumpert.

Übrigens haben die neuen Arduinoboards seitlich an den Headerleisten den Pinaufdruck. Aber nur für die digitalen und die Powerleiste. Und die GND Beschriftung ist dicker ausgemalt. "ARDUINO.CC" und Made in Italy" liegt nicht mehr hochkant sondern auch quer leserlich.

Abzüglich der Power LED und dann 7,5mA im Sleep-Mode, liege ich schon deutlich unter dem Idle Wert. Da bin ich doch schon sehr glücklich. Danke an dieser Stelle für die Hinweise zum Energie sparen

Wenn ich mir den Schaltplan so anschaue, sehe ich nur noch jeweils 0,5mA für den Resetstrom. Beim 16U2 wegen Jumper und beim Mega 2560 dauerhafter Pullup 10k. Daran kann man jedoch nichts ändern. Dann gibts noch 2x 10k Pullups für I2C. Der OPV zieht auch nur im unterirdischen µA Bereich Strom laut Datenblatt. Der Rest sind bestimmt parasitäre Boardquerströme   ....  :)   :)   Irgendwann ist eben das Ende der Fahnenstange erreicht.



.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

jurs


Den seltsamen Effekt mit den 2mA konnte ich nicht mehr nachstellen. Der kam zu stande mit der Reihenfolge wann man den 16U2 Reset jumpert.


Dazu hattest Du geschrieben:
> ich messe noch einen Unterschied von 2mA, wenn ich den 16U2 gejumpert lasse und
> dann 5V anschließe oder erst 5V ran und dann jumper.

Also leitet der 16U2 auf dem Board irgendwelche Stromsparmaßnahmen mit dem ersten Bootvorgang ein.

Was passiert denn jetzt, wenn Du folgendes machst:
- Reset vom 16U2 NICHT direkt mit GND verbinden
- sondern Reset vom 16U2 mit einem freien digitalen Pin des 2560 Controllers verbindest, z.B. 22
- und dann in der setup-Funktion:

Code: [Select]
#define RESET16U2 22  // Reset für 16U2 an Pin 22
pinMode(RESET16U2,OUTPUT);


Dann wird beim PowerOn der Reset-Pin zunächst mal nicht auf Low gesetzt, der 16U2 kann genau so normal starten wie der 2560, und sobald der 2560 sein setup ausführt, wird erst in dem Augenblick der Reset vom 16U2 auf OUTPUT/LOW gesetzt.

Das sollte dann doch die zusätzlichen 2mA aus Reply #14 einsparen?

Go Up