Se sei già registrato           oppure    

Orario: 19/03/2024 03:09:36  

 

Energia Alternativa ed Energia Fai Da Te > PPTEA

VISUALIZZA L'ALBUM


PPTEA Timer CIclico
FinePagina

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 11/01/2015 08:20:43

Ciao a tutti.
Questo che propongo e' un timer ciclico, ossia un contatore che una volta finito un conteggio stabilito, cambia lo stato attuale portandosi in quello opposto e ricomincia a contare per poi passare nuovamente a quello precedente.
Esempio: partendo da uno stato iniziale di off (che persiste per tutto il tempo impostato) passa a secondo stato di on (sempre x lo stesso tempo) per poi ricominciare e procedere all'infinito.
Gli usi che se ne possono fare sono vari, magari modificando il codice, i tempi e via dicendo, ma quello che mi ha portato a farlo e' stata la necessita' nel mio lavoro di avere un timer che facesse questo genere di cose.
Premetto che mi occupo di manutenzione di elettrodomestici e a volte mi capitano frigoriferi che per mancanza di gas rimangono sempre con il compressossore inserito, senza mai staccare.
Questo a causa delle temperature di lavoro delle sonde o termostati (normalmente posizionati sugli evaporatori ormai fusi nella plastica del frigorifero) che si aggirano intorno ai -13 gradi (minimo)
Naturalmente un circuito leggermente insufficiente che riesce a portare l'evaporatore a -10/--11 fredda la cavita' frigo a tal punto da congelare le cose all'interno , ma non suffiente a far staccare il compressore che a lungo andare si danneggerebbe.
Cosi' da anni quando capitano questi casi, prima di far cambiare un prodotto nell'imminente, consiglio ai clienti di posizionare un timer (tipo caldaia) sulla presa in modo da fermare in modo forzato il compressore.
In questo modo il frigo va avanti ancora per qualche anno.
Cosi', l'idea di fare un timer che svolga questa funzione, naturalmente basato sul tanto amato PPTEA.
Premetto che un timer simile lo utilizzo personalmente a casa mia sempre per pilotare frigo e congelatore, ma in questo caso il motivo dell'uso e' diverso.
I due apparecchi non hanno alcun problema di gas, ma visto che la maggior parte dell'anno vengono alimentati da un inverter 1200/2400, che altrimenti non riuscirebbe ad alimentarli contemporaneamente.
In questo caso per evitare di farlo scattare nel passaggio tra uno e l'altro (i compressori hanno uno spunto in partenza molto elevato), ho inserito anche una pausa intermedia.
Ecco di seguito le prime righe per far funzionare il timer.


PRAGMA NO_NUM_LINE
PRAGMA EXTENDED4K_EEPROM 

' CODICE CHE  VISUALIZZA IL TEMPO TRASCORSO ED IL TEMPO RIMANENTE 
' DI UN PREDEFINITO VALORE (MINUTI)
' TRA I DUE VALORI VIENE VISUALIZZATO LO STATO DEL BIT 5 CHE PASSA DA OFF AD ON
' MENTRE NELLA SECONDA RIGA AL CENTRO VIENE VISUALIZZATO IL TEMPO TOTALE 
' TRASCORSO D/H/M

SETIO=&B100000000000000001 'DISPLAY 2 WIRE UN INGRESSO E RESTO USCITE
STATO="OFF>"
GOSUB :LONG_SOUND
CONSTANT MINUTI=20
LCDCLEAR

:START
OUTBIT(5)=B
LCDPOS=&H17
LCDWRITE=""&STATO
SEC_SUBTOT+=SEC_TRASC 'SECONDI SUB TOTALI

:FASE_1
SEC_TRASC=INT(TIMER) 'SECONDI TRASCORSI
SEC_RIMAN=(MINUTI*60)-SEC_TRASC 'SECONDI RIMANENTI
SEC_TOT=SEC_SUBTOT+SEC_TRASC                                             'SECONDI TOTALI
LCDPOS=&H11
LCDWRITE=MESSAGE

