Go Down

Topic: Regolatore di tensione per pannello solare (Read 27298 times) previous topic - next topic

leo72

Mi sto un attimino inc...arrabbiando...
La routine di gestione dello sleep e dell'int che avevo postato giorni fa in un thread separato non ne vuol sapere di funzionare sull'Atmega standalone! Non riesco a svegliare il micro una volta messo in letargo, incredibile!
Eppure lo sketch provato sull'Arduino funzionava perfettamente. Ho provato anche a cambiare fronte di controllo, da RISING a LOW (per via del fatto che LOW è eseguito anche in maniera asincrona) eppure pare non legga il segnale sul piedino. Ho provato anche a ponticellarlo fisicamente a GND (quindi più LOW di quello...) eppure nulla! Non si sveglia....
Non vorrei fosse come sull'Attiny84 che, sulla carta, lo sleep unito al pinchange funziona in un certo modo, poi nella realtà ho dovuto disattivare manualmente i piedini che gestivano l'I2C perché il micro si svegliava con le tensioni lette su SDA e SCL... Ora qui non so cosa gli dia noia....
COMINCIO A ODIARE GLI ATMEL.... :0 :0

Michele Menniti

Caaaalma :~
Io il 328 l'ho provato, anche se da solo, con una routine che era giusto un led che faceva qualche lampeggio e poi se ne andava a dormire. Con attachInterrupt LOW si riaccendeva all'istante; poiché avevo bisogno del CHANGE allora ho implementato la PinChangeInterrupt per usare attachPCInterrupt CHANGE, e ha funzionato lo stesso. Tu non avevi messo mano ad una di queste librerie non molto tempo fa? Non è che....
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

leo72

No, le avevo toccate solo in merito al discorso Tiny. Per l'Atmega328 ho usato il comando standard attachInterrupt e detachInterrupt, niente roba "manomessa". Tant'è che i test sull'Arduino erano andati positivamente, mentre sulla breadboard non c'è verso di risvegliare il micro.
Il problema è che sull'Arduino non avevo NIENTE di collegato alla scheda, qui ho di tutto e di più collegato a quel malefico chip.... vai te a sapere cos'è che gli dà noia!

