Se sei già registrato           oppure    

Orario: 02/05/2024 15:12:44  

 

Energia Alternativa ed Energia Fai Da Te > PPTEA

VISUALIZZA L'ALBUM

Pagine: (5)   [1]   2   3   4   5    (Ultimo Msg)


PPTEA: Cronotermostato Termocamino GAS
FinePagina

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 15/3/2013,20:57

Ciao,

ho già scritto a Bolle di questo progetto, ma mi ero dovuto fermare perchè lo spazio (2K) non mi sarebbe bastato.

Ora sto testando l'8K (nell'attesa del 32) e quindi posso riprendere quello che è il mio 2° progetto (il 1° è il controllo impianto FV di cui è in giro l'intero codice ed il 3° è il GSM per il "PPTEA Solare sul Monte" che è in un thread aperto da Bolle).

Questo programma varà come base il progetto cronotermostato di Bolle.



Le specifiche sono:

attualmente ho un sistema di riscaldamento casa e acqua basato su un alternaza di termocamino (inverno) e caldaia gas (estate). Causa idee idraulico l'impianto ha 2 termostati: uno sul termocamino ed uno sul boiler. Il termometro sul termocamino server per decidere la priorità tra TC e caldaia nella produzione acqua risc/sanitaria; diciamo se l'acqua nel TC è > di 50° esso avrà il controllo e la caldaia viene esclusa; questo è deciso da un termostato digitale cinese che apre/chiude il circuito caldaia. L'altro termostato cinese sul boiler serve per aprire/chiudere la valvola acqua sanitaria quando questa scende sotto na certa temp (estate)...

Insomma... nn mi sono capito neanche io... ahahahah

Allora... diciamo che il PPTEA mi serve per fare un'elemento unico che mi permetta di gestire due temperature (attraverso sonde PT100 di cui ho già scritto nell'apposito thread), due relè, definire valori di isteresi delle temp (nei cinesi max 10°), delle fasce orarie (ora succede che d'estate di notte mi si accende + volte la caldaia (ahhhhhhhh il gas GPL) solo per mantenere i 40° nel boiler, mentre io vorrei che di notte lasciasse stare ed accendesse solo ad un ora specificata)....


Vabbe... poi rileggo quanto ho scritto quando è finito l'effetto ghiaccio.... ero a pescare sulla banchisa....

Bye
Alessio287




Modificato da alessio287 - 15/3/2013, 22:02
 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 15/3/2013,22:57

Questo progetto è interessante, sarebbe utile fare qualche schema per farlo capire meglio in modo da permettere l'utilizzo ad altri....
In prima battuta avrei detto che 2K di memoria sarebbero bastati...ma per il resto sto notando che hai le caratteristiche per realizzare cose da non credere...con i PPTEA che ormai mangi a colazione!
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 15/3/2013,23:18

Ehiiii...

tu sei nato con il basic... io ho lavorato solo con VB4/5/6 tanti anni fa ormai... ma mai con il basic "spaghetti"

e quindi ho bisogno di + spazio di te... magari imparerò ad essere "estremo" come te, ma sono abituato a scrivere in maniera scolastica.... regola 1 di quando ero programmatore: scrivere pulito x capire codice e farlo capire


e cmq... se prendi il tuo cronotermostato... vedrai che già usavi ben più di 1 k, quasi 1 e mezzo se ricordo bene... e gestivi un solo termometro... ho provato a metterci le mani ma sono arrivato a 1,9k e mi sono fermato... distratto da qlcn che voleva levare dei max232... faccine/rolleyes.gif


Mo che ho una batteria di 2550 mi rimetto sotto anche con il GSM... spedire un SMS era la base, non l'obiettivo...


Buon WE e viva i liguri (ed eschimesi)

Alessio287

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 16/3/2013,08:28

CITAZIONE (alessio287 @ 15/3/2013, 23:18)
regola 1 di quando ero programmatore: scrivere pulito x capire codice e farlo capire

Fai bene...anche io la penso come te...anche se non sono mai stato un programmatore ma un programmamucche. faccine/laugh.gif


CITAZIONE (alessio287 @ 15/3/2013, 23:18)
se prendi il tuo cronotermostato...

Mica penserai che il cronotermostato lo abbia scritto io...queste cose le fanno i miei ragazzotti.
faccine/smile.gif
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 16/3/2013,09:48

...i problemi di steva mi ricordano i miei... poi ho smantellato la caldaia a gas e messo un termoboiler; per quest'estate prevedo (seeeeeee) il pannello solare termico autocostruito...
Vai avanti che ti seguo!



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

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 16/3/2013,14:19

Ciao Marco,

i pannelli termici autocostruiti sono il mio sogno... ma l'idraulico rompe... chissà... cmq usando il TC l'inverno scorso ho speso 20€ di gas (quello di cucina) e 200€ di legna... mia madre solo GPL 500€ a bolletta

Mo xò spendo di + di gas d'estate per l'acqua calda... ma spero con il PPTEA di spegnere il riscaldamento notturno per riattivarlo la mattina... penso che sia + economico riscaldarlo di + ma una volta sola che + volte per mantenere.... almeno spero

Bye
Alessio287

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 18/3/2013,23:56

Ciao,

comincio mettendo una versione aggiornata all'ultima vesione di compilatore del cronotermostato di Bolle...

l'unica modifica è l'utilizzo del PT100 al posto del LM35; aggiunti, per farlo funzionare in questa versione, l'espansione memoria, setio per display e CADS.

Partendo da qua l'idea è quella di poter scegliere il numero di sensori temperatura (1 o 2... per limiti di CADS e relativi relè)

Per ognuno definire una temperatura di riferimento ed un valore di isteresi per costruire una fascia d'intervento...

Insomma... qualche idea da sviluppare...

faccine/construction.gif

Bye
Alessio287

PS: il 95% di questo codice è di Mago Bolle......


CODICE
10 '----------------------------------------------------------------------------
11 'CIRCUITO RINNOVABILI - Alessio287: 17/03/2012 - Versione 1.0
12 '
13 'Versione 1.0
14 'Parto dal circuito originario Bolle ed inserisco l'utilizzo della memoria da 8K, il controllo SETIO altrimenti
15 'non funziona il display, CADS = 2, inserisco il mio controllo temperatura PT100, identifico delle
16 'soubroutine, sostituisco num riga con label nelle istruzioni goto
99 '----------------------------------------------------------------------------

101 PRAGMA EXTENDED8K_EEPROM
102 SETIO=&H200FF ' il 17 BIT (partendo da 0 ) identifica la modalità a 2 fili del display
103 CADS=2

115 CONSTANT ELE_MEDIA=50 ' EFFETTUA LA MEDIA DI x VALORI LETTI
116 CONSTANT R0=100 ' Resistenza da 100 Ohm
117 CONSTANT R1=3090 ' Resistenza da 3,09K Ohm
118 CONSTANT R2=10000 ' Resistenza da 10K Ohm
119 CONSTANT R3=750000 ' Resistenza da 750K Ohm
120 CONSTANT ALPHA=0.00385 'Coefficiente linearizzazione PT100
121 CONSTANT CADTOVOLT=0.0048875855
122 CONSTANT VINPUT=5.0 'Alimentazione ingresso sonda 5V
123 CONSTANT RP1=1210 'Resistenza 1 partitore 1,21K Ohm
124 CONSTANT RP2=2740 'Resistenza 2 partitore 2,74K Ohm
125 CONSTANT PULS_PROGR = 1
126 CONSTANT PULS_INCRE = 16
127 CONSTANT PULS_DECRE = 8
128 CONSTANT PULS_MODIF = 2
129 CONSTANT MENU_TEMP_RIF = 1
130 CONSTANT MENU_FASCIA_1 = 2
131 CONSTANT MENU_FASCIA_9 = 10
132 CONSTANT MENU_PROG_GG = 11



155 GOSUB :LEGGO_TEMP_RIF

190 :CICLO A=200
195 CLR PAG_PROG
200 LCDCLEAR
205 LCDWRITE="PPTEA"
210 IF A MOD 200 THEN 460    'salto ogni 200 A

220 LCDPOS=&H23
240 LCDWRITE=DATE

255 '------ CALCOLO LA TEMPERATURA SONDA BOLLITORE CADS=2
256 NumCAD=1
257 GOSUB :CALCOLO_PT100
258 TCAM=TCALC
259 'USBOUT="TCAM=" & TCAM & CR_LF

360 GOSUB  :CHECK_ORARIO_FASCE

370 IF TEMP_RIF >TCAM AND ORA THEN 410
380 OUT=0
390 STATO=" "
400 GOTO :STATO_BL
410 OUT=&H8000
420 STATO="*"
430 :STATO_BL LCDPOS=&H19
440 LCDWRITE=STATO &" "& LEFT(TCAM,4) &"ßC"
450 'GOSUB 2000 ' VERIFICO SE SONO IN UNA FASCIA ATTIVA
460 A++

470 GOSUB  :PRESSIONE_PULSANTI
480 IF PULSANTE_PREMUTO=PULS_PROGR THEN 500 ELSE 210

490 '---SCELTA MENU'-----------
500 MENU++
510 CLR MODIFICA_ELEMENTO
520 IF MENU=MENU_TEMP_RIF THEN 570
530 IF MENU>=MENU_FASCIA_1 AND MENU<=MENU_FASCIA_9 THEN :LBL_FASCE_ORARIE
540 IF MENU=MENU_PROG_GG THEN 2220
560 IF MENU = 12 THEN 900
570 LCDCLEAR
580 LCDWRITE="PROGRAMMAZIONE"
590 WAITS 1
600 LCDPOS=&H11
610 LCDWRITE="PROGR. TEMPER."
620 'WAITMS 100
630 :LBL_SCRIVO_TEMP_RIF GOSUB :SCRIVO_TEMP_RIF
670 LCDPOS=&H21
680 '
690 LCDWRITE="P="& LEFT(TEMP_RIF&" ",4)
700 WAITMS 250
710 :CNT_MOD_ELEMENTO IF !MODIFICA_ELEMENTO THEN :LBL_BLINK
720 '
730 IF BL MOD 10 THEN :LBL_BLINK
740 BLINK=!BLINK
750 IF BLINK THEN 850
760 LCDPOS=&H20 + PSTART
770 LCDWRITE=BLCHAR
780 :LBL_BLINK BL++
790 GOSUB  :PRESSIONE_PULSANTI
800 IF PULSANTE_PREMUTO=PULS_INCRE  THEN 1340
810 IF PULSANTE_PREMUTO=PULS_MODIF  THEN 990
820 IF PULSANTE_PREMUTO=PULS_DECRE  THEN 1640
830 IF PULSANTE_PREMUTO=PULS_PROGR  THEN 500 ELSE :CNT_MOD_ELEMENTO
840 '
850 ' ------ BLINK
860 IF MENU>=MENU_FASCIA_1 AND MENU<=MENU_FASCIA_9 THEN :WRITE_LCD_FASCE
870 IF MENU=MENU_TEMP_RIF  THEN 670
880 IF MENU=MENU_PROG_GG THEN :LBL_FASCE
885 '
890 GOTO  790
900 '------ USCITA PROGRAMMAZIONE----
910 CLR MENU
920 LCDCLEAR
930 LCDWRITE="USCITA"
940 LCDPOS=&H23
950 LCDWRITE="PROGRAMMAZIONE"
960 WAITMS 512
970 GOTO :CICLO

980 '---FINE USCITA PROGRAMMAZIONE----
990 '------ PRESSIONE PULSANTE MODIFICA
1000 CLR BL
1010 CLR BLINK
1020 MODIFICA_ELEMENTO++
1030 WAITMS 250
1040 IF MENU>=MENU_FASCIA_1 AND MENU<=MENU_FASCIA_9 THEN 1200
1050 IF MENU=MENU_TEMP_RIF THEN 1080
1060 IF MENU=11 THEN 1130
1065 IF MENU>=12 AND MENU<19 THEN :MODIFICA_PROG_SETT
1070 GOTO  :WRITE_LCD_FASCE
1080 '------- BLINK TEMP TERMOSTATO
1090 MODIFICA_ELEMENTO = 1
1100 PSTART=3
1110 BLCHAR="    "
1120 GOTO  :CNT_MOD_ELEMENTO
1130 '-----MODIFICA PROG. GIORNALIERO
1140 'MODIFICA_ELEMENTO++
1150 IF MODIFICA_ELEMENTO<=9 THEN 1170
1160 MODIFICA_ELEMENTO=1
1170 PSTART=7+MODIFICA_ELEMENTO
1180 BLCHAR=" "
1190 GOTO  :CNT_MOD_ELEMENTO
1191 :MODIFICA_PROG_SETT '-----MODIFICA PROG. SETTIMANALE
1192 'MODIFICA_ELEMENTO++
1193 IF MODIFICA_ELEMENTO<=9 THEN 1195
1194 MODIFICA_ELEMENTO=1
1195 PSTART=7+MODIFICA_ELEMENTO
1196 BLCHAR=" "
1197 GOTO  :CNT_MOD_ELEMENTO
1200 BLCHAR="  "
1210 IF MODIFICA_ELEMENTO<5 THEN 1230
1220 MODIFICA_ELEMENTO = 1 ' RICOMINCIO DAL PRIMO ELEMENTO
1230 IF MODIFICA_ELEMENTO=1 THEN 1280
1240 IF MODIFICA_ELEMENTO=2 THEN 1300
1250 IF MODIFICA_ELEMENTO=3 THEN 1320
1260 PSTART=15
1270 GOTO  :CNT_MOD_ELEMENTO
1280 PSTART=6
1290 GOTO  :CNT_MOD_ELEMENTO
1300 PSTART=9
1310 GOTO  :CNT_MOD_ELEMENTO
1320 PSTART=12
1330 GOTO  :CNT_MOD_ELEMENTO
1340 '------INCREMENTO I VALORI SOTTO BLICK
1350 IF !MODIFICA_ELEMENTO THEN :LBL_BLINK
1360 IF MENU=MENU_TEMP_RIF  THEN 1380
1370 IF MENU=MENU_PROG_GG  THEN 1540 ELSE 1420
1375 '
1380 TEMP_RIF+=0.1 '------- INCREMENTO TEMP. TERM.
1390 IF TEMP_RIF < 99 THEN 1410
1400 TEMP_RIF=99.0
1410 GOTO  :LBL_SCRIVO_TEMP_RIF
1420 'DEVO INCREMENTARE IL PARAMETRO DELLE FASCIE
1430 SF=99+(MENU-2)*4+MODIFICA_ELEMENTO
1440 CELL=SF
1450 ORA=REEPROM
1460 IF !(MODIFICA_ELEMENTO MOD 2) THEN 1490
1470 IF ORA < 23 THEN 1510
1480 GOTO  1500
1490 IF ORA < 59 THEN 1510
1500 ORA=-1
1510 ORA++
1520 WEEPROM=ORA
1530 GOTO  :WRITE_LCD_FASCE
1540 'DEVO MODIFICARE LA PROGRAMMAZIONE GIORNALIERA
1550 SF=149+MODIFICA_ELEMENTO
1560 CELL=SF
1570 ORA=REEPROM
1580 IF ORA <> MODIFICA_ELEMENTO THEN 1610
1590 ORA=0
1600 GOTO  1620
1610 ORA=MODIFICA_ELEMENTO
1620 WEEPROM=ORA
1630 GOTO  :LBL_FASCE
1640 '------DECREMENTO I VALORI SOTTO BLINK
1650 IF !MODIFICA_ELEMENTO THEN :LBL_BLINK
1660 IF MENU=MENU_TEMP_RIF THEN 1680
1670 IF MENU=MENU_PROG_GG THEN 1540 ELSE 1720
1680 TEMP_RIF-=0.1 '------- DECREMENTO TEMP. TERM.
1690 IF TEMP_RIF > 0 THEN 1710
1700 TEMP_RIF=0.0
1710 GOTO  :LBL_SCRIVO_TEMP_RIF
1720 'DEVO DECREMENTARE IL PARAMETRO DELLE FASCIE
1730 SF=99+(MENU-2)*4+MODIFICA_ELEMENTO
1740 CELL=SF
1750 ORA=REEPROM
1760 IF ORA > 0 THEN 1810
1770 IF !(MODIFICA_ELEMENTO MOD 2) THEN 1800
1780 ORA=24
1790 GOTO  1810
1800 ORA=60
1810 ORA--
1820 WEEPROM=ORA
1830 GOTO  :WRITE_LCD_FASCE

2220 '------ MENU PROGRAMMA GIORNALIERO
2230 LCDCLEAR
2240 LCDWRITE="PROG.GIORNALIERA"
2250 WAITMS 512
2260 :LBL_FASCE LCDPOS=&H11
2270 LCDWRITE="FASCE  123456789"
2280 LCDPOS=&H21
2290 LCDWRITE="STATO  "
2300 SF=150
2310 CELL=SF
2320 ORA=REEPROM
2330 IF ORA <> SF-149 THEN 2360
2340 CAR="*"
2350 GOTO  2370
2360 CAR="_"
2370 LCDWRITE=CAR
2380 SF++
2390 IF SF< 159 THEN 2310
2400 WAITMS 200
2410 GOTO  :LBL_BLINK

3000 :LBL_FASCE_ORARIE
3005 GOSUB :FASCE_ORARIE
3010 GOTO :LBL_BLINK

3999 '########    SUBROUTINE   ########

4000 '------ FUNZIONE CALCOLO TEMPERATURA
4005 :CALCOLO_PT100
4010 RESET_TIMER
4015 VPT1=0 'Tensione CAD sonda PPTEA 1
4020 FOR I=1 TO ELE_MEDIA
4025     VPT1+=CADSIND(NumCAD)
4027     'VPT1+=CADS2
4030 NEXT I
4032 'USBOUT="VPT1=" & VPT1 & CR_LF
4035 VPONTE=FLOAT(VINPUT)*RP2/(RP1+RP2)
4040 VPT1= VPT1*CADTOVOLT /ELE_MEDIA*R2/R3 'Tensione ponte tra A&B
4045 TCALC= R1
4050 TCALC*=((VPONTE*R0)+(VPT1*R1)+(VPT1*R0))
4055 TCALC/=((VPONTE*R1)-(VPT1*R1)-(VPT1*R0)) 'Resistenza PT100
4060 TCALC= LEFT(((TCALC-R0)/(R0*ALPHA)),6) 'Temperatura calcolata
4065 RETURN


4200 '----- FUNZIONE LEGGO TEMPERATURA RIFERIMENTO
4205 :LEGGO_TEMP_RIF
4210 CELL=254
4215 TEMP_RIF=REEPROM*256.0
4220 CELL=255
4225 TEMP_RIF+=REEPROM
4230 TEMP_RIF/=10
4235 IF TEMP_RIF <=99.0 THEN :FINE_LEGGO_TEMP_RIF
4240 TEMP_RIF=99.0
4245 :FINE_LEGGO_TEMP_RIF
4250 RETURN


4400 '------ FUNZIONE CHECK ORARIO NELLE FASCE GIORNALIERE
4405 :CHECK_ORARIO_FASCE
4410 FDATE=4
4415 MIN=DATE
4417 'USBOUT="S="&MIN
4420 SF=150
4425 :SET_CELL CELL=SF
4430 ORA=REEPROM
4435 IF ORA <> SF-149 THEN :INCR_SF
4440 SF2=99+(SF-150)*4+1 'E' SETTATA LA FASCIA E' COMPRESO NELL'INTERVALLO
4445 CELL=SF2
4450 SEC=REEPROM*3600
4455 SF2++
4460 CELL=SF2
4465 SEC+=REEPROM*60
4467 'USBOUT="F="& int(SF-149) &"->"&SEC & " "
4470 SF2++
4475 CELL=SF2
4480 ORA=REEPROM*3600
4485 SF2++
4490 CELL=SF2
4495 ORA+=REEPROM*60
4500 IF MIN>=SEC AND MIN<ORA THEN :RESET_ORA
4505 :INCR_SF SF++
4510 IF SF< 159 THEN :SET_CELL
4515 ' FINE TEST
4520 CLR ORA
4525 GOTO  :FINE_CHECK
4530 :RESET_ORA SET ORA
4535 :FINE_CHECK
4540 FDATE=0
4542 USBOUT="RF="& ORA
4545 RETURN


4700 '------ FUNZIONE PRESSIONE PULSANTI
4705 :PRESSIONE_PULSANTI '------ TORNO PRESSIONE PULSANTI
4710 PULSANTE_PREMUTO=(INP AND &H6C)/4
4712 'USBOUT="INP="&(INP AND &H6C)/4&CR_LF
4715 RETURN


4800 '----- FUNZIONE SCRIVO TEMPERATURA RIFERIMENTO
4805 :SCRIVO_TEMP_RIF
4810 CELL=254
4815 WEEPROM=INT(TEMP_RIF*10/256)
4820 CELL=255
4825 WEEPROM=INT(TEMP_RIF*10) MOD 256
4830 RETURN


4900 '----- FUNZIONE CHECK CONGRUITA' ORE MINUTI E ZERO INIZIALE
4905 :CHECK_CONGRUITA_OREMIN
4910 ZERO="0"
4915 IF ORA< 24 THEN :OK_ORA
4920 ORA=0
4925 :OK_ORA IF MIN<60 THEN :OK_MIN
4930 MIN=0
4940 :OK_MIN ORA=RIGHT(ZERO&ORA,2)
4945 MIN=RIGHT(ZERO&MIN,2)
4950 RETURN


5000 '----- FUNZIONE MENU FASCE ORARIE
5001 :FASCE_ORARIE
5005 IF MENU<>MENU_FASCIA_1 THEN :WRITE_LCD_FASCE
5010 LCDCLEAR
5015 LCDWRITE="PROG. ON    OFF"
5020 :WRITE_LCD_FASCE LCDPOS=&H22
5025 SF=100+(MENU-2)*4
5030 CELL=SF
5035 ORA=REEPROM
5040 SF++
5045 CELL=SF
5050 MIN=REEPROM
5055 GOSUB  :CHECK_CONGRUITA_OREMIN
5060 LCDWRITE="F"&INT(MENU-1)&"  " & ORA &":" & MIN &" "
5065 SF++
5070 CELL=SF
5075 ORA=REEPROM
5080 SF++
5085 CELL=SF
5090 MIN=REEPROM
5095 GOSUB  :CHECK_CONGRUITA_OREMIN
5100 LCDWRITE=ORA &":" & MIN
5105 RETURN

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 8/4/2013,23:17

Ciao,

sono ancora vivo.... ma sta per finire la stagione della legna e questo progetto deve entare in funzione alla svelta visto che mi deve fare risparmiare gas (GPL = uguale all'oro ormai)....

Non è ancora la versione definitiva e come si può vedere ci sono ancora tutti gli USBOUT di debug.

Utilizzo i pulsanti nella versione utilizzando un unico CADS.

Uso un LCD 4x20.

Si possono gestire da 1 a 4 sensori (gestibili) e per ognuno si può impostare TEMPERATURA RIFERIMENTO e ISTERESI (-20 a +20), con relativi rele.

Utilizzo sonde PT100

MANCA ancora (prossimo passo) la gestione delle fasce orarie per ciascun sensore.

Utilizza la versione 4.0.4 del processore senza numero righe.


Appena ho tempo metto un disegno....


Vado a lettooooooo
Ciaooooo

Alessio287





PRAGMA
ADVANCED
PRAGMA
EXTENDED8K_EEPROM
'----------------------------------------------------------------------------
'CIRCUITO RINNOVABILI - Alessio287
'
'Versione 1.00 - 17/03/2013
'Parto dal circuito originario Bolle ed inserisco l'utilizzo della memoria da 8K, il controllo SETIO altrimenti
'non funziona il display, CADS = 2, inserisco il mio controllo temperatura PT100, identifico delle
'soubroutine, sostituisco num riga con label nelle istruzioni goto
'
'Versione 1.01 - 19/03/2013
'Aggiunta gestione numero sensori (max 2), ma senza gestione dei parametri in
'riferimento ad ogni sensore
'
'Versione 1.02 - 19/03/2013
'
'Versione 1.03 - 27/03/2013
' utilizzo versione PPTEA 4.0.4 con eliminazione numeri riga
'
'Versione 2.00 - 28/03/2013
' gestione numero sensori
'
'Versione 2.01 - 28/03/2013
' gestione temperature per ogni sensore
'
'Versione 2.02 - 03/04/2013
' sostitite costanti con quelle definite manuale PPTEA, gestione temperature per ogni sensore
'
'Versione 2.03 - 04/04/2013
' gestione temperature isteresi per ogni sensore
'
'Versione 2.04 - 05/04/2013
' gestione bug versione 2.03
'
'Versione 2.05 - 08/04/2013
' gestione on-off rele in base parametri impostati
'----------------------------------------------------------------------------

' il 17 BIT (partendo da 0 ) identifica la modalità a 2 fili del display
' il 16 BIT (partendo da 0 ) identifica la modalità libera del display

SETIO
=&H300FF
CONSTANT
VERSIONE=2.05
'Costanti temperatura

CONSTANT
ELE_MEDIA = 25
CONSTANT
TEMP_RANGE = 0
CONSTANT
TEMP_HIGH = 1
CONSTANT
TEMP_LOW = 2
CONSTANT
R0=100 ' Resistenza da 100 Ohm
CONSTANT
R1=3090 ' Resistenza da 2,7K Ohm
CONSTANT
R2=10000 ' Resistenza da 10K Ohm
CONSTANT
R3=750000 ' Resistenza da 680K Ohm
CONSTANT
ALPHA=0.00385 'Coefficiente linearizzazione PT100
CONSTANT
VINPUT=5.0 'Alimentazione ingresso sonda 5V
CONSTANT
RP1=1210 'Resistenza 1 partitore 1,2K Ohm
CONSTANT
RP2=2740 'Resistenza 2 partitore 2,7K Ohm
'Costanti gestione pulsanti

CONSTANT
PULS_NULLO = 0
CONSTANT
PULS_PROGR = 1
CONSTANT
PULS_MODIF = 2
CONSTANT
PULS_DECRE = 3
CONSTANT
PULS_INCRE = 4
CONSTANT
PULS_CADS_NULLO = 1000 'valore reale 1023
CONSTANT
PULS_CADS_PROGR = 50 'valore reale 0
CONSTANT
PULS_CADS_MODIF = 300 'valore reale 242
CONSTANT
PULS_CADS_DECRE = 800 'valore reale 754
CONSTANT
PULS_CADS_INCRE = 600 'valore reale 505
CONSTANT
CADS_PULSANTE=4
'Costanti gestione numero sensori

CONSTANT
MAX_NUM_SENSORI = 4
CONSTANT
CELL_SENSORE=255
'Costanti gestione menu

CONSTANT
MENU_INIT = 1
CONSTANT
MENU_SENSORE = 2
CONSTANT
MAX_VOCISMENU = 2
CONSTANT
VOCISMENU_TEMP_RIF = 1
CONSTANT
VOCISMENU_ISTERESI = 2
'Costanti gestione temperature sensori (4 sensori x 2 celle ciascuno)

CONSTANT
CELL_INI_SENSORE=247
CONSTANT
CELL_MAX_SENSORE=254
'Costanti gestione temperature isteresi sensori (4 sensori x 2 celle ciascuno)

CONSTANT
CELL_INI_ISTERESI=239
CONSTANT
CELL_MAX_ISTERESI=246
CADS
=5
DIM
BIT_RELE(4) AS BYTE
BIT_RELE(1) = 15 'CADS 1 = BIT 15
BIT_RELE(2) = 14 'CADS 2 = BIT 14
BIT_RELE(3) = 13 'CADS 3 = BIT 13
BIT_RELE(4) = 12 'CADS 4 = BIT 12
LCDINIT
LCDCLEAR
LCDPOS
=LCD4X20_ROW_1
LCDWRITE
="PPTEA CronoT v." & VERSIONE
LCDPOS
=LCD4X20_ROW_3
LCDWRITE
="Starting....."
WAITS
1
PMOD = 0
'Leggo il numero dei sensori definiti

GOSUB
:LEGGO_SENSORE
MENU = MENU_INIT
PULSANTE_PREMUTO = PULS_NULLO
'CICLO INFINITO PROGRAMMA

REPEAT

'controllo pulsante scelto
:LBL_PULSANTI
GOSUB :PRESSIONE_PULSANTI
'USBOUT="PULSANTE PR CICLO="&PULSANTE_PREMUTO&CR_LF
IF PULSANTE_PREMUTO = PULS_NULLO THEN :L003
IF PULSANTE_PREMUTO = PULS_PROGR THEN :L002
'USBOUT="PROBLEMA="&PULSANTE_PREMUTO
GOTO :L003
:L002
IF MENU = MENU_SENSORE THEN :LBL_SOTTOMENU
MENU+=1
'USBOUT="MENU SCELTO="&MENU&CR_LF
GOTO :L003
:LBL_SOTTOMENU
'USBOUT="GESTIONE SOTTOMENU"&CR_LF
GOSUB :GESTIONE_SOTTOMENU
MENU = 1
:L003
'WAITMS 200
'USBOUT="MENU="&MENU&CR_LF
'gestione menu sensore
IF MENU = MENU_INIT THEN :LBL_MENU_INIT
'gestione menu programmazione
IF MENU = MENU_SENSORE THEN :LBL_MENU_SENSORE
GOTO :LBL_PULSANTI
:LBL_MENU_SENSORE
IF (PULSANTE_PREMUTO = PULS_NULLO) OR (PULSANTE_PREMUTO = PULS_INCRE) OR (PULSANTE_PREMUTO = PULS_DECRE) THEN :L008
MODIFICA=FALSE
:L008
LCDPOS=LCD4X20_ROW_2
LCDWRITE="MENU PROGRAMMAZIONE"
GOSUB :F_MENU_SENSORE
GOTO :LBL_PULSANTI
:LBL_MENU_INIT
GOSUB :F_MENU_INIT
UNTIL
TRUE
END

'------ GESTIONE MENU SENSORE

:F_MENU_INIT

'USBOUT=DATE&CR_LF
'Gestione RIGA 2
LCDPOS=LCD4X20_ROW_2
RIGA_LCD = "SENSORI=" & SENSORE
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
'USBOUT="SENSORI=" & SENSORE & CR_LF
'Gestione RIGA 3 e RIGA 4
'Per ogni sensore definito ricavo temperature sensori
FOR ID_SENSORE=1 TO SENSORE
'Leggo temperatura sonda IDX
'ID_SENSORE=IDX
GOSUB :LEGGO_TEMP_SONDA
'Leggo temperatura riferimento IDX
GOSUB :LEGGO_TEMP_RIF
'Leggo temperatura isteresi IDX
GOSUB :LEGGO_ISTERESI
'Controllo rele sensore
GOSUB :CONTROLLO_RELE_SENSORE
'preparo riga
IF ID_SENSORE MOD 2 THEN :LBL_1A_STR
RIGA_LCD=RIGA_LCD&ID_SENSORE&"="&STATO&LEFT(TEMP_SONDA,4)&"ßC "
'USBOUT=ID_SENSORE&"$"&RIGA_LCD&CR_LF
IF ID_SENSORE > 2 THEN :LBL_SCRIVO_RIGA4
LCDPOS=LCD4X20_ROW_3
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
GOTO :LBL_2A_STR
:LBL_SCRIVO_RIGA4
LCDPOS=LCD4X20_ROW_4
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
GOTO :LBL_2A_STR
:LBL_1A_STR
RIGA_LCD=ID_SENSORE&"="&STATO&LEFT(TEMP_SONDA,4)&"ßC "
'USBOUT=RIGA_LCD&CR_LF
:LBL_2A_STR
'USBOUT="Sensore n°:"&ID_SENSORE&CR_LF
NEXT ID_SENSORE
IF ID_SENSORE MOD 2 THEN :LBL_FINE_INIT
IF ID_SENSORE > 2 THEN :LBL_POS_RIGA4
'Pulisco la 4a riga nel caso di sensori <= 2
LCDPOS=LCD4X20_ROW_3
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
RIGA_LCD = LCD4X20_ROW_4
GOSUB :PULISCI_RIGA_LCD
LCDWRITE=RIGA_LCD
GOTO :LBL_POS_RIGA3
:LBL_POS_RIGA4
LCDPOS=LCD4X20_ROW_4
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
:LBL_POS_RIGA3
'USBOUT=ID_SENSORE&"#"&RIGA_LCD&CR_LF
RETURN
:LBL_FINE_INIT
IF ID_SENSORE > 2 THEN :LBL_FINE_RIGA4
RIGA_LCD = LCD4X20_ROW_4
GOSUB :PULISCI_RIGA_LCD
LCDWRITE=RIGA_LCD
:LBL_FINE_RIGA4
RETURN

'------ SUBROUTINE GESTIONE MENU SENSORE
' Nome:
' F_MENU_SENSORE
' Parametri:
' INPUT --> PULSANTE_PREMUTO = pulsante premuto
' INPUT --> MODIFICA = gestione modifica
' INPUT --> SENSORE = numero sensore
'

:F_MENU_SENSORE

IF PULSANTE_PREMUTO = PULS_NULLO THEN :L001
IF PULSANTE_PREMUTO = PULS_MODIF THEN :L005
IF PULSANTE_PREMUTO = PULS_INCRE THEN :L009
IF PULSANTE_PREMUTO = PULS_DECRE THEN :L012
'USBOUT="ALTRO MENU SENSORE" & CR_LF
RETURN
:L012
IF MODIFICA=FALSE THEN :L013
SENSORE-=1
IF SENSORE>0 THEN :L014
SENSORE = MAX_NUM_SENSORI
:L014
GOSUB :SCRIVO_SENSORE
GOTO :L001
:L013
RETURN
:L009
IF MODIFICA=FALSE THEN :L010
SENSORE+=1
IF SENSORE<=MAX_NUM_SENSORI THEN :L011
SENSORE = 1
:L011
GOSUB :SCRIVO_SENSORE
GOTO :L001
:L010
RETURN
:L005
'USBOUT="BLINK"&CR_LF
PSTART=9
BLCHAR=" "
LCDPOS=LCD4X20_ROW_3+PSTART-1
LCDWRITE=BLCHAR
'WAITMS 100
MODIFICA=TRUE
:L001
IF MODIFICA=FALSE THEN :L006
PSTART=9
BLCHAR=" "
LCDPOS=LCD4X20_ROW_3+PSTART-1
LCDWRITE=BLCHAR
'WAITMS 100
:L006
LCDPOS=LCD4X20_ROW_3
RIGA_LCD = "SENSORI=" & SENSORE
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
'USBOUT="SENSORI=" & SENSORE & CR_LF
'Pulisco la 4a riga
RIGA_LCD = LCD4X20_ROW_4
GOSUB :PULISCI_RIGA_LCD
RETURN

'------ FUNZIONE PRESSIONE PULSANTI

:PRESSIONE_PULSANTI
'------ TORNO PRESSIONE PULSANTI
PULSANTE_CADS=CADSIND(CADS_PULSANTE)
'WAITMS=100
'USBOUT="PULSANTE PR="&PULSANTE_PREMUTO&CR_LF
IF PULSANTE_CADS > PULS_CADS_NULLO THEN :LBL_PULS_NULLO
:LBL_RILASCIO
'USBOUT="RILASCIO OFF"&CR_LF
RILASCIO_CADS=CADS4
IF RILASCIO_CADS <= PULS_CADS_NULLO THEN :LBL_RILASCIO ' attendo rilascio pulsante set
'USBOUT="RILASCIO ON="&PULSANTE_CADS&CR_LF
IF PULSANTE_CADS < PULS_CADS_PROGR THEN :LBL_PULS_PROGR
IF PULSANTE_CADS < PULS_CADS_MODIF THEN :LBL_PULS_MODIF
IF PULSANTE_CADS < PULS_CADS_INCRE THEN :LBL_PULS_INCRE
PULSANTE_PREMUTO = PULS_DECRE
RETURN
:LBL_PULS_INCRE
PULSANTE_PREMUTO = PULS_INCRE
RETURN
:LBL_PULS_MODIF
PULSANTE_PREMUTO = PULS_MODIF
RETURN
:LBL_PULS_PROGR
PULSANTE_PREMUTO = PULS_PROGR
RETURN
:LBL_PULS_NULLO
PULSANTE_PREMUTO = PULS_NULLO
RETURN
'----- FUNZIONE LEGGO SENSORI
' Nome:
' LEGGO_SENSORI
' Parametri:
' OUTPUT --> SENSORE = numero SENSORE
'

:LEGGO_SENSORE

CELL=CELL_SENSORE
SENSORE=REEPROM
'USBOUT="SENSORE/1="&SENSORE&CR_LF
IF SENSORE <= MAX_NUM_SENSORI THEN :FINE_LEGGO_SENSORE
SENSORE=1
:FINE_LEGGO_SENSORE
RETURN
'----- FUNZIONE PULISCI RIGA LCD

:PULISCI_RIGA_LCD

LCDPOS=RIGA_LCD
LCDWRITE=" "
RETURN
'----- FUNZIONE PULISCI RIGA LCD

:FILLA_RIGA_LCD

FOR IDX=LEN(RIGA_LCD) TO 19
RIGA_LCD=RIGA_LCD&" "
NEXT IDX
RETURN

'----- FUNZIONE SCRIVO SENSORI
' Nome:
' SCRIVO_SENSORE
' Parametri:
' INPUT --> SENSORE = numero SENSORE
' OUTPUT --> NONE
'

:SCRIVO_SENSORE

'USBOUT="SENSORE="&SENSORE&CR_LF
CELL=CELL_SENSORE
WEEPROM=SENSORE
RETURN

'----- FUNZIONE LEGGO TEMPERATURA RIFERIMENTO
' Nome:
' LEGGO_TEMP_RIF
' Parametri:
' INPUT --> ID_SENSORE = numero SENSORE per calcolo celle
' OUTPUT --> TEMP_RIF = valore temperatura TEMP_RIF
'

:LEGGO_TEMP_RIF

CELL=CELL_MAX_SENSORE-(2*ID_SENSORE)+2
TEMP_RIF=REEPROM*256.0
CELL=CELL_MAX_SENSORE-(2*ID_SENSORE)+1
TEMP_RIF+=REEPROM
TEMP_RIF/=10
IF TEMP_RIF <=99.0 THEN :FINE_LEGGO_TEMP_RIF
TEMP_RIF=60.0
:FINE_LEGGO_TEMP_RIF
RETURN

'----- FUNZIONE SCRIVO TEMPERATURA RIFERIMENTO
' Nome:
' SCRIVO_TEMP_RIF
' Parametri:
' INPUT --> TEMP_RIF = valore temperatura TEMP_RIF
' INPUT --> ID_SENSORE = numero SENSORE per calcolo celle
' OUTPUT --> NONE
'

:SCRIVO_TEMP_RIF

CELL=CELL_MAX_SENSORE-(2*ID_SENSORE)+2
'Uso 10.001 come moltiplicatore xchè in valori bassi es 2.2 diventava 2.19999 e quindi
' rimaneva sempre 2.1 prendendo la parte intera
WEEPROM=INT(TEMP_RIF*10.001/256)
CELL=CELL_MAX_SENSORE-(2*ID_SENSORE)+1
WEEPROM=INT(TEMP_RIF*10.001) MOD 256
RETURN

'------ GESTIONE SOTTOMENU X OGNI SENSORE

:GESTIONE_SOTTOMENU

'USBOUT="N° SENSORI="&SENSORE&CR_LF
'Sottomenu è la variabile che cicla tutti i sensori definiti (da 1 a 4 Max)
SOTTOMENU = 0
'VociSMenu è la variabile che cicla tutti i parametri per ogni sottomenu
VOCISMENU = 0
'Per ogni sensore gestisco i relativi sottomenu
REPEAT
'controllo pulsante scelto
:LBL_SOTTOM_PULSANTI
GOSUB :PRESSIONE_PULSANTI
'USBOUT="PULSANTE PR SOTTOM="&PULSANTE_PREMUTO&CR_LF
'WAITMS 300
IF PULSANTE_PREMUTO = PULS_NULLO THEN :L0S3
IF PULSANTE_PREMUTO = PULS_PROGR THEN :L0S2
'USBOUT="PROBLEMA="&PULSANTE_PREMUTO
GOTO :L0S3
:L0S2
IF (SOTTOMENU = SENSORE) AND (VOCISMENU = MAX_VOCISMENU) THEN :LBL_RESET_SOTTOMENU
IF VOCISMENU < MAX_VOCISMENU THEN :L0V1
SOTTOMENU+=1
VOCISMENU = 0
GOTO :L0V2
:L0V1
VOCISMENU+=1
:L0V2
'USBOUT="SOTTOMENU SCELTO="&SOTTOMENU&CR_LF
GOTO :L0S3
:LBL_RESET_SOTTOMENU
'Esco da gestione sottomenu
RETURN
:L0S3
IF SOTTOMENU = 0 THEN :LBL_SOTTOM_PULSANTI
'USBOUT="GESTIONE SENSORE N°"&SOTTOMENU&CR_LF
''gestione menu temp ref
'IF MENU = MENU_TEMPREF THEN :LBL_MENU_TEMPREF
' GOTO :LBL_PULSANTI
':LBL_MENU_TEMPREF
IF (PULSANTE_PREMUTO = PULS_NULLO) OR (PULSANTE_PREMUTO = PULS_INCRE) OR (PULSANTE_PREMUTO = PULS_DECRE) THEN :L029
MODIFICA=FALSE
:L029
LCDPOS=LCD4X20_ROW_2
LCDWRITE="MENU PROGRAMMAZIONE"
IF VOCISMENU = VOCISMENU_TEMP_RIF THEN :L0V3
IF VOCISMENU = VOCISMENU_ISTERESI THEN :L0V5
GOTO :L0V4
:L0V5
GOSUB :F_MENU_ISTERESI
GOTO :L0V4
:L0V3
GOSUB :F_MENU_TEMPREF
:L0V4
GOTO :LBL_SOTTOM_PULSANTI
UNTIL TRUE
RETURN

'------ GESTIONE MENU TEMPERATURA RIFERIMENTO
' Nome:
' F_MENU_TEMPREF
' Parametri:
' INPUT --> PULSANTE_PREMUTO = pulsante premuto
' INPUT --> MODIFICA = gestione modifica
' INPUT --> SOTTOMENU = sottomenu
'

:F_MENU_TEMPREF

ID_SENSORE = SOTTOMENU
IF PULSANTE_PREMUTO = PULS_NULLO THEN :L021
IF PULSANTE_PREMUTO = PULS_MODIF THEN :L022
IF PULSANTE_PREMUTO = PULS_INCRE THEN :L023
IF PULSANTE_PREMUTO = PULS_DECRE THEN :L024
'USBOUT="ALTRO MENU TEMPREF" & CR_LF
RETURN
:L024
IF MODIFICA=FALSE THEN :L018
TEMP_RIF-=0.1
IF TEMP_RIF>0 THEN :L020
TEMP_RIF = 0.1
:L020
GOSUB :SCRIVO_TEMP_RIF
GOTO :L021
:L018
RETURN
:L023
IF MODIFICA=FALSE THEN :L025
TEMP_RIF+=0.1
IF TEMP_RIF<=99.9 THEN :L026
TEMP_RIF = 99.9
:L026
'USBOUT="TEMP RIF="&TEMP_RIF&CR_LF
GOSUB :SCRIVO_TEMP_RIF
GOTO :L021
:L025
RETURN
:L022
'USBOUT="BLINK"&CR_LF
PSTART=10
BLCHAR=" "
LCDPOS=LCD4X20_ROW_4+PSTART-1
LCDWRITE=BLCHAR
'WAITMS 100
MODIFICA=TRUE
:L021
IF MODIFICA=FALSE THEN :L028
PSTART=10
BLCHAR=" "
LCDPOS=LCD4X20_ROW_4+PSTART-1
LCDWRITE=BLCHAR
'WAITMS 100
:L028
LCDPOS=LCD4X20_ROW_3
RIGA_LCD = "SENSORE=" & ID_SENSORE
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
GOSUB :LEGGO_TEMP_RIF
LCDPOS=LCD4X20_ROW_4
RIGA_LCD = "TEMP RIF=" & LEFT(TEMP_RIF,4)
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
'USBOUT="SENSORE=" & ID_SENSORE & CR_LF
RETURN

'------ GESTIONE MENU TEMPERATURA ISTERESI
' Nome:
' F_MENU_ISTERESI
' Parametri:
' INPUT --> PULSANTE_PREMUTO = pulsante premuto
' INPUT --> MODIFICA = gestione modifica
' INPUT --> SOTTOMENU = sottomenu
'

:F_MENU_ISTERESI

ID_SENSORE = SOTTOMENU
IF PULSANTE_PREMUTO = PULS_NULLO THEN :L0T1
IF PULSANTE_PREMUTO = PULS_MODIF THEN :L0T2
IF PULSANTE_PREMUTO = PULS_INCRE THEN :L0T3
IF PULSANTE_PREMUTO = PULS_DECRE THEN :L0T4
'USBOUT="ALTRO MENU TEMPREF" & CR_LF
RETURN
:L0T4
IF MODIFICA=FALSE THEN :L0T7
ISTERESI-=0.1
IF ISTERESI>-20.0 THEN :L0T9
ISTERESI = -20.0
:L0T9
GOSUB :SCRIVO_ISTERESI
GOTO :L0T1
:L0T7
RETURN
:L0T3
IF MODIFICA=FALSE THEN :L0T5
ISTERESI+=0.1
IF ISTERESI<=20.0 THEN :L0T6
ISTERESI = 20.0
:L0T6
'USBOUT="ISTERESI="&ISTERESI&CR_LF
GOSUB :SCRIVO_ISTERESI
GOTO :L0T1
:L0T5
RETURN
:L0T2
'USBOUT="BLINK"&CR_LF
PSTART=10
BLCHAR=" "
LCDPOS=LCD4X20_ROW_4+PSTART-1
LCDWRITE=BLCHAR
'WAITMS 100
MODIFICA=TRUE
:L0T1
IF MODIFICA=FALSE THEN :L0T8
PSTART=10
BLCHAR=" "
LCDPOS=LCD4X20_ROW_4+PSTART-1
LCDWRITE=BLCHAR
'WAITMS 100
:L0T8
LCDPOS=LCD4X20_ROW_3
RIGA_LCD = "SENSORE=" & ID_SENSORE
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
GOSUB :LEGGO_ISTERESI
LCDPOS=LCD4X20_ROW_4
RIGA_LCD = "ISTERESI=" & LEFT(ISTERESI,5)
GOSUB :FILLA_RIGA_LCD
LCDWRITE=RIGA_LCD
'USBOUT="SENSORE=" & ID_SENSORE & CR_LF
RETURN


'----- FUNZIONE LEGGO TEMPERATURA ISTERESI
' Nome:
' LEGGO_ISTERESI
' Parametri:
' INPUT --> ID_SENSORE = numero SENSORE per calcolo celle
' OUTPUT --> ISTERESI = valore temperatura ISTERESI
'

:LEGGO_ISTERESI

CELL=CELL_MAX_ISTERESI-(2*ID_SENSORE)+2
ISTERESI=REEPROM*256.0
CELL=CELL_MAX_ISTERESI-(2*ID_SENSORE)+1
ISTERESI+=REEPROM
ISTERESI/=10
IF ISTERESI <=40.0 THEN :FINE_LEGGO_ISTERESI
ISTERESI=40.0
:FINE_LEGGO_ISTERESI
'gestione dell'isteresi tra -20/+20 ma nelle celle va solo un valore +
ISTERESI-=20.0
RETURN
'----- FUNZIONE SCRIVO TEMPERATURA ISTERESI
' Nome:
' SCRIVO_ISTERESI
' Parametri:
' INPUT --> ISTERESI = valore temperatura ISTERESI
' INPUT --> ID_SENSORE = numero SENSORE per calcolo celle
' OUTPUT --> NONE
'

:SCRIVO_ISTERESI

'gestione dell'isteresi tra -20/+20 ma nelle celle va solo un valore +
ISTERESI+=20.0
CELL=CELL_MAX_ISTERESI-(2*ID_SENSORE)+2
'Uso 10.001 come moltiplicatore xchè in valori bassi es 2.2 diventava 2.19999 e quindi
' rimaneva sempre 2.1 prendendo la parte intera
WEEPROM=INT(ISTERESI*10.01/256)
CELL=CELL_MAX_ISTERESI-(2*ID_SENSORE)+1
WEEPROM=INT(ISTERESI*10.01) MOD 256
RETURN

'----- FUNZIONE RICAVO TEMPERATURA SENSORE
' Nome:
' LEGGO_TEMP_SONDA
' Parametri:
' INPUT --> ID_SENSORE = numero CADS da leggere
' OUTPUT --> TEMP_SONDA = temperatura sonda
'

:LEGGO_TEMP_SONDA

TMP=0.0 'Temperatura
FOR IDX2=1 TO ELE_MEDIA
TMP+=CADSIND(ID_SENSORE)
NEXT IDX2
IDX2=FLOAT(VINPUT)*RP2/(RP1+RP2)
TMP=TMP*CAD_TO_VOLT /ELE_MEDIA*R2/R3 'Tensione ponte tra A&B
TEMP_SONDA= R1
TEMP_SONDA*=((IDX2*R0)+(TMP*R1)+(TMP*R0))
TEMP_SONDA/=((IDX2*R1)-(TMP*R1)-(TMP*R0)) 'Resistenza PT100
TEMP_SONDA= ((TEMP_SONDA-R0)/(R0*ALPHA)) 'Temperatura calcolata
'TEMP_SONDA=TEMP_SONDA/ELE_MEDIA*CAD_TO_TEMP
'USBOUT="TEMP_SONDA="&TEMP_SONDA&CR_LF
RETURN


'----- FUNZIONE CONTROLLO RELE x SENSORE
' Nome:
' CONTROLLO_RELE_SENSORE
' Parametri:
' INPUT --> ID_SENSORE = numero CADS da leggere
' INPUT --> TEMP_SONDA = temperatura sonda
' INPUT --> TEMP_RIF = temperatura riferimento
' INPUT --> ISTERESI = isteresi
' OUPUT --> STATO=char... "*" se HIGH, " " se LOW
'

:CONTROLLO_RELE_SENSORE

STATO = " "
'USBOUT="TS="&TEMP_SONDA&" TR="&TEMP_RIF&" IS="&ISTERESI&CR_LF
IF ISTERESI >= 0 THEN :LBL_ISTERESI_POS
IF TEMP_SONDA >= TEMP_RIF THEN :LBL_ISTERESI_NEG_MAG
IF TEMP_SONDA < (TEMP_RIF + ISTERESI) THEN :LBL_ISTERESI_POS_FINE
OUTBIT(ID_SENSORE)=HIGH
STATO="*"
RETURN
:LBL_ISTERESI_NEG_MAG
OUTBIT(ID_SENSORE)=LOW
'STATO=" "
RETURN
:LBL_ISTERESI_POS
IF TEMP_SONDA >= TEMP_RIF THEN :LBL_ISTERESI_POS_MAG
IF TEMP_SONDA > (TEMP_RIF + ISTERESI) THEN :LBL_ISTERESI_POS_FINE
OUTBIT(ID_SENSORE)=HIGH
STATO="*"
RETURN
:LBL_ISTERESI_POS_MAG
OUTBIT(ID_SENSORE)=LOW
'STATO=" "
:LBL_ISTERESI_POS_FINE
RETURN






Modificato da NonSoloBolleDiAcqua - 9/4/2013, 11:06
 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 9/4/2013,10:05

Cavolo,
ho visto il codice...notevole...veramente notevole.
Dopo aver visto il tuo codice per rendere il lavoro del PPTEA completo in effetti manca una cosa...già segnala da un utente.
Bolle
PS:Gli ho dato una mano di colore.... faccine/smile.gif



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 9/4/2013,11:34

Ciao Bolle,

Tnks, ma la strada è lunga.....

il codice non è sicuramente ottimizzato... ma sto cercando di imparare gg dopo gg... non ho mai prg in questo basic...

Mi servirebbe una tua considerazione sulla gestione del pulsante su unico CADS... sul thrd tastiere hai scritto che l'avresti detto... io mi sono dovuto arrangiare, ma non sono molto soddisfatto....

Te l'ho già chiesto diverse volte... ma non mi hai mai risposto.... come si fa, se possibile, mettere il codice direttamente a colori?

Grassie
Alessio 287

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 9/4/2013,20:54

CITAZIONE (alessio287 @ 9/4/2013, 12:34)
Mi servirebbe una tua considerazione sulla gestione del pulsante su unico CADS... sul thrd tastiere hai scritto che l'avresti detto... io mi sono dovuto arrangiare, ma non sono molto soddisfatto....

Perdonami non ricordo e non ho nemmeno capito...non per cattiveria...ma è colpa dell'età che avanza....mi fai un riassuntino?

CITAZIONE (alessio287 @ 9/4/2013, 12:34)
Te l'ho già chiesto diverse volte... ma non mi hai mai risposto.... come si fa, se possibile, mettere il codice direttamente a colori?

Quanto si salva un file il compilatore genera un file con lo stesso nome ma con estensione rtf. Prova ad aprirlo con word...e vedi cosa accade. Ora per postare il file nella pagine basta convertire l'rtf in html...ci sono diversi convertitori gratuiti...io utilizzo RTF TO HTML CONVERTER....la conversione la metti nella pagina del forum, ed il gioco è fatto! faccine/w00t.gif



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 9/4/2013,21:07

Ciao Bolle,


[QUOTE=NonSoloBolleDiAcqua,9/4/2013, 21:54 ?t=53948339&st=0#entry378182137]

CITAZIONE (alessio287 @ 9/4/2013, 12:34)
Mi servirebbe una tua considerazione sulla gestione del pulsante su unico CADS... sul thrd tastiere hai scritto che l'avresti detto... io mi sono dovuto arrangiare, ma non sono molto soddisfatto....

Perdonami non ricordo e non ho nemmeno capito...non per cattiveria...ma è colpa dell'età che avanza....mi fai un riassuntino?


stamattina ero un pò di corsa.... dovevo scappare a Milano per recuperare una partita di ghiaccio per la cantina dato che comincia a fare un pò troppo caldo.. . faccine/biggrin.gif

Intendevo questo , cioè capire come gestiresti tu il multipulsante a livello di codice... io ho semplicemente fatto una chiamata al CADS, ma poi per gestirla civilmente ho messo un repeat fino a rilascio del pulsante stesso... altrimenti l'avanzamento per pressione file era quasi casuale (o non avveniva o saltavo + passi), mentre così sempra stabile...

Tnks
Alessio287

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 9/4/2013,21:22

Ma pensa un po te...funge quello schema...e chi se lo sarebbe immaginato....hihihiihi!
Per gestire i pulsanti, in genere si mette una attesa dopo la pressione per evitare rimbalzi etc...però il problema che hai è un classico ...puoi fare la gestione sulla pressione ( in quel caso devi prendere la pressione successiva se e solo se il pulsante è stato rilasciato) o sul rilascio in entrambi i casi devi mettere una piccola pausa dopo il passaggio dell'evento. Nel codice della orologio sveglia ci sono un paio di esempi...ma considera che si fa tutto con un solo pulsante che entra nel merito sul tempo di pressione.
Domani vedo il tuo codice...e vedo se riesco ad aiutarti!
Ciao
Bolle



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 9/4/2013,21:47

Ciao Bolle,

io ho usato lo schema 4 puls in un CADS con 4 resistenze a fare da partitore... un sottoinsieme del tuo esempio...

http://www.energialternativa.info/Public/NewForum/ForumEA/8/0/4/3/0/5/0/t/1365542119.jpg

Domani, oggi sono fuso, leggo con attenzione il tuo codice che per me è ancora, non ridere, complesso, nel senso di estremo da uno che sa scrivere... e talvolta fatico a "leggere" le sottigliezze e mi tocca provare per capire...


Ciao
Alessio287




Modificato da alessio287 - 9/4/2013, 23:15
 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 11/4/2013,14:20

Ho dato una rapida occhiata al codice dei pulsanti e va più che bene...l'unico consiglio che posso darti è mettere una pausa prima di ritornare il codice del pulsante...l'ho scritta in rosso sotto...non l'ho provata ma dovrebbe sensibilmente migliorare perchè ti evita eventuali rimbalzi.
Ciao
Bolle

PRESSIONE_PULSANTI '------ TORNO PRESSIONE PULSANTI
PULSANTE_CADS=CADSIND(CADS_PULSANTE)
'WAITMS=100
'USBOUT="PULSANTE PR="&PULSANTE_PREMUTO&CR_LF
IF PULSANTE_CADS > PULS_CADS_NULLO THEN :LBL_PULS_NULLO
:LBL_RILASCIO
'USBOUT="RILASCIO OFF"&CR_LF
RILASCIO_CADS = CADS4
IF RILASCIO_CADS <= PULS_CADS_NULLO THEN :LBL_RILASCIO ' attendo rilascio pulsante set
'USBOUT="RILASCIO ON="&PULSANTE_CADS&CR_LF
WAITMS 100
IF PULSANTE_CADS < PULS_CADS_PROGR THEN :LBL_PULS_PROGR
IF PULSANTE_CADS < PULS_CADS_MODIF THEN :LBL_PULS_MODIF
IF PULSANTE_CADS < PULS_CADS_INCRE THEN :LBL_PULS_INCRE
PULSANTE_PREMUTO = PULS_DECRE
RETURN
:LBL_PULS_INCRE
PULSANTE_PREMUTO = PULS_INCRE
RETURN
:LBL_PULS_MODIF
PULSANTE_PREMUTO = PULS_MODIF
RETURN
:LBL_PULS_PROGR
PULSANTE_PREMUTO = PULS_PROGR
RETURN
:LBL_PULS_NULLO
PULSANTE_PREMUTO = PULS_NULLO
RETURN



---------------
Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux).
Un risultato se non è ripetibile non esiste (by qqcreafis).

 
 InizioPagina
 

Pagine: (5)   [1]   2   3   4   5    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum