Questa è la realizzazione del CronoTermostato...l'applicazione più complessa realizzata ( da me) fino a questo momento. 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 messo mediante la porta USB (manca un comando di set dell'orario nel linguaggio...nella prox versione lo implementeremo).
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.
CODICE
10 '---------------------------------------------------------------------------- 20 'CRONO-TERMOSTATO FUNZIONANTE DALLA VERSIONE 2.1 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 '
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
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
Quanto prima lo schema e un video dimostrativo. Bolle
Modificato da NonSoloBolleDiAcqua - 21/12/2011, 08:34
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
A dire il vero volevo fare anche la possibilità di impostare il cronotermostato in tutti i giorni della settimana...cioè il lunedì fa una cosa, il martedì un'altra....etc...utile per i fine settimana...forse la faccio. Insomma sto facendo qualche esempio pratico...per far capire sia il linguaggio che le potenziaklità...tanto per divertirmi...tanto le cose serie devono ancora arrivare....ma occhio che i tempi sono maturi!!! Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
ciao bolle sei un grande in settimana nuova appena ho tempo mi reco in citta e vado a recuperare i componenti necessari,ti chiedo una cortesia,sempre se hai tempo,mi puoi dare una lista dei componenti necessari? ma pptea funziona anche su linux?
No, niente linux...solo Bill Gates. La lista dipende da cosa vuoi farci...spero non ti accontenterai di un semplice termostato o cronotermostato...vero?Cmq fai tu. Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).