LCDPOS=&H1C
LCDWRITE=RIGHT("0"&SEC_RIMAN/60 MOD 60,2)&":"&RIGHT("0"&SEC_RIMAN MOD 60,2)
LCDPOS=&H11
LCDWRITE=RIGHT("0"&SEC_TRASC/60 MOD 60,2)&":"&RIGHT("0"&SEC_TRASC MOD 60,2)
LCDPOS=&H26
LCDWRITE=SEC_TOT/86400&":"&RIGHT("0"&SEC_TOT/3600 MOD 24,2)&":"&RIGHT("0"&SEC_TOT/60 MOD 60,2) 
IF SEC_RIMAN>0 THEN :FASE_1
PWMDC=0
B++
IF B=2 THEN GOSUB :AZZERA_B
IF B=0 THEN GOSUB :STATO_USCITA_OFF
IF B=1 THEN GOSUB :STATO_USCITA_ON
GOTO :START

:AZZERA_B
CLR B
RETURN

:STATO_USCITA_OFF
STATO="OFF>"
GOSUB :LONG_SOUND
RETURN

:STATO_USCITA_ON
STATO=" ON>"
GOSUB :SHORT_SOUND

RETURN

:SHORT_SOUND
FRQ_DO6,750
RETURN

:LONG_SOUND
FRQ_DO6,250
RETURN

END



Modificato da ecologix1971 - 22/01/2015, 09:03:47
 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 11/01/2015 09:04:08

Mi sono permesso di sistemare il tuo messaggio... Grazie per aver postato il tuo codice, può servire da spunto per altri... vorrei che lo facessero più persone (o siamo i soliti quattro gatti ad usare il PPTEA?)... Ma lo so, fa più figo dire che si usa Arduino...



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 11/01/2015 09:16:56

Grazie marco,
Cosi e' certamente piu' leggibile, comunque per me e' piu' figo dire di aver fatto qualcosa con il PPTEA anziche' con l'arduino.
Non dimentichiamoci che il PPTEA nasce dal forum....grazie a bolle naturalmente.
ps. Ma come hai fatto a mettere il codice in evidenza rispetto al resto del messaggio, te lo chiedo cosi' la prossima volta ti tolgo un po' di lavoro...

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 11/01/2015 10:03:08

... uso (pre)(code) davanti e (/pre)(/code) dopo il codice... le parentesi vanno quadre [] al posto delle tonde, ma se le metto fà un macello il post... se vai a modificare il tuo post lo vedi. Ciao!



Modificato da MarKoZaKKa - 11/01/2015, 10:06:53


---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 11/01/2015 10:56:19

Ok, grazie

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 11/01/2015 13:52:10

Ho apportato una piccola modifica al codice inserendo la rilevazione della temperatura con lm35dz sul bit0




<pre>
PRAGMA NO_NUM_LINE

PRAGMA EXTENDED4K_EEPROM ' MEMORIA ESTERNA 24C32



' TIMER 2015_2

' STARTED: 11_01_2015
' FINISHED 
' FIRMWARE 4_2_4
' MEMORY 4K _26C32 (OR 2K_24C16)
' DEFAULT 2 WIRE DISPLAY

' DEFINIZIONE VARIABILI/COSTANTI

' DISPL     = ILLUMINAZIONE DISPLAY 0=SPENTO 1=ACCESO
' MINUTI  = TEMPO DI ATTIVAZIONE CONTANTORE ON ED OFF ESEMPIO :MINUTI=10 (10 MIN ON & 10 MIN OFF)
' STATO    = MESSAGGIO "ON>" OPPURE "OFF>"
' LOAD      = CARICO 0=OFF 1=ON
'NUM_CAMP = NUMERO CAMPIONAMENTI
'TEMP             = TEMPERATURA ISTANTANEA
'CAMP            = CAMPIONE DI TEMPERATURA
'TOT_TEMP   = SOMMA TEMPERATURA
'MED_TEMP  = MEDIA TEMPERATURA

'DEFINIZIONE BIT

' BIT   5 = OUT 
' BIT 14 = ILUUMINAZIONE DISPLAY


'  IMPOSTAZIONI INIZIALI

'SETIO=&B100000000000000001 'DISPLAY 2 WIRE UN INGRESSO E RESTO USCITE

