Come far lavorare ATmega a 128KHz di clock

Bene, finalmente ho finito :sweat_smile:
Il circuito funziona alla perfezione, sulla breadboard, devo ora testare i tempi teorici direttamente sul posto.
Comunque l'assorbimento in attività è di circa 1,5mA, a riposo va da 90 a 200µA.
Userò una batteria di questo tipo (esempio)http://www.webtronic.it/pages/ITA/prodotto.asp?ProdottoID=247720 3,6V 1200mAh.
Ogni giorno mediamente il circuito è attivo un paio di minuti la mattina, altrettanti la sera, quindi la quasi totalità delle 24 ore è a riposo; ho provato a fare un conteggio e dovrebbe durare circa 7 mesi, quindi è poco.
Mi date conferma dei tempi teorici?
Ci sono ulteriori possibili interventi sul risparmio?
Appena mi arriva proverò il circuito col micro ATtiny85; oltre alle dimensioni risparmio energia?
Ma la libreria usata per lo sleep è compatibile con questo micro?
Tante domande, ma ora che è finalmente superata la prima fase devo cercare di concludere il lavoro, ogni dritta è utile.

L'Attiny85 ha 3 modalità di risparmio energetico. Sui consumi il produttore dà a 1,8V in powerdown un consumo di 0,1 uA.

menniti:
Comunque l'assorbimento in attività è di circa 1,5mA, a riposo va da 90 a 200µA.

Cosa c'è sul circuito che consuma corrente oltre al micro ?
Se vuoi aumentare l'autonomia devi tagliare tutti i consumi, non solo quello del micro.

leo72:
L'Attiny85 ha 3 modalità di risparmio energetico. Sui consumi il produttore dà a 1,8V in powerdown un consumo di 0,1 uA.

OK, devo capire se posso traslare tutto dall'atmega all'attiny; vediamo appena arriva.

astrobeed:

menniti:
Comunque l'assorbimento in attività è di circa 1,5mA, a riposo va da 90 a 200µA.

Cosa c'è sul circuito che consuma corrente oltre al micro ?
Se vuoi aumentare l'autonomia devi tagliare tutti i consumi, non solo quello del micro.

Ora non voglio fare lo scolaretto bugiardo: praticamente nulla; te lo illustro al volo:
Chip in configurazione minimal (quindi senza componenti esterni)
Un sensore (specie di microswitch) normalmente chiuso tra il piedino 4 (INT0) del chip e massa
Una resistenza da 10k sul piedi 18 che pilota un piccolo SCR che mi serve per attivare il tx; anche eliminando questo circuito non cambia nulla; non so dove mettere mano onestamente.

Qualche altra idea in merito al risparmio di consumo energetico; tra i lin che mi sono stati postati, alcuni mostrano un consumo di 2,1µA!!! E' pur vero che si tratta di chip smd, mentre io ho un normale chip DIL però 100 volte tanto di consumo mi sembra davvero troppo.

