| alessio287
| Inviato il: 11/4/2013,14:53
|
Grazie Bolle,
proverò e ti faccio sapere....
la parte che mi manca del programma (le fasce) sono le + complesse (per me) e quindi sto un pò faticando...
Quando pensi di rilasciare la versione 4.1?
Tnks Alessio287
| | | | NonSoloBolleDiAcqua
| Inviato il: 11/4/2013,19:56
|
CITAZIONE (alessio287 @ 11/4/2013, 15:53) Quando pensi di rilasciare la versione 4.1? Anche subito se la provi...
--------------- 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: 11/4/2013,23:37
|
Sto sviluppando usando sempre l'ultima versione che rilasci....
mi costa un pò di tempo, ma avevo promesso al rilascio della 4 che avrei partecipato al test
A dispo Alessio287
| | | | alessio287
| Inviato il: 13/4/2013,22:02
|
Ciao,
questa è la versione compilata con il compilatore 4.1
Permette la gestione di sensori (da1 a 4), temperatura ed isteresi, gestione rele, ma non ha ancora la gestione delle fasce orarie.
Ovvio che tutto è da provare... di certo non c'è nulla
Bye Alessio287
PRAGMA NO_NUM_LINE 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 ' 'Versione 2.06 - 12/04/2013 ' utilizzo SUB/SUBEND compilatore 4.1 + gestione memoria celle (int/est) + gestione pulsanti differenziati ' tra PROGR e MODIF (al rilascio) e INCR / MODIF (continui) '----------------------------------------------------------------------------
CONSTANT VERSIONE=2.06
'Costanti gestione celle di memoria da utilizzare in base alla memoria CONSTANT MEMORIA_INT = 255 CONSTANT MEMORIA_EST_16Kb = 15000 CONSTANT MEMORIA_EST_32Kb = 31000 CONSTANT MEMORIA_EST_64Kb = 63000 CONSTANT MEMORIA_EST_128Kb = 127000 CONSTANT MEMORIA_EST_256Kb= 255000 'Memoria utilizzata CONSTANT MEMORIA=MEMORIA_EST_64Kb
'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=MEMORIA '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=MEMORIA-8 '247 CONSTANT CELL_MAX_SENSORE=MEMORIA-1 '254
'Costanti gestione temperature isteresi sensori (4 sensori x 2 celle ciascuno) CONSTANT CELL_INI_ISTERESI=MEMORIA-16 '239 CONSTANT CELL_MAX_ISTERESI=MEMORIA-9 '246
SUB MAIN EEXTERNAL=1 'utilizzo memoria esterna
' 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
CALL PRESENTAZIONE
CADS=5
'Creo un vettore dove associo al CADS temperatura il relativo BIT Rele 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
PMOD = 0
'Leggo il numero dei sensori definiti CALL LEGGO_SENSORE
MENU = MENU_INIT PULSANTE_PREMUTO = PULS_NULLO
'CICLO INFINITO PROGRAMMA REPEAT 'controllo pulsante scelto :LBL_PULSANTI CALL 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 CALL 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"
CALL F_MENU_SENSORE GOTO :LBL_PULSANTI
:LBL_MENU_INIT CALL F_MENU_INIT UNTIL TRUE
END SUBEND
'------ GESTIONE MENU SENSORE SUB F_MENU_INIT 'USBOUT=DATE&CR_LF 'Gestione RIGA 2 LCDPOS=LCD4X20_ROW_2 RIGA_LCD = "SENSORI=" & SENSORE CALL 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 CALL LEGGO_TEMP_SONDA 'Leggo temperatura riferimento IDX CALL LEGGO_TEMP_RIF 'Leggo temperatura isteresi IDX CALL LEGGO_ISTERESI 'Controllo rele sensore CALL 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 CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD GOTO :LBL_2A_STR :LBL_SCRIVO_RIGA4 LCDPOS=LCD4X20_ROW_4 CALL 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
'USBOUT="ID_SENSORE="&ID_SENSORE&CR_LF
'ID_SENSORE è +1 rispetto al numero dei sensori presenti per il ciclo for IF ID_SENSORE = 2 THEN :LBL_SENS_1 'se ho 1 sensore IF ID_SENSORE = 3 THEN :LBL_SENS_2 'se ho 2 sensori IF ID_SENSORE = 4 THEN :LBL_SENS_3 'se ho 3 sensori 'se ho 4 sensori non faccio nulla RETURN
:LBL_SENS_3 'fillo la riga 4 'USBOUT="FILLO RIGA 4"&CR_LF LCDPOS=LCD4X20_ROW_4 CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD RETURN
:LBL_SENS_2 'pulisco la riga 4 'USBOUT="PULISCO RIGA 4"&CR_LF LCDPOS=LCD4X20_ROW_4 CALL PULISCI_RIGA_LCD LCDWRITE=RIGA_LCD RETURN
:LBL_SENS_1 'fillo la riga 3 pulisco la riga 4 'USBOUT="FILLO RIGA 3 e PULISCI RIGA 4"&CR_LF LCDPOS=LCD4X20_ROW_3 CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD LCDPOS=LCD4X20_ROW_4 CALL PULISCI_RIGA_LCD LCDWRITE=RIGA_LCD SUBEND
'------ SUBROUTINE GESTIONE MENU SENSORE ' Nome: ' F_MENU_SENSORE ' Parametri: ' INPUT --> PULSANTE_PREMUTO = pulsante premuto ' INPUT --> MODIFICA = gestione modifica ' INPUT --> SENSORE = numero sensore ' SUB 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 CALL SCRIVO_SENSORE GOTO :L001 :L013 RETURN :L009 IF MODIFICA=FALSE THEN :L010 SENSORE+=1 IF SENSORE<=MAX_NUM_SENSORI THEN :L011 SENSORE = 1 :L011 CALL 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 CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD 'USBOUT="SENSORI=" & SENSORE & CR_LF
'Pulisco la 4a riga LCDPOS = LCD4X20_ROW_4 CALL PULISCI_RIGA_LCD LCDWRITE=RIGA_LCD SUBEND
'------ FUNZIONE PRESSIONE PULSANTI SUB 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
'gestione attesa rilasci pulsante solo nel caso di PROGR e MODIF IF PULSANTE_CADS > PULS_CADS_MODIF THEN :LBL_NO_GEST_RILASCIO :LBL_RILASCIO 'USBOUT="RILASCIO OFF"&CR_LF RILASCIO_CADS=CADSIND(CADS_PULSANTE) IF RILASCIO_CADS <= PULS_CADS_NULLO THEN :LBL_RILASCIO :LBL_NO_GEST_RILASCIO
'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 SUBEND
'----- FUNZIONE LEGGO SENSORI ' Nome: ' LEGGO_SENSORI ' Parametri: ' OUTPUT --> SENSORE = numero SENSORE ' SUB 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 SUBEND
'----- FUNZIONE PULISCI RIGA LCD SUB PULISCI_RIGA_LCD RIGA_LCD=" " SUBEND
'----- FUNZIONE PULISCI RIGA LCD SUB FILLA_RIGA_LCD FOR IDX=LEN(RIGA_LCD) TO 19 RIGA_LCD=RIGA_LCD&" " NEXT IDX SUBEND
'----- FUNZIONE SCRIVO SENSORI ' Nome: ' SCRIVO_SENSORE ' Parametri: ' INPUT --> SENSORE = numero SENSORE ' OUTPUT --> NONE ' SUB SCRIVO_SENSORE 'USBOUT="SENSORE="&SENSORE&CR_LF CELL=CELL_SENSORE WEEPROM=SENSORE SUBEND
'----- FUNZIONE LEGGO TEMPERATURA RIFERIMENTO ' Nome: ' LEGGO_TEMP_RIF ' Parametri: ' INPUT --> ID_SENSORE = numero SENSORE per calcolo celle ' OUTPUT --> TEMP_RIF = valore temperatura TEMP_RIF ' SUB 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 SUBEND
'----- 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 ' SUB SCRIVO_TEMP_RIF CELL=CELL_MAX_SENSORE-(2*ID_SENSORE)+2 'Uso 10.05 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.05/256) CELL=CELL_MAX_SENSORE-(2*ID_SENSORE)+1 WEEPROM=INT(TEMP_RIF*10.05) MOD 256 SUBEND
'------ GESTIONE SOTTOMENU X OGNI SENSORE SUB GESTIONE_SOTTOMENU 'USBOUT="N° SENSORI="&SENSORE&CR_LF
'Sottomenu è la variabile che cicla tutti i sensori definiti (da 1 a 4 Max) SOTTOMENU = 1
'VociSMenu è la variabile che cicla tutti i parametri per ogni sottomenu VOCISMENU = 0
'Per ogni sensore gestisco i relativi sottomenu REPEAT IF PULSANTE_PREMUTO = PULS_NULLO THEN :L0S3 IF PULSANTE_PREMUTO = PULS_PROGR THEN :L0S2 'USBOUT="PROBLEMA="&PULSANTE_PREMUTO GOTO :L0S3 :L0S2 'USBOUT="SOTTOMENU="&SOTTOMENU&" VOCISMENU="&VOCISMENU&CR_LF IF (SOTTOMENU = SENSORE) AND (VOCISMENU = MAX_VOCISMENU) THEN :LBL_RESET_SOTTOMENU IF VOCISMENU < MAX_VOCISMENU THEN :L0V1 SOTTOMENU+=1 VOCISMENU = 1 GOTO :L0V2 :L0V1 VOCISMENU+=1 :L0V2
'USBOUT="SOTTOMENU SCELTO="&SOTTOMENU&CR_LF GOTO :L0S3 :LBL_RESET_SOTTOMENU 'Esco da gestione sottomenu RETURN
:L0S3 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 CALL F_MENU_ISTERESI GOTO :L0V4 :L0V3 CALL F_MENU_TEMPREF
:L0V4 'GOTO :LBL_SOTTOM_PULSANTI
'controllo pulsante scelto :LBL_SOTTOM_PULSANTI CALL PRESSIONE_PULSANTI 'USBOUT="PULSANTE PR SOTTOM="&PULSANTE_PREMUTO&CR_LF WAITMS 50
UNTIL TRUE SUBEND
'------ GESTIONE MENU TEMPERATURA RIFERIMENTO ' Nome: ' F_MENU_TEMPREF ' Parametri: ' INPUT --> PULSANTE_PREMUTO = pulsante premuto ' INPUT --> MODIFICA = gestione modifica ' INPUT --> SOTTOMENU = sottomenu ' SUB 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 CALL 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 CALL 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 CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD
CALL LEGGO_TEMP_RIF LCDPOS=LCD4X20_ROW_4 RIGA_LCD = "TEMP RIF=" & LEFT(TEMP_RIF,4) CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD 'USBOUT="SENSORE=" & ID_SENSORE & CR_LF SUBEND
'------ GESTIONE MENU TEMPERATURA ISTERESI ' Nome: ' F_MENU_ISTERESI ' Parametri: ' INPUT --> PULSANTE_PREMUTO = pulsante premuto ' INPUT --> MODIFICA = gestione modifica ' INPUT --> SOTTOMENU = sottomenu ' SUB 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 CALL 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 CALL 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 CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD
CALL LEGGO_ISTERESI LCDPOS=LCD4X20_ROW_4 RIGA_LCD = "ISTERESI=" & LEFT(ISTERESI,5) CALL FILLA_RIGA_LCD LCDWRITE=RIGA_LCD 'USBOUT="SENSORE=" & ID_SENSORE & CR_LF SUBEND
'----- FUNZIONE LEGGO TEMPERATURA ISTERESI ' Nome: ' LEGGO_ISTERESI ' Parametri: ' INPUT --> ID_SENSORE = numero SENSORE per calcolo celle ' OUTPUT --> ISTERESI = valore temperatura ISTERESI ' SUB 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 SUBEND
'----- FUNZIONE SCRIVO TEMPERATURA ISTERESI ' Nome: ' SCRIVO_ISTERESI ' Parametri: ' INPUT --> ISTERESI = valore temperatura ISTERESI ' INPUT --> ID_SENSORE = numero SENSORE per calcolo celle ' OUTPUT --> NONE ' SUB 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 SUBEND
'----- FUNZIONE RICAVO TEMPERATURA SENSORE ' Nome: ' LEGGO_TEMP_SONDA ' Parametri: ' INPUT --> ID_SENSORE = numero CADS da leggere ' OUTPUT --> TEMP_SONDA = temperatura sonda ' SUB 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 SUBEND
'----- 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 ' SUB 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 SUBEND
'----- SUBROUTINE PRESENTAZIONE ' Nome: ' PRESENTAZIONE ' Parametri: ' INPUT/OUTPUT --> NONE ' SUB PRESENTAZIONE LCDINIT LCDCLEAR LCDPOS=LCD4X20_ROW_1 LCDWRITE="PPTEA CronoT v." & VERSIONE LCDPOS=LCD4X20_ROW_3 LCDWRITE="Starting....." WAITS 1 SUBEND
| | | | | | | ElettroshockNow
| Inviato il: 15/4/2013,06:19
|
Che spettacolo ,tanto codice ed è pure chiaro nella lettura ........
Troppo forte
Complimentoni e grazie della condivisione ElettroshockNow
| | | | alessio287
| Inviato il: 19/4/2013,07:19
|
Ciao,
ecco il codice che sbarella sia di suo che di PPTEA (detto che anche questo potrebbe essere per ovvia colpa mia)
Se ci sono poi tuo commenti/consigli puoi metterli tranquillamente di la....
Tnks Alessio287
| | | | ElettroshockNow
| Inviato il: 19/4/2013,07:24
|
Ti sei scritto sotto .........
Spaventoso lavoro ......,mo' và a trovà il bug ........... chiromante aiutaci te
| | | | NonSoloBolleDiAcqua
| Inviato il: 19/4/2013,12:22
|
Alla faccia del ceppi ratto.... Complimenti tanto per cominciare... Ho dato una rapida occhiata...ho notato una incongruenza che forse non ha nulla a che fare con il problema...ma te la dico subito visto che sei uno dei pochi che utilizza a pieno le funzionalità della EEPROM. Allora selezioni la memoria esterna per memorizzare i valori mediante l'istruzione
CODICE EEXTERNAL=1 'utilizzo memoria esterna ed è perfetto..però poi indicizzi il valore 63000
CODICE CONSTANT MEMORIA_EST_64Kb = 63000 CONSTANT MEMORIA=MEMORIA_EST_64Kb ma tu possiedi una memoria da 8Kbit (24C64), cioè di 8192 Byte (= 64*1024/8) massimo indicizzabile è 8191...praticamente vai a scrivere fuori la memoria esterna.
Se si blocca in quel punto abbiamo risolto...altrimenti devo indagare ancora! Ciao Bolle PS1:Avevo intenzione di scrivere un programma sufficientemente grande per testare la versine ADVANCED...a questo punto...testo il tuo oppure posso darti (indegnamente) una mano...ma la parte complicata è lavorare in modo sincrono...se mi ritagli qualche cosa di autonomo... possiamo collaboricchiare! PS2:Lo schema elettrico è lo stesso del cronotermostato giornaliero? Cioè
--------------- 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: 19/4/2013,14:44
|
Ciao,
questa è la parte di codice modificata:
PRIMA: 'Costanti gestione celle di memoria da utilizzare in base alla memoria CONSTANT MEMORIA_INT = 255 CONSTANT MEMORIA_EST_16Kb = 15000 CONSTANT MEMORIA_EST_32Kb = 31000 CONSTANT MEMORIA_EST_64Kb = 63000 CONSTANT MEMORIA_EST_128Kb = 127000 CONSTANT MEMORIA_EST_256Kb= 255000 'Memoria utilizzata CONSTANT MEMORIA=MEMORIA_EST_64Kb
DOPO: 'Costanti gestione celle di memoria da utilizzare in base alla memoria CONSTANT MEMORIA_INT = 255 CONSTANT MEMORIA_EST_2KB = 2000 CONSTANT MEMORIA_EST_4KB = 4000 CONSTANT MEMORIA_EST_8KB = 8000 CONSTANT MEMORIA_EST_16KB = 16000 CONSTANT MEMORIA_EST_32KB= 32000 'Memoria utilizzata CONSTANT MEMORIA=MEMORIA_EST_8KB
Mi scuso per la cappella gigantesca.... bit e byte....
Bye Alessio287
| | | | | | | proxygenerator
| Inviato il: 19/4/2013,15:33
|
leggenda narra che il bollicino fosse in grado di tenere sotto controllo 100.000 linee di codice ora, che si è rimbambito e fa l'elettricista, ne saprà gestire 24.000 (come i baci del molleggiato)
indi per cui sarà un gioco da 'ragazzetto semplice e colorato'
| | | | MarKoZaKKa
| Inviato il: 19/4/2013,15:55
|
CITAZIONE (NonSoloBolleDiAcqua @ 19/4/2013, 16:24) ( il byte zero è riservato serve al PPTEA) . ..questa non la sapevo... e io che ci butto uno dei valori configurabili della mia domotica? cosa succede? a che serve il byte 0?
--------------- Tecnico qualificato in clownerie Windsurfer a tempo perso Slalomaro senza speranze
| | | | NonSoloBolleDiAcqua
| Inviato il: 19/4/2013,16:19
|
Il BYTE Zero della EEPROM INTERNA serve ad un sacco di cose...quel byte identifica dove deve andare a pescare il codice il PPTEA...e serve anche ad altro...ma non se ne era già parlato? Pensavo di aver parlato proprio con te...ora cerco nelle discussioni.
Cmq se lo modifichi c'è il forte rischio che non funga una cippa teresa. Esempio: se lo metti a zero...il PPTEA non parte...se lo metti a 255 va a pescare il codice sulla memoria esterna 24c16, se lo metti =1 va a prendere il codice sulla memoria esterna 24c32 etc..etc..etc. Dai...sicuramente non lo modifichi...modificherai il Byte 1...lo zero è tutto del PPTEA...non lo toccate. Dopo il Byte zero parte il codice se si utilizza la memoria interna del PPTEA.
Cavolo...ho trovato il punto dove te l'ho detto...praticamente un errore di interpretazione notevole...colpa mia.
Ci riprovo per tutti e dovrò anche scriverlo nel manuale dove non mi sembra sia scritto. Se si utilizza l'espansione di memoria il codice va nella eeprom esterna e quella interna rimane libera. Rimangono liberi 255 byte su 256 ( byte liberi 1-255) mentre il Byte ZERO rimane sempre e comunque riservato al PPTEA. Chiedo umilmente scusa.
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|