Menu:

Termostato

Come non fare un TERMOSTATO per casa con il solito programma scritto in EABASIC per il PPTEA?
Il passo successivo da fare sarà il CRONOTERMOSTATO.
Il sensore utilizzato è il solito LM35; la temperatura visualizzata è la media degli ultimi 20 secondi, quindi il valore è stabile.
Vengono utilizzati tre pulsanti, uno per entrare/uscire dalla programmazione, un'altro per aumentare la temperatura e l'ultimo per diminuire la temperatura; questi ultimi due pulsanti funzionano solamente in modalità programmazione.
Il termostato alza un bit (dove andrà applicato un relè) e visualizza un asterisco per indicare che il sensore è ON, se non mostra nulla il sensore è OFF.
Tengo a precisare che il valore della temperatura viene memorizzato nella EEPROM del PIC, ovviamente dopo il codice.

Questa è la discussione originale.

Questo è il file ".eab" del Termostato.
Scarica il file (ZIP)

Questo è il filmato:


Questo è il codice:

CODICE
04 '-----------------------------------------------
05 'TERMOSTATO FUNZIONANTE DALLA VERSIONE 2.1 PPTEA
06 '-----------------------------------------------
10 DIM MEM(20) as WORD
15 'CELL=255 PER DEFAULT E' GIA 255
18 'BLANK=" "
302 TEMP_RIF=REEPROM/10.0
305 LCDCLEAR
306 LCDWRITE="PPTEA"
307 IF A MOD 500 THEN 370
310 '---------------------------------------------------------------
315 'CALCOLO LA TEMPERATURA E FACCIO LA MEDIA DEGLI ULTIMI 20 VALORI
320 '---------------------------------------------------------------
325 MEM(INDICE MOD 20 +1)=CADS1*4.9
330 INDICE++
335 CLR G
340 T=0.0
345 G++
350 T+=MEM(G)
352 if G<20 AND G<INDICE THEN 345
355 T/=G
360 T/=10
361 '----- FINE CALCOLO TEMPERATURA MEDIA
362 IF TEMP_RIF >T THEN 366
363 OUT=0
364 STATO=" " 'BLANK '" "
365 GOTO 368
366 OUT=&H8000
367 STATO="*"
368 LCDPOS=&H19
369 LCDWRITE=STATO &" "& LEFT(T,4) &"ßC"
370 A++
375 IF INP AND &H10 THEN 385 ELSE 307
385 WEEPROM=TEMP_RIF*10
390 LCDPOS=&H11
393 SET RIALZATO
395 LCDWRITE="P="& TEMP_RIF
400 WAITMS 100
418 IF !RIALZATO then 420
419 RIALZATO = INP AND &H10
420 '
425 IF INP AND &H20 THEN 500
430 IF INP AND &H40 THEN 600
440 IF INP AND &H10 THEN 455 ELSE 418
450 '
455 if RIALZATO THEN 418
460 'USCITA DALLA PROGRAMMAZIONE
465 WAITS 1
470 GOTO 305
500 TEMP_RIF+=0.1
520 GOTO 385
600 TEMP_RIF-=0.1
620 GOTO 385



Crono Termostato

Questa è la realizzazione del CronoTermostato, l'applicazione più complessa realizzata fino a questo momento.
Richiede la versione PPTEA 2.2 o maggiore.
Consente di programmare 9 fasce orarie e applicarle all'interno della giornata.
La modalità di programmazione, che utilizza 4 pulsanti, dovrebbe essere intuitiva mentre l'orario può essere inserito tramite la porta USB,il comando di set dell'orario verrà implementato nella prossima versione.
Tutto si poggia sul PPTEA che utilizza:
1. l'orologio (DS1307)
2. eeprom esterna (24c16)
3. display (2x16)
4. sensore temperatura (LM35)
5. quattro pulsanti per la programmazione delle fasce orarie (programmazione, modifica, incrementa, decrementa)
6. un contatto che da il consenso alla caldaia (pin 28)
Il codice va messo nella eeprom esterna perchè occupa 1530 Token, ricordarsi di mettere il flag su EXTERNAL EEPROM, mentre gli orari, la configurazione e la temperatura viene memorizzata nella eeprom del processore.
Il passo per portare questa applicazione a controllare una caldaia è breve.


