Se sei già registrato           oppure    

Orario: 02/05/2024 13:03:04  

 

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: 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

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



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... faccine/laugh.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: 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

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



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

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 15/4/2013,00:37

Il codice è veramente ben fatto...precisione da certosino...mi sta servendo da spunto!
faccine/clap.gif faccine/clap.gif faccine/clap.gif



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

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 15/4/2013,06:19

faccine/surprise.gif

Che spettacolo ,tanto codice ed è pure chiaro nella lettura ........

Troppo forte faccine/clap.gif

Complimentoni e grazie della condivisione
ElettroshockNow

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



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....


faccine/construction.gif faccine/chair.gif
Tnks
Alessio287



CODICE

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 19/4/2013,07:24

Ti sei scritto sotto .........

Spaventoso lavoro ......,mo' và a trovà il bug ........... chiromante aiutaci te faccine/biggrin.gif

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 19/4/2013,12:22

Alla faccia del ceppi ratto.... faccine/ohmy.gif
Complimenti tanto per cominciare...faccine/clap.gif
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. faccine/rolleyes.gif

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

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 19/4/2013,12:56

Ciao,

se riusi la parola "indegnamente" o simili non ti parlo mai +..... faccine/ohmy.gif faccine/biggrin.gif


Poi.... sono un caxxoneeeeeeeeeeeeeeeeeeeeeeeeee faccine/argue.gif (autocensored)

Ho indicizzato bit invece che byte... sono un somaro.... ci sta davvero che la cosa lo faccia sbarellare.... un vero fenomeno


Collaborare con te è sinceramente un piacere ed altro... faccine/w00t.gif


Allora.... ora sono al lavoro e non ho dietro il PPTEA... stasera sistemo il discorso della memoria e vedo se è quello che mi dava i problemi che ho.

Verifico anche il discorso del numero degli annidamenti.


A questo punto la situazione delle cose fatte sarebbe:
- gestione numero sensori variabili (da 1 a 4)
- gestione temp per ogni sensore
- gestione isteresi per ogni sensore
- gestione 4 fasce temporali per ogni sensore.


Quello che manca:
- gestione ON-OFF della fascia; tu utilizzavi nel cronot un ulteriore mask per questo mi pare oppure si può fare contestualmente al set della temp
- gestione dei controlli e relativi ON-OFF relè in base a tutti i parametri inseriti (core del programma che ora fa solo controlli su temp+isteresi, ma non su fasce)
- ottimizzazione codice (visto che mi hai "costretto" a riprendere il lavoro che preferivo fare ed ora non mi fanno + fare ( faccine/sad.gif )... ho cercato di riprendere le buone abitudini che avevo una volta... cioè di scrivere codice in modo chiaro e il più semplice possibile in modo da ricaprilo io dopo tempo e di farlo capire ad altri, ma questo non porta ad avere un codice ottimizzato che però in questo determinato progetto non è molto importante non avendo necessità di performance.

C'è quindi ancora da fare per arrivare in fondo e l'aiuto dell'elettricista, come di chiunque altro voglia (questo è lo spirito che ho trovato in questo forum) sono ben accetti


Per quanto riguarda lo schema provo a scrivere le differenze che sono minime:

1) ho implementato la pulsantiera utilizzando un unico CADS che nel codice è il 4 ma dovrebbe essere il CADS 5 (poi lo cambio)
2) per i sensori PT100 utilizzo i CADS da 1 a 4 (a seconda di quanti ne devo usare)
3) per i rele utilizzo i BIT15/14/13/12 sempre a seconda del numero di sensori e sono associati al contrario CADS1/bit 15
4) utilizzo un display 4x20 nella modalità 2 fili (bit 4/11)

Lo schema della pulsantiera l'ho già postato in un messaggio, quello dei rele l'ho preso da un tuo schema (trans, res, diodo, etc)


A disposizione
Alessio287

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



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.... faccine/chair.gif faccine/crash.gif

Bye
Alessio287

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 19/4/2013,15:24

Guarda che non è detto che il problema sia quello...magari fosse quello...anzi speriamo sia quello...altrimenti la cappellata gigantesca l'ho fatta io...ma sono talmente abituato ...se sommi uno ad infinito...fa sempre infinito!!!!! faccine/laugh.gif
Cmq queste cose servono per curare meglio il manuale...ogni possibile curva pericolosa va sistemata...tanto prima o poi qualcuno esce di strada...quindi meglio prevenire che medicare!
PS:Perchè non utilizzi la eeprom interna? Hai 255 byte ( il byte zero è riservato serve al PPTEA) ...non ti bastano? faccine/smile.gif Cmq fai come meglio credi...non sto quì a criticare...ma ad apprendere! 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).

 

proxygenerator

Avatar
KiloWatt


Gruppo:Utente
Messaggi:140

Stato:



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)
faccine/box.gif
indi per cui sarà un gioco da 'ragazzetto semplice e colorato' http://i47.tinypic.com/a2y7oo.gif

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 19/4/2013,15:55

CITAZIONE (NonSoloBolleDiAcqua @ 19/4/2013, 16:24)
( il byte zero è riservato serve al PPTEA)

. faccine/cry.gif ..questa non la sapevo... e io che ci butto uno dei valori configurabili della mia domotica? faccine/sad.gif cosa succede? a che serve il byte 0?



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

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



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.
faccine/bye2.gif



---------------
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