Che poi mi sono accorto di una cosa: che quel "qualcosa" che gli dà noia gli dà noia da subito perché il micro, secondo il codice, dovrebbe andare SUBITO in letargo (così faceva sull'Arduino) mentre qui si accende il display e si attiva il menu interattivo che è DOPO la funzione di chiamata dello sleep per cui c'è qualche segnale che rompe le balle... UFFA...  :smiley-roll-blue:

leo72


Caaaalma :~
Io il 328 l'ho provato, anche se da solo, con una routine che era giusto un led che faceva qualche lampeggio e poi se ne andava a dormire. Con attachInterrupt LOW si riaccendeva all'istante; poiché avevo bisogno del CHANGE allora ho implementato la PinChangeInterrupt

PS:
ecco, tu dicesti (e mi confermi ora) di aver usato la PinChangeInterrupt per il 328. Ma quale? Quella del Tiny core?

Michele Menniti



Caaaalma :~
Io il 328 l'ho provato, anche se da solo, con una routine che era giusto un led che faceva qualche lampeggio e poi se ne andava a dormire. Con attachInterrupt LOW si riaccendeva all'istante; poiché avevo bisogno del CHANGE allora ho implementato la PinChangeInterrupt

PS:
ecco, tu dicesti (e mi confermi ora) di aver usato la PinChangeInterrupt per il 328. Ma quale? Quella del Tiny core?

Ecco, avevo glissato perché mi era venuto proprio il dubbio, ora direi di essere più che certo che esite quella specifica per il 328, e che poi ho scaricato quella del tiny, avendo spostato tutto sui nanetti; vedo che nelle mie libraries c'è una PinChangeInt ed una PinChangeInterrupt, credo proprio che la prima sia quella specifica per il 328, ce l'hai sulla posta.  XD
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

leo72


leo72

Non mi riesce usarla....
sarò rinco, ma tu scrivi attachPCinterrupt, nella lib c'è PCattachInterrupt... poi non capisco: devo specificare il PCINT oppure il piedino a cui agganciare l'evento? Non c'è una documentazione?

Michele Menniti

#187
Aug 20, 2011, 12:01 am Last Edit: Aug 20, 2011, 12:11 am by menniti Reason: 1

Non mi riesce usarla....
sarò rinco, ma tu scrivi attachPCinterrupt, nella lib c'è PCattachInterrupt... poi non capisco: devo specificare il PCINT oppure il piedino a cui agganciare l'evento? Non c'è una documentazione?

No, sono io che faccio confusione con quella della Tiny che sto usando sempre :smiley-red:; io ricordo di aver usato, sempre per le prove, il pin 4 del 328 (INT0), quindi uno dei pin preposti (l'altro è il 5, INT1); forse il PCINT ti permette di usare un pin diverso da questi due. Ti ho mandato ciò che ho, ma ricordo che nella libreria c'era scritto tutto, solo che io non ci capivo nulla, poi BB mi consiglio di usare quel comando; intanto che fai le prove cerco su Internet

E' nel Playground: http://www.arduino.cc/playground/Main/PinChangeInt

Dice: PCattachInterrupt(pin,userFunc,mode)
pin lo stabilisci tu, userFunc è la function da lanciare al risveglio, mode la tipologia di evento che deve attivare l'interrupt

C'è la versione aggiornata al 22/7/2011: http://code.google.com/p/arduino-pinchangeint/downloads/detail?name=PinChangeInt.zip&can=2&q=
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

leo72

No, fermo un attimo... INT0 è sul pin PD2, che corrisponde al piedino 4 ed al pin di Arduino D2 (datasheet pag. 89). Mi confermi, vero?  :smiley-sweat:

Michele Menniti


No, fermo un attimo... INT0 è sul pin PD2, che corrisponde al piedino 4 ed al pin di Arduino D2 (datasheet pag. 89). Mi confermi, vero?  :smiley-sweat:

E io che ho scritto?
Quote
io ricordo di aver usato, sempre per le prove, il pin 4 del 328 (INT0),
ho parlato di 328 non di Arduino, stai lavorando in stand alone :)
Comunque tutte le info che ho aggiunto dovrebbero essere risolutive.
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

leo72

Quote

E io che ho scritto?

Ah, sì, è vero... sarà il caldo (33°C in soffitta dove ho il mio "angolino") unita all'ora... scusa.

La versione aggiornata l'ho scaricata. Cmq non mi funziona: c'è qualcosa in standalone che gli dà noia... non si risveglia, posso provare quanto voglio. Ma tu che modalità energetica usavi, PWR_DOWN o PWR_SAVE? Io uso PWR_SAVE per via del fatto che devo usare il TIMER2. Con PWR_DOWN funziona (ho già provato) ma non va il TIMER2 (giustamente), però l'INT0 dovrebbe funzionare con entrambe. O sono io il solito rinco che non ha capito qualcosa?

Oggi a casa riproverò sull'Arduino per capire se ci sono davvero interferenze dagli altri piedini. Cmq mi sto un po' scassando le balle con 'ste cose, ci sto perdendo più tempo, in proporzione, che a fare il resto.

BrainBooster

non è che ti stai confondendo fra INT0 e PCINT0? :smiley-roll:

leo72

Relativamente a cosa?

Cmq, lo stesso codice sull'Arduino senza nulla collegato ai pin funziona, messo sull'Atmega standalone non va.

BrainBooster


leo72

Sul datasheet, pag. 70, c'è scritto:
Quote
Note that recognition of falling or rising edge
interrupts on INT0 or INT1 requires the presence of an I/O clock, described in "Clock Systems
and their Distribution" on page 26. Low level interrupt on INT0 and INT1 is detected asynchro-
nously. This implies that this interrupt can be used for waking the part also from sleep modes
other than Idle mode. The I/O clock is halted in all sleep modes except Idle mode.

OK. Non uso FALLING o RISING perché sono sincroni ed in PWR_SAVE l'I/OCLK non va per cui adopero il livello LOW, che è asincrono e, stando al datasheet, dovrebbe essere intercettato sempre. Così è sull'Arduino, così non è sullo standalone.

PS:
No, lo standalone gira a 8 MHz con oscillatore interno abilitato, BOD attivo a 2,7V, nessuno spazio per il bootloader.

Go Up