Gia spente le varie periferiche come ti avevo fatto notare in questo (o nell'altro) post ?

@Michele:
per capire se l'Attiny fa per te bisogna capire cosa fa esattamente il tuo circuito.
Se leggi solo da 1 pin ed usi un altro pin come output, non ci dovrebbero essere problemi.

ypkdani:
Gia spente le varie periferiche come ti avevo fatto notare in questo (o nell'altro) post ?

Ciao ypkdani, ho letto un milione di cose e alla fine :astonished: mi pare d'aver capito che lo spegnimento delle periferiche "manuale" presuppone un'impostazione di sleep "inferiore" alla power_save che, in base a quanto è scritto nei commenti del tutorial che mi avete linkato, dovrebbe essere la migliore possibile; comunque mi ero riservato di farla, lo stesso la prova, visto che usa un'altra libreria. Quindi ti farò sapere.

leo72:
@Michele:
per capire se l'Attiny fa per te bisogna capire cosa fa esattamente il tuo circuito.
Se leggi solo da 1 pin ed usi un altro pin come output, non ci dovrebbero essere problemi.

Ciao Leo, è un semplicissimo contaimpulsi, all'ingresso il sensore dell'antifurto, all'uscita il tx wireless, in mezzo il micro che mi gestisce gli impulsi spurii ed i falsi contatti via software, ecco perché ho già ritirato gli ATtiny, ma l'idea era soprattutto di fare una cosa piccola e che non consumi. I contaimpulsi commerciali che ho visto in giro costano un sacco di soldi, sono ingombrandi e soprattutto consumano tanto; se disponessi di un'alimentazione a rete o da centralina avrei risolto tutto, ma questa è l'unica strada possibile.
Tieni presente che non posso scendere a 1,8V, almeno in questa fase, visto che dispongo (e vorrei usarle prima che scadono, dato il costo che hanno) di una decina di batterie del tipo che ho detto. Poiché gli ATtiny arrivano settimana prox, intanto volevo affinare le tecniche e comunque avere una soluzione valida nel caso non riuscissi a farla andare con buoni risultati.

menniti:
mi pare d'aver capito che lo spegnimento delle periferiche "manuale" presuppone un'impostazione di sleep "inferiore" alla power_save che,

Col modo power_down vengono spente tutte le periferiche non in uso, vale per tutti gli ATmega che supportano tale modaliltà ATtiny inclusi.
Non c'è nessuna differenza tra modelli in case SDM e in case DIP per quanto riguarda le caratteristiche elettriche, in power down il consumo è circa 0.1 uA sempre e comunque.
Il valore di corrente che misuri durante lo sleep è altissimo, ti ripeto la mia domanda, la misura l'hai fatta direttamente sulla batteria oppure direttamente sul pin Vdd del micro ?
Io la prova l'ho fatto con un ATmega 328p, c'è la possibilità che la libreria non esegua tutte le necessarie operazioni per l'ATtiny, però la libreria non è limitata ad Arduino perché fa parte del compilatore AVRgcc, e qui il discorso si estende molto, quindi mi pare strano che non funzioni in modo corretto con i modelli di micro supportati, un bug simile è macroscopico e sarebbe stato corretto subito.
Oggi provo a dare una controllata a quello che fa esattamente la libreria con gli ATtiny e verifico se setta opportunamente tutti i vari registri per lo sleep, ma non credo che il problema sia questo.

astrobeed:

menniti:
mi pare d'aver capito che lo spegnimento delle periferiche "manuale" presuppone un'impostazione di sleep "inferiore" alla power_save che,

Col modo power_down vengono spente tutte le periferiche non in uso, vale per tutti gli ATmega che supportano tale modaliltà ATtiny inclusi.
Non c'è nessuna differenza tra modelli in case SDM e in case DIP per quanto riguarda le caratteristiche elettriche, in power down il consumo è circa 0.1 uA sempre e comunque.
Il valore di corrente che misuri durante lo sleep è altissimo, ti ripeto la mia domanda, la misura l'hai fatta direttamente sulla batteria oppure direttamente sul pin Vdd del micro ?
Io la prova l'ho fatto con un ATmega 328p, c'è la possibilità che la libreria non esegua tutte le necessarie operazioni per l'ATtiny, però la libreria non è limitata ad Arduino perché fa parte del compilatore AVRgcc, e qui il discorso si estende molto, quindi mi pare strano che non funzioni in modo corretto con i modelli di micro supportati, un bug simile è macroscopico e sarebbe stato corretto subito.
Oggi provo a dare una controllata a quello che fa0,5mA esattamente la libreria con gli ATtiny e verifico se setta opportunamente tutti i vari registri per lo sleep, ma non credo che il problema sia questo.

Hai ragione scusa, davo per scontato... Io ho misurato sulla batteria, ma sulla bread c'è il solo ATmega328, infatti la misura resta tale anche eliminando il circuito sul pin di uscita; non mi sono disperato a togliere il sensore perché mi dava il change e mi risvegliava il micro, ma è uno switc NC collegato tra il pin 4 del micro e la massa; a meno che i consumi non siano dovuti ai 7-8 jumper che mi portano l'alimentazione al micro; altra cosa: io come detto ho impostato via fuses (per non usare quarzo, ecc) il micro a 1MHz e lo alimento a 3,6V; a 16MHz il consumo sale a 570µA. Per ora mi interessa risolvere con AT328, anche perché dovrei realizzare un'altra applicazione in cui il tiny sarebbe inadeguato. Ti chiedo una grande cortesia: puoi descrivermi come hai montato il chip e misurato il consumo? Io nei primi test ho copia/incollato il tuo code per lo sleep e mi dava 96µA, ecco perché vorrei capire cosa hai fatto.

EDIT: aggiungo che questo consumo di 96µA, in alcune combinazioni di funzionamento, andando in sleep me lo dà ancora, ma la maggior parte delle volte e 200µA.

Piccolo chiarimento: dovendo considerare il consumo reale totale al fine di stimare la durata della batteria, perchè è errato misurare la tensione ai capi di essa??

Altra cosa, perchè non sottoporre il cavo di l'alimentazione delle periferiche esterne all'azione di un transistor che può quindi accenderle e spegnerle in prossimità dello sleep mode?

GianfrancoPa:
Piccolo chiarimento: dovendo considerare il consumo reale totale al fine di stimare la durata della batteria, perchè è errato misurare la tensione ai capi di essa??

E' il chiarimento che ho chiesto, non ho capito infatti se astrobeed pensava che ci fossero consumi dovuti a componenti esterni al micro, o se sta pensando a possibili dispersioni dovute alla bread e jumpers vari.

Altra cosa, perchè non sottoporre il cavo di l'alimentazione delle periferiche esterne all'azione di un transistor che può quindi accenderle e spegnerle in prossimità dello sleep mode?

Semplicemente perché non ce ne sono, oltre al sensore (meccanico) c'è un tx autoalimentato a 12V; l'SCR usato per attivare il tx è pilotata dal pin OUT del chip mediante una r da 10K e, in modalità sleep, non viene alimentato.

Questo link, che mi aveva indicato Marco Benini, http://www.rocketscream.com/blog/2011/04/26/mini-ultra-8-mhz-current-consumption-part-2/#more-349 mi pare possa essere una buona prova, essendo (a occhio :astonished:) un'implementazione del code che mi ha dato astrobeed; salvo altre info è la prova che vorrei fare appena possibile.

menniti:
Per ora mi interessa risolvere con AT328, anche perché dovrei realizzare un'altra applicazione in cui il tiny sarebbe inadeguato. Ti chiedo una grande cortesia: puoi descrivermi come hai montato il chip e misurato il consumo? Io nei primi test ho copia/incollato il tuo code per lo sleep e mi dava 96µA, ecco perché vorrei capire cosa hai fatto.

La corrente io l'ho misurata sul pin Vcc e Avcc (7 e 20), messi in parallelo, del micro, mi permetto di insistere su questo punto perché è il solo modo per valutare l'esatta corrente richiesta dal micro, se misuri dalla batteria hai solo l'immagine complessiva del tutto, ma non delle singole parti.
Per dipanare la matassa è indispensabile accertare che il consumo sia effettivamente del micro e non di qualcosa che sta attorno.
Tenuto conto che la prova la stai facendo con un ATmega 328 è inutile che mi metto a controllare la libreria visto che le condizioni sono le stesse, io ho per il test ho usato un Arduino, ho piegato leggermente i pin 7 e 20 in modo da lasciarli estratti dallo zoccolo e ho portato il +5V tramite il multimetro.
Le mie condizioni di test sono ancora più gravose delle tue visto che utilizzo l'alimentazione a 5V e il clock a 16MHz ed ottengo senza problemi il consumo minimo previsto in sleep.

Forse ho capito perché hai tutta quella corrente, nel mio test il pin di ingresso è tenuto alto dalla pull up interna e si aspetta una chiusura verso GND per il risveglio.
Nella tua condizione operativa è l'opposto, il pin normalmente si trova a 0, contatto chiuso, per poi andare a 1 per il risveglio.
Le pull up interne dell'ATmega hanno un valore tipico di circa 20k, se il pin è chiuso verso GND con 3.3V scorrono circa 165 uA attraverso la pull up, e questo succede indipendentemente dalla condizione di sleep o funzionamento normale.
Rifai la misura senza il sensore, cioè pin libero, e dovresti trovare un assorbimento compreso tra 100 e 200 nA per il solo micro.

Ho fatto queste prove:
1 - Ho inviato ad Arduino lo sketch sleep da solo
Ho tolto il chip e l'ho messo sulla breadboard, ma senza quarzo e C, alimentato a 3,6v.
Naturalmente c'ha messo un bel po' a fare i lampeggi (li ho ridotti a 4)
Risultato: 112,7µA

2 - Per scrupolo ho poi montato quarzo e C
Risultati:
alim. 5v: 142µA
alim. 3,6v: 115µA (l'ho ridotta direttamente mentre era in sleep)

3 - Dopo ho provato il tester:
3,6V applicati direttamente ad una R di 330K mi pare debbano dare 10,9µA circa
Risultato: 10,2µA
Non so più dove sbattere la testa :fearful:
Ti prego di credermi, se vuoi ti posto la foto con la misurazione del multimetro: sulla breadboard c'è il deserto, solo il chip e i ponticelli per collegare l'alimentazione.
Non è che avevi usato altri elementi di risparmio?
Grazie.

menniti:
Non è che avevi usato altri elementi di risparmio?

No, lo sketch che ho utilizzato per la prova è quello che ho postato.

Proverò con lo spegnimento delle periferiche, con l'altra libreria, è davvero un mistero.
Grazie comunque per tutta la pazienza che hai avuto, in ogni caso meglio 200µA che 3mA :slight_smile:
Un'ultima cosa, visto che 100µA se li mangia la pull-up con lo switch a massa stavo pensando di risparmiare almeno questi usando meglio il sensore: è un NC ma il problema è che, essendo rotante, a volte resta proprio sulla posizione aperta, quindi può capitare l'una o l'altra situazione; la pull-up l'ho dovuta mettere (prima era esterna) perché altrimenti il circuito a volte andava in loop, a causa dei troppi disturbi della meccanica. Hai un'idea su come poter gestire meglio questa cosa?
Tieni presente che il programmino che ho scritto ormai prevede ogni situazione, quindi comunque mi va in sleep, solo che se ci va col sensore in NC consuma 200µA, altrimenti ne consuma "solo" 100µA, e non posso eliminare la pull-up; forse potrei esternamente portarla ad un valore più elevato, tipo 47K o maggiore, oppure hai un'idea su come gestire la logica, magari collegandolo a 5V?

Stamattina ho fatto altri test.
Hardware utilizzato:

2 Luigino 328
1 Luigino 1000pads (stand alone)

Su tutte e tre le schede, quindi tre ATmega 328p diversi, il micro l'ho inserito con i pin 7 e 20 sollevati. L'alimentazione arriva da USB per le due 328 e da alimentatore esterno per la 1000pads, i pin 7 e 20 degli ATmega sono collegati in parallelo e alimentati dalla presa 5V sul connettore delle schede attraverso il multimetro, con questa configurazione escludo qualunque corrente estranea al micro.
Lo sketch utilizzato è lo stesso che ho già postato con la variante del CHANGE per l'interrupt, se tengo il pin 2 collegato a GND, quindi passa corrente attraveso la pull interna misuro queste correnti in stato di sleep:

L328 A 189 uA
L328 B 169 uA
1000pads 201 uA

Valori in linea con quanto atteso tenendo conto che il valore della pull up interna può essere compreso tra 20 e 50 kohm, 5V/20k = 250 uA, e le tolleranze sono alte in questo caso.

Staccando il GND dal pin 2 ottengo queste correnti:

L328 A 135 nA
L328 B 157 nA
1000pads 123 nA

Grazie astrobeed, temo di non meritare tutta questa pazienza :blush: :blush:
Praticamente i valori riscontrati col pin 2 (che poi sarebbe il 4 del chip?) a massa sono quelli che ho io col sensore in NC, solo che io alimento a 3,6V e lavoro a frequenza inferiore.
Ora, mentre tu levando il collegamento a GND hai una calo di consumo di circa 1000 volte (da 160µA medi a 160nA medi), il mio semplicemente dimezza (da 200µA a 100µA), è come se il pin 4 fosse ancora collegato a massa ma con resistenza raddoppiata.
Allora l'unica possibilità è una dispersione sulla breadboard o qualcosa di interno al chip, ma di chip ne ho provati 4.
Farò queste prove:
1 - Dal tuo sketch con "change" disattivo la pull-up
2 - Cambio posizione del chip sulla breadboard
3 - Faccio la tua stessa prova: chip su Arduino con pin 7 e 20 alzati, collegati in parallelo tra loro e tramite multimetro alla presa 5V
L'altra cosa che mi fa pensare è che le Luigino (ho una 328 prototype anch'io) lavorano col bootloader della 2009, quindi provo anche in tal senso.
Ti faccio sapere più tardi.
Grazie ancora.