SETIO=&B000000000000000001  'DISPLAY 6 WIRE UN INGRESSO E RESTO USCITE

'CADS1


STATO="OFF>"
GOSUB :LONG_SOUND
GOSUB :LIGHT_ON

CONSTANT MINUTI=10
CONSTANT NUM_CAMP=300

GOTO :PRESENTAZIONE

:START

OUTBIT(5)=LOAD
OUTBIT(14)=DISPL
LCDPOS=&H17
LCDWRITE=""&STATO


 
 SEC_SUBTOT+=SEC_TRASC                                                             'SECONDI SUB TOTALI

:FASE_1

IF DISPL=0 THEN :FASE_0

IF TIMER>3 THEN GOSUB :LIGHT_OFF

:FASE_0

 SEC_TRASC=INT(TIMER)                                                                  'SECONDI TRASCORSI
 SEC_RIMAN=(MINUTI*60)-SEC_TRASC                                         'SECONDI RIMANENTI
SEC_TOT=SEC_SUBTOT+SEC_TRASC                                             'SECONDI TOTALI
LCDPOS=&H11
 LCDWRITE=MESSAGE
 
LCDPOS=&H1C
 LCDWRITE=RIGHT("0"&SEC_RIMAN/60 MOD 60,2)&":"&RIGHT("0"&SEC_RIMAN MOD 60,2)
 LCDPOS=&H11
LCDWRITE=RIGHT("0"&SEC_TRASC/60 MOD 60,2)&":"&RIGHT("0"&SEC_TRASC MOD 60,2)


 LCDPOS=&H27
'LA LINE SOTTO E' COMPRENSIVA DEI GIORNI TOTALI
 LCDWRITE=SEC_TOT/86400&":"&RIGHT("0"&SEC_TOT/3600 MOD 24,2)&":"&RIGHT("0"&SEC_TOT/60 MOD 60,2) 
 'LCDWRITE=""&RIGHT("0"&SEC_TOT/3600 MOD 100,2)&":"&RIGHT("0"&SEC_TOT/60 MOD 60,2) 


:RILEVA_TEMPERATURA


CAMP=(CAMP+1) MOD NUM_CAMP
TEMP=CADS1*CAD_TO_TEMP
TOT_TEMP+=TEMP
IF CAMP=(NUM_CAMP-1) THEN :AGGIORNA_TEMPERATURA

IF SEC_RIMAN>0 THEN :FASE_1
 PWMDC=0
 ' 
LOAD=(LOAD+1) MOD 2


IF LOAD=0 THEN GOSUB :STATO_USCITA_OFF
IF LOAD=1 THEN GOSUB :STATO_USCITA_ON

GOSUB :LIGHT_ON

GOTO :START


:STATO_USCITA_OFF

STATO="OFF>"
GOSUB :LONG_SOUND
RETURN

:STATO_USCITA_ON

STATO=" ON>"
GOSUB :SHORT_SOUND

RETURN

:SHORT_SOUND

FRQ_DO6,250
RETURN


:LONG_SOUND

FRQ_DO6,750
RETURN

:LIGHT_OFF

DISPL=0
OUTBIT(14)=DISPL
RETURN

:LIGHT_ON

DISPL=1
OUTBIT(14)=DISPL
RETURN

:PRESENTAZIONE

LCDCLEAR
GOSUB :LIGHT_ON
LCDPOS=&H13
LCDWRITE="TIMER "&CHR(38)&"2015_2"
LCDPOS=&H22
LCDWRITE="ECOLOGIX  1971"
WAITS 3
LCDCLEAR
PWMDC=0

GOTO :START


:AGGIORNA_TEMPERATURA

GOSUB :SHORT_SOUND
GOSUB :LIGHT_ON

MED_TEMP=TOT_TEMP/NUM_CAMP


LCDPOS=&H21
LCDWRITE=""&LEFT(MED_TEMP,4)&"c"

WAITS 1

CLR TOT_TEMP

GOTO :RILEVA_TEMPERATURA


END
</pre>