Questa è la discussione originale.

Questo è il file ".eab" del CronoTermostato.
Scarica il file (ZIP)

Questo è il filmato:


Questo è il codice:

CODICE
10 '----------------------------------------------------------------------------
20 'CRONO-TERMOSTATO FUNZIONANTE DALLA VERSIONE 2.2 PPTEA
30 '----------------------------------------------------------------------------
50 CONSTANT PULS_PROGR = 2
60 CONSTANT PULS_INCRE = 4
70 CONSTANT PULS_DECRE = 8
80 CONSTANT PULS_MODIF = 1
90 DIM MEM(20) as WORD ' UTILIZZO IL VETTORE PER LA MEDIA DELLA TEMPERATURA
100 CELL=254
110 TEMP_RIF=REEPROM*256.0
120 CELL=255
130 TEMP_RIF+=REEPROM
140 TEMP_RIF/=10
150 if TEMP_RIF <=99.0 then 170
160 TEMP_RIF=99.0
170 A=200
180 CLR PAG_PROG
190 LCDCLEAR
200 LCDWRITE="PPTEA"
210 IF A MOD 200 THEN 460
220 LCDPOS=&H23
230 A=DATE
240 LCDWRITE=A
250 '------ CALCOLO LA TEMPERATURA MEDIA DEGLI ULTIMI 20 VALORI
260 MEM(INDICE MOD 20 +1)=CADS1*4.9
270 INDICE++
280 CLR G
290 T=0.0
300 G++
310 T+=MEM(G)
320 if G<20 AND G<INDICE THEN 300
330 T/=G
340 T/=10
350 '--- FINE CALCOLO TEMPERATURA MEDIA
360 GOSUB 2420
370 IF TEMP_RIF >T AND ORA THEN 410
380 OUT=0
390 STATO=" "
400 GOTO 430
410 OUT=&H8000
420 STATO="*"
430 LCDPOS=&H19
440 LCDWRITE=STATO &" "& LEFT(T,4) &"ßC"
450 'GOSUB 2000 ' VERIFICO SE SONO IN UNA FASCIA ATTIVA
460 A++
470 GOSUB 1840
480 IF PULSANTE_PREMUTO=PULS_PROGR THEN 500 ELSE 210
490 '---SCELTA MENU'-----------
500 MENU++
510 CLR MODIFICA_ELEMENTO
520 IF MENU=1 then 570
530 IF MENU>=2 AND MENU<11 then 1880
540 IF MENU =11 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 CELL=254
640 WEEPROM=int(TEMP_RIF*10/256)
650 CELL=255
660 WEEPROM=int(TEMP_RIF*10) mod 256
670 LCDPOS=&H21
680 '
690 LCDWRITE="P="& left(TEMP_RIF&" ",4)
700 WAITMS 250
710 IF !MODIFICA_ELEMENTO THEN 780
720 '
730 IF BL MOD 10 THEN 780
740 BLINK=!BLINK
750 IF BLINK THEN 850
760 LCDPOS=&H20 + PSTART
770 LCDWRITE=BLCHAR
780 BL++
790 GOSUB 1840
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 710
840 '
850 ' ------ BLINK
860 IF MENU>=2 AND MENU<=10 then 1910
870 IF MENU = 1 THEN 670
880 IF MENU = 11 THEN 2260
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 170
980 '---FINE USCITA PROGRAMMAZIONE----
990 '------ PRESSIONE PULSANTE MODIFICA
1000 CLR BL
1010 CLR BLINK
1020 MODIFICA_ELEMENTO++
1030 WAITMS 250
1040 IF MENU>=2 AND MENU<=10 THEN 1200
1050 IF MENU=1 THEN 1080
1060 IF MENU=11 then 1130
1065 IF MENU>=12 AND MENU<19 THEN 1191
1070 GOTO 1910
1080 '------- BLINK TEMP TERMOSTATO
1090 MODIFICA_ELEMENTO = 1
1100 PSTART=3
1110 BLCHAR=" "
1120 GOTO 710
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 710
1191 '-----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 710
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 710
1280 PSTART=6
1290 GOTO 710
1300 PSTART=9
1310 GOTO 710
1320 PSTART=12
1330 GOTO 710
1340 '------INCREMENTO I VALORI SOTTO BLICK
1350 IF !MODIFICA_ELEMENTO THEN 780
1360 IF MENU = 1 THEN 1380
1370 IF MENU = 11 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 630
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 1910
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 2260
1640 '------DECREMENTO I VALORI SOTTO BLINK
1650 IF !MODIFICA_ELEMENTO THEN 780
1660 if MENU = 1 THEN 1680
1670 if MENU = 11 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 630
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 1910
1840 '------ TORNO PRESSIONE PULSANTI
1850 PULSANTE_PREMUTO=(INP AND &H78)/8
1860 RETURN
1870 '--- FINE PRESSIONE PULSANTI
1880 '------ MENU FASCE ORARIE
1885 if MENU<>2 then 1910
1890 LCDCLEAR
1900 LCDWRITE="PROG. ON OFF"
1910 LCDPOS=&H22
1920 SF=100+(MENU-2)*4
1930 CELL=SF
1940 ORA=REEPROM
1950 SF++
1960 CELL=SF
1970 MIN=REEPROM
1980 GOSUB 2120
1990 LCDWRITE="F"&int(MENU-1)&" " & ORA &":" & MIN &" "
2000 SF++
2010 CELL=SF
2020 ORA=REEPROM
2030 SF++
2040 CELL=SF
2050 MIN=REEPROM
2060 GOSUB 2120
2070 LCDWRITE=ORA &":" & MIN
2080 'WAITMS 512
2090 GOSUB 1840
2100 GOTO 780
2110 '---FINE MENU FASCE ORARIE
2120 '------CHECK CONGRUITA' ORE MINUTI E ZERO INIZIALE
2130 ZERO="0"
2140 IF ORA< 24 then 2160
2150 ORA=0
2160 if MIN<60 THEN 2180
2170 MIN=0
2180 ORA=RIGHT(ZERO&ORA,2)
2190 MIN=RIGHT(ZERO&MIN,2)
2200 RETURN
2210 '--FINE CONGRUITA'
2220 '------ MENU PROGRAMMA GIORNALIERO
2230 LCDCLEAR
2240 LCDWRITE="PROG.GIORNALIERA"
2250 WAITMS 512
2260 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 780
2420 '------ CHECK ORARIO NELLE FASCE GIORNALIERE
2430 FDATE=4
2440 MIN=DATE
2450 'USBOUT="S="&MIN
2460 SF=150
2470 CELL=SF
2480 ORA=REEPROM
2490 IF ORA <> SF-149 then 2640
2500 SF2=99+(SF-150)*4+1 'E' SETTATA LA FASCIA E' COMPRESO NELL'INTERVALLO
2510 CELL=SF2
2520 SEC=REEPROM*3600
2530 SF2++
2540 CELL=SF2
2550 SEC+=REEPROM*60
2560 'USBOUT="F="& int(SF-149) &"->"&SEC & " "
2570 SF2++
2580 CELL=SF2
2590 ORA=REEPROM*3600
2600 SF2++
2610 CELL=SF2
2620 ORA+=REEPROM*60
2630 IF MIN<=SEC AND MIN>ORA THEN 2690
2640 SF++
2650 IF SF< 159 then 2470
2660 ' FINE TEST
2670 CLR ORA
2680 GOTO 2700
2690 SET ORA
2700 FDATE=0
2710 USBOUT="RF="& ORA
2720 RETURN





Valid XHTML 1.0 Strict



[ Back to top ] [ Home ]