Go Down

Topic: Diminuire consumo Arduino (Read 1 time) previous topic - next topic

vectorel

Come forse avrete capito dagli altri topic che ho aperto, è da qualche giorno che sto usando l'mp3 shield e la touch shield della sparkfun per creare un lettore mp3, insieme all'arduino Fio e al Fio V3.

Il problema è che non ho ancora deciso quale Fio utilizzare definitivamente. La differenza di consumi tra Arduino Fio e Fio V3 è notevole (forse a causa del diverso microcontrollore?). Esattamente con lo stesso programma caricato e lo stesso hardware, il Fio (dotato di atmega328p 8mHz) consuma 27mAh e il Fio V3 (atmega32u4 8mHz) consuma 40mAh :smiley-eek: .

Mi chiedevo se c'era una libreria o delle funzioni per ridurre i consumi al minimo, pur mantenendo il funzionameto della scheda.
Secondo voi il consumo eccessivo è proprio dovito alla differenza del microcontrollore?

Michele Menniti

Il 32u4 è più recente, potrebbe anche essere, d'altra parte se tutto il resto è identico non può essere certo il circuito stampato a consumare di più :smiley-sweat:
Studiati la libreria "sleep.h", spegnendo le parti del micro che non ti servono puoi arrivare a consumi di pochi mA.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

pndtkd

#include <avr/power.h>
#include <avr/sleep.h>

vectorel

La libreria Enerlib (http://playground.arduino.cc/Code/Enerlib) va anche bene?

Quale delle funzioni elencate nel link mi permette di far spegnere le parti inutilizzate di arduino, pur facendolo funzionare?

leo72

Vectorel, il consumo del microcontrollore è una cosa, il consumo della scheda su cui è montato è un altro paio di maniche.Voglio dire, hai visto quant'è il consumo di tutto il resto? Cioè dello shield touch e dello shield Mp3? E' inutile mettere il chip in sleep se poi il resto del circuito resta acceso a consumare corrente.

vectorel

ma il consumo dell'atmega32u4 è effettivamente maggiore dell'atmega328p? o è più o meno lo stesso?

leo72

Sono simili. La più grossa differenza risiede nel fatto che l'Atmega32U4 integra un convertitore USB/serial per cui non necessita di un convertitore esterno per dialogare col computer. Inoltre il suo firmware può essere programmato per apparire ad un computer come una periferica HID.
Entrambi hanno 32 kB di Flash per i programmi. C'è qualche differenza sui pin e le funzioni di essi ma siamo lì.

Michele Menniti

Ma lui ha rilevato la differenza di consumi tra due schede che sostiene essre identiche, eccetto il micro; io non le ho guardate, ma se ha ragione la differenza può essere solo sul micro. Concordo sul fatto che se gli shield consumano, p.es. 2-300mA è inutile tentare di recuperare 20mA, ma quanto consumano gli shield?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

astrobeed


ma il consumo dell'atmega32u4 è effettivamente maggiore dell'atmega328p? o è più o meno lo stesso?


Più o meno è lo stesso a parità di condizioni d'uso, però può oscillare da pochi mA fino a diverse decine di mA a seconda di quello che sta facendo il micro e del clock, poi tocca aggiungere la corrente prelevata dai vari gpio dai carichi esterni, questi valori sono riferiti al micro in condizioni di lavoro standard, utilizzando i vari livelli di sleep e/o lo spegnimento delle periferiche non utilizzate è possibile ridurre il consumo del micro, in condizioni di idle, fino a pochi uA.

vectorel

Grazie per le risposte. Appena ho un attimo di tempo vedo di provare con qualche libreria e vi faccio sapere.

vectorel

Posso dire con cercezza che è l'atmega32u4 che consuma di più. Ho fatto un test con Arduino Fio, Fio V3 e Arduino Micro, caricando un programma vuoto (quindi facendo accendere solo il led di alimentazione).

Ecco i consumi

Fio V3 (atmega32u4) ---> 20mAh
Arduino Micro (atmega32u4) ---> 22mAh

Arduino Fio (atmega328p) ---> 5mAh  :smiley-eek:

è chiaro, quindi, che si tratta del microcontrollore.

Provando ad usare la enerlib, mettendo l'arduino in idle mode, il consumo non cambia... Non vi sembra strano? Anche se effettivamente gli unici pin che non uso sono i 6 analogici.

leo72

Se vuoi un vero risparmio enerfetico l'idle non basta. Ti serve una modalità più aggressiva (tipo power-down) e poi devi spengere materialmente le periferiche non in uso (lo sleep gli toglie solo il clock ma esse continuano a consumare corrente, sono in stand-by, non spente).

astrobeed


Arduino Fio (atmega328p) ---> 5mAh  :smiley-eek:


Attenzione che questa versione della Fio lavora a 8 MHz, comporta un assorbimento minore, inoltre l'ATmega 328p non ha l'interfaccia USB hardware, qualche mA lo prende quando è attiva anche se in attesa di comunicare.

vectorel

Avendo costruito un lettore mp3, il mio problema è quello di ridurre al minimo i consumi dell'Arduino Fio o del Fio V3 quando è collegato alla batteria, continuando a riprodurre musica.
Poi se quando lo collego al computer consuma di più non mi interessa, perchè in quel momento la batteria si ricarica.

Non so se mentre viene riprodotta la musica (quindi con scheda funzionante e accesa) c'è un modo per risparmiare un po' di energia.

pndtkd

in questo caso, utilizzando le lib dette prima è stato messo in idle in quanto occorreva mantenere attiva l' USART ma puoi usare SLEEP_MODE_PWR_SAVE per risparmiare ulteriormente

Saluti

Francesco

Code: [Select]

void sleepNow(){
  digitalWrite(13,LOW);
 
   set_sleep_mode(SLEEP_MODE_IDLE);   // sleep mode is set here
   
/* enables the sleep bit in the mcucr register
   so sleep is possible. just a safety pin
*/
   sleep_enable();         
   power_adc_disable();
   power_spi_disable();
   power_timer0_disable();
   power_timer1_disable();
   power_timer2_disable();
   power_twi_disable();
 
 
  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...

  power_all_enable();
 
   
 
   
}//fine funzione SLEEP

Go Up