Questa verra' visualizzata all'inizio della 2˚ riga, mentre i relativi tempi di on ed off si trovano sulla 1˚ come anche lo stato attuale del carico on/off.
Sulla 2˚ riga accanto alla temperatura (ricavata con una media di 300 campioni) trova spazio un contatore totale del tempo trascorso dall'inizio del conteggio.
Da notare che non viene utilizzato real clock, bensi' il timer interno al pic



Modificato da ecologix1971 - 11/01/2015, 13:57:59
 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 17/01/2015 18:05:40

Eccomi qua.
In questi giorni ho apportato numerose modifiche al timer rendendolo piu' versatile ai diversi usi possibili.
1) e' possibile inserire i tempi di on ed off dal programma in esecuzione entrando nel menu set up.
2) si puo' far partire il timer da qualsiasi stato on oppure off a seconda delle necessita', funzione "reverse"
3) si possono ripetere i cicli impostati all'infinito con la funzione "non stop".
4) c'e' una funzione "random" per emettere cicli a tempo casuale
5) possibilita' di togliere l'audio mediante "sound effect"
6) visualizzazione dei cicli fatti e previsti, nonche' le varie opzione scelte
7) visualizzazione della durata dei cicli
8) possibilita' di uscire dal conteggio in qualsiasi momento
9) memorizzazione dei valori (tutti opzioni comprese) all'interno della eeprom
10) melodia di fine ciclo se l'audio e' attivo
11) al momento basta
Spero possa essere di aiuto a qualcuno.
Prevedo di fare ulteriori modifiche tempo permettendo.
Al momento ce ne sono due sulla mensola del camino che girano da qualche giorno.
Buona domenica
Ecologix

http://www.energialternativa.info/public/newforum/ForumEA/C/Creatore%20di%20collage%20di%20foto_UInJol.png

http://www.energialternativa.info/public/newforum/ForumEA/C/Creatore%20di%20collage%20di%20foto_lEHY5a.png

http://www.energialternativa.info/public/newforum/ForumEA/C/Creatore%20di%20collage%20di%20foto_LsoJzh.png

http://www.energialternativa.info/public/newforum/ForumEA/C/Creatore%20di%20collage%20di%20foto_R1JWEd.png

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 19/01/2015 11:51:23

Il Codice!!!
Ricordo a chi usa i display, che avevo tempo fà postato un semplice metodo per poter collegare più di un display nella modalità 2wires, ampliando quindi le possibilità di visualizzazione.



---------------
Tecnico qualificato in clownerie
Windsurfer a tempo perso
Slalomaro senza speranze

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 21/01/2015 07:40:21

Si, si al codice gli do una sistemata e lo posto ....al momento credo che lo posso interpretare solo io talmente e' incasinato...
Per le prove che sto' facendo uso due pptea uno con display 16x2 e l'laltro con uno 20x4, ma per comodita'il codice l'ho sviluppato per 16x2 e ho preferito lavorare con i menu in modo da lasciare il tutto piu' compatto, dando piu' funzioni allo stesso tasto.
Questo timer usa soltanto due tasti il bit3 ed il bit5, ma le funzioni possibili sono varie.
Al momento ho sostituito il metodo per impostare tempi e cicli rispetto alle versioni precedenti che secondo me erano troppo lente.
Prima per immettere un tempo di 78 minuti, bisognava tenere premuto un tasto finche' il valore non raggiungesse quello voluto.
Ora ho fatto diversamente. Ho diviso la cifra in due parti (decine ed unita') ed ho fatto in modo da inserirle separatamente.
Quindi lo stesso valore di 78 minuti e' molto piu' veloce da immettere.

 

ecologix1971

Avatar
GigaWatt


Gruppo:MODERATORE
Messaggi:4165

Stato:



Inviato il: 03/03/2015 22:46:28

Sto' andando avanti con il codice del timer, volevo a questo punto finirlo e poi postarlo, anche perche' ho apportato numerose modifiche ed eliminato svariati bug formatosi durante il percorso.
al momento sto' inserendo la possibila' di farlo funzionare in una determinata fascia oraria.
spero di finirlo a breve, ma ogni volta mi viene in mente qualcosa da infilarci dentro...

 
 InizioPagina
 

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum