| alessio287
| 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
| 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
| 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...
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
| 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.
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. 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
| 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
| 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
| 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...
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
| 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
| 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....
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | alessio287
| 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
| 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!
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | alessio287
| 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.. .
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
| 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
| 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...
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
| 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).
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|