Pages: [1] 2   Go Down
Author Topic: Diminuire consumo Arduino  (Read 1221 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 134
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12568
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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

Latina
Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 1
Posts: 134
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 329
Posts: 22770
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 134
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 329
Posts: 22770
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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ì.
Logged


Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 569
Posts: 12568
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9467
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 134
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Full Member
***
Karma: 1
Posts: 134
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 329
Posts: 22770
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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).
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9467
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 134
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Latina
Offline Offline
Full Member
***
Karma: 0
Posts: 147
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

Pages: [1] 2   Go Up
Jump to: