Pages: 1 ... 5 6 [7] 8 9   Go Down
Author Topic: Come far lavorare ATmega a 128KHz di clock  (Read 7652 times)
0 Members and 1 Guest are viewing this topic.
Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 527
Posts: 12345
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

.......................
Che non so neanche la legge di Ohm a mente e che calcolo le resistenze con la funzione rnd()?  smiley-eek

Scusa! non avevo visto il post, mi ero immerso nel discorso filosofico di BrainBooster... smiley-eek-blue
La frase che ho riportato da oggi campeggia nel mio laboratorio, a ricordo del fatto che l'uomo può farsela addosso anche senza avere problemi di prostata; il calcolo a random è superlativo, il Dr. Ohm sarà anche un po' inczz ma di certo se la ride anche lui smiley-lol smiley-lol smiley-lol smiley-lol smiley-lol
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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Muahahahah  smiley-lol smiley-lol smiley-lol smiley-lol
Logged


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

inoltre ho un altro problema: a volte questo strab sensore resta aperto, in base alla posizione, e potrebbe restarlo per tutto il giorno (il tx per attivarsi vuole una sequenza low-high), quindi poiché gestisco già questa cosa via software, secondo te potrei mettere in sleep il micro anche col sensore aperto?

La soluzione è semplice, invece di risvegliare su uno stato logico ben preciso, che può essere sia LOW che HIGH, risvegli quando c'è un cambio di stato, quindi sia HIGH->LOW che LOW->HIGH, per farlo basta che metti la keyword CHANGE nella modalità di attivazione dell'interrupt.
Ti allego solo come viene modificata la funzione che mette in sleep, commenta, o cancella, l'attivazione dell'interrupt che si trova in SETUP in modo da attivare l'interrupt solo prima di entrare in sleep e disattivarlo quando ne esce.

Code:
void A_nanna()                      // funzione attivazione sleep
{
    /*
    Modalità sleep per ATmega 328p
  
    SLEEP_MODE_IDLE
    SLEEP_MODE_ADC
    SLEEP_MODE_PWR_DOWN
    SLEEP_MODE_PWR_SAVE
    SLEEP_MODE_STANDBY
    SLEEP_MODE_EXT_STANDBY
    
    */  
 
    attachInterrupt(0, sbadiglio, CHANGE); // riattiva l'interrupt
    sleep_mode();                          // mette in stato di sleep
    sleep_disable();      // disattiva la modalità sleep e riporta il micro a piena operatività
    detachInterrupt(0);  // disattiva l'interrupt
}

Ciao, finalmente ho potuto fare un po' di prove: tra tutte le modalità migliore è proprio la “SLEEP_MODE_PWR_DOWN”; ho configurato il chip a 1MHz (ma non cambia nulla in sleep) e l’ho montato in configurazione minimal, solo col led sul 13; non ho ancora messo il mio code; quando va “a nanna” il mio tester (è un buon Velleman ma niente a che vedere col tuo strumento professionale!) misura 95-96 µA, quindi molto più di quanto mi hai indicato. Il tester ha una risoluzione di 0,1µA, misurando il tx (che dovrà essere pilotato dal chip) a riposo mi dà 8-9µA, quindi la cosa mi sembra attendibile anche se certamente imprecisa. Quindi vorrei qualche info in più, se possibile.
Inoltre mi sfugge il passaggio
Quote
L'interrupt su INT0 è sempre attivo, se vuoi attivarlo e disattivarlo solo per lo sleep togli i commenti alle relative righe all'interno della funzione per lo sleep.
 
La funzione sleep non ha righe di commento, a parte l’elenco delle modalità.
Infine vorrei un chiarimento proprio sul “funzionamento” di questa funzione:
Code:

    attachInterrupt(0, sbadiglio, CHANGE); // riattiva l'interrupt
    sleep_mode();                          // mette in stato di sleep
    sleep_disable();      // disattiva la modalità sleep e riporta il micro a piena operatività
    detachInterrupt(0);  // disattiva l'interrupt
Mette in stato di sleep e subito dopo lo disattiva?
grazie
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: 120
Posts: 9181
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

“SLEEP_MODE_PWR_DOWN”; ho configurato il chip a 1MHz (ma non cambia nulla in sleep)

Ovvio perché durante lo sleep il micro è fermo.

Quote
misura 95-96 µA, quindi molto più di quanto mi hai indicato. Il tester ha una risoluzione di 0,1µA, misurando il tx (che dovrà essere pilotato dal chip) a riposo mi dà 8-9µA, quindi la cosa mi sembra attendibile anche se certamente imprecisa. Quindi vorrei qualche info in più, se possibile.

La misura la devi fare solo sull'alimentazione del micro, cioè direttamente dal suo pin, e non dall'alimentazione generale dove trovi sommati tutti i consumi e perdite.

Quote
Inoltre mi sfugge il passaggio
La funzione sleep non ha righe di commento, a parte l’elenco delle modalità.

La sleep non ha nessun commento, era riferito ai controlli per l'interrupt, non è detto che lo vuoi tenere attivo solo per la sleep, potrebbe servire anche per altre cose.

Quote
Mette in stato di sleep e subito dopo lo disattiva?

Si, quando vai in sleep il micro blocca l'esecuzione del programma per farla poi ripartire quando si sveglia, appena riparte la prima cosa da fare è disattivare lo sleep, le due funzioni invocate non fanno altro che settare in modo opportuno alcuni registri dell'ATmega.
Logged

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

Chiarissimo, un'ultima cosa, il mio codice (a parte ovviamente definizioni e setup) risiede nel loop, a grandi linee legge il pin 2, dove è attaccato il sensore, e comincia a verificarne il comportamento, ad un certo punto o scatta l'allarme oppure io resetto i contatori (falso allarme); quindi pensavo di rimettere tutto nel loop, ed inserire il richiamo dello sleep come ultima operazione del mio "reset". La funzione "sbadiglio", se ho ben capito, non mi serve, visto che l'interrupt non deve pilotare null'altro. E' corretto?
Grazie ancora!
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: 120
Posts: 9181
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La funzione "sbadiglio" è associata all'interrupt e ci deve essere per forza, se non devi fare nulla al suo interno la lasci vuota.
Logged

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

Bene, finalmente ho finito smiley-sweat
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.
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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


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

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.

Logged

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

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

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

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

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 453
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


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

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  smiley-eek 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.
@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.
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: 120
Posts: 9181
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

Pages: 1 ... 5 6 [7] 8 9   Go Up
Jump to: