Lamezia Terme
Offline
Shannon Member
Karma: 389
Posts: 10555
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #90 on: May 09, 2011, 09:34:14 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16983
Don't know what I do
|
 |
« Reply #91 on: May 09, 2011, 09:44:58 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 389
Posts: 10555
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #92 on: May 13, 2011, 04:16:52 am » |
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. 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 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: 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
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 76
Posts: 7539
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #93 on: May 13, 2011, 04:32:38 am » |
“SLEEP_MODE_PWR_DOWN”; ho configurato il chip a 1MHz (ma non cambia nulla in sleep)
Ovvio perché durante lo sleep il micro è fermo. 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. 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. 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
Shannon Member
Karma: 389
Posts: 10555
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #94 on: May 13, 2011, 04:41:33 am » |
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
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 76
Posts: 7539
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #95 on: May 13, 2011, 04:49:19 am » |
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
Shannon Member
Karma: 389
Posts: 10555
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #96 on: May 13, 2011, 12:12:13 pm » |
Bene, finalmente ho finito  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
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16983
Don't know what I do
|
 |
« Reply #97 on: May 13, 2011, 12:19:16 pm » |
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
Tesla Member
Karma: 76
Posts: 7539
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #98 on: May 13, 2011, 12:24:23 pm » |
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
Shannon Member
Karma: 389
Posts: 10555
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #99 on: May 13, 2011, 12:36:38 pm » |
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
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 389
Posts: 10555
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #100 on: May 13, 2011, 03:49:51 pm » |
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
|
|
|
|
|
0
Offline
Sr. Member
Karma: 0
Posts: 453
Arduino rocks
|
 |
« Reply #101 on: May 13, 2011, 04:06:26 pm » |
Gia spente le varie periferiche come ti avevo fatto notare in questo (o nell'altro) post ?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 16983
Don't know what I do
|
 |
« Reply #102 on: May 13, 2011, 04:22:45 pm » |
@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
Shannon Member
Karma: 389
Posts: 10555
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #103 on: May 13, 2011, 11:45:04 pm » |
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  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
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 76
Posts: 7539
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #104 on: May 13, 2011, 11:58:45 pm » |
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
|
|
|
|
|
|