Se sei già registrato           oppure    

Orario: 26/04/2024 01:35:35  

 

Energia Alternativa ed Energia Fai Da Te > PPTEA

VISUALIZZA L'ALBUM

Pagine: (20)   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   [20]    (Ultimo Msg)


PPTEA : Domotica
FinePagina

ForumEA

Avatar
MegaWatt


Gruppo:MODERATORE
Messaggi:395

Stato:



Inviato il: 29/09/2014 17:30:54

Che spettacolo vedere il codice,questo tuo progetto sarà il riferimento del PPTEA,dovrebbe essere portato in giro per le fiere:vedi make faire Faccine/Smileys_0003.gif



---------------
Assistente ForumEA

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 29/09/2014 22:37:07

...considerato che si tratta di cowboy programming...



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 09/12/2014 12:13:29

Azz, ho ripreso in mano l'oggetto , e mi sono accorto di non aver aggiornato la documentazione... (si, devo leggermi la documentazione per ricordarmi come funziona... sarà Alzheimer?.... chi?)



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 13/12/2014 08:59:06

Allra, ho scoperto un baco, ho aggiornato la documentazione del nodo, ho aggiornato codice e documentazione del master, ho messo tutto QUI
Ciao!



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 13/12/2014 09:00:11

Elettro, hai poi implementato la domotica?



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 24/02/2015 12:14:34

Ho fatto piccoli aggiustamenti nel codice, per risparmiare ancora qualche token, appena bolle scoverà il baco che gli ho segnalato, posterò tutto, e mi dedicherò alla realizzazione del controller impianto, probabilmente con il Micromite + interfaccia terminale vga + PPTEA... ohmamma!!!



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 21/09/2015 21:30:51

Ulteriore versione del codice nodo, a seguito dei test su una rete di 4 nodi. Migliorata la gestione comunicazioni, eliminata selezione velocità, ora fissa a 9600bps.
Con questo codice hanno girato 4 nodi in rete con 1 interrogazione dal master controller ogni secondo, per 24ore, senza che i nodi si piantassero.

Adesso mi metto sotto con il Micromite master controller.


PRAGMA NO_NUM_LINE
PRAGMA EXTENDED2K_EEPROM

REM INIZIO PROGRAMMA
REM PPTEA/DOMO v3.28 19/09/15

REM IMPOSTAZIONI INIZIALI
		SETIO=&H67803
		OUT=&H0000
		PWMIO1=&H0
		CADS=2
		EEXTERNAL=0
		SERIALSPEED=SPEED_9600
		CONSTANT MRQ_OUT=&HFD
		CONSTANT MRQ_IN=&HFB
		CONSTANT MRQ_ANALOG=&HFA
		CONSTANT MRQ_SET=&HFE
		CONSTANT MRQ_TOG=&HFF
		CONSTANT MRQ_LSET=&HF9
		CONSTANT MRQ_LRST=&HF8
		CONSTANT MRQ_NOP=&HF0
		CONSTANT MAST_CMD=&HC0
		CONSTANT MAST_PRG=&HF0
		CONSTANT MAST_RPL=&HAF
		CONSTANT PROG_MODE_IO=&H7F
		CONSTANT PROG_RPL=&HDF
		CONSTANT PROG_MODE_ANSW=&HBF
		CONSTANT PROG_ERR=&HEF
		CONSTANT DPRG=&H10
	:INIT
		CALL LOAD_MEMORY
		IF !LOAD_MEMORY THEN
			WPGM=TRUE
			CALL WAIT_PGM
			CALL COMMS_CHECK
		ELSE
			WPGM=FALSE
			CALL INITOUTS
		ENDIF

REM LOOP PRINCIPALE
	:MAIN_LOOP
		IF WPGM THEN :INIT
		CALL INPUT_CHECK
		IF INPUT_CHECK<&H2F AND INPUT_CHECK>&H00 THEN CALL CALCOUT(FALSE)
		IF TIMER-RT<COMM_INTR THEN :MAIN_LOOP
		CALL COMMS_CHECK
		GOTO :MAIN_LOOP
	END

REM CONTROLLO INGRESSI
	SUB INPUT_CHECK
		T_ADDR=&H00
		P_ADDR=&H0F-(INP/&H800)
		IF P_ADDR=&H00 THEN :EXIT_CHECK
		GV1=FALSE
		GV2=TIMER+PWT 
		ST=TIMER
	:PUSHTIME_MEASURE
		IF TIMER<GV2 THEN :SKIP_FLASH
		GV2=TIMER+PWT
		GV1=!GV1
		OUTBIT(&H0F)=GV1*DO_SIGNAL
	:SKIP_FLASH
		IF &H0F-(INP/&H800)<>&H0 AND TIMER<ST+PUSHTIME2 THEN :PUSHTIME_MEASURE
		PTIME=TIMER-ST
		IF PTIME>PUSHTIME1 THEN T_ADDR=&H01
		IF PTIME>PUSHTIME2 THEN	T_ADDR=&H02
		OLD_P=P_ADDR
		OLD_T=T_ADDR
		OUTBIT(&H0F)=FALSE
	:EXIT_CHECK
		INPUT_CHECK=P_ADDR*&H03+T_ADDR
	SUBEND



REM CALCOLO STATO USCITE INIZIALE
	SUB INITOUTS
		CELL=&H02
		OLD_OUT=REEPROM
		NEW_OUT=OLD_OUT
		IF RELAY=&HAA THEN
			MEM=OLD_OUT
			CALL SETOUT
		ENDIF
	SUBEND

REM ATTESA PROGRAMMAZIONE VIA SERIALE/USB
	SUB WAIT_PGM
		MOD_OUT=0
		COMM_RESET=30.0
		COMM_INTR=0.500
		COMM_WAIT=0.250
		CALL SIGNAL(5,6)
	SUBEND
	
REM CONTROLLO COMUNICAZIONI IN ARRIVO
	SUB COMMS_CHECK
			ST=TIMER+COMM_WAIT
			WHILE TIMER<ST
				COM_IN=COM_IN & SERIALINPSTR & USBINPSTR
			LOOP
			IF LEN(COM_IN)>=&H04 THEN 
				CALL COMM_ANALYZE
				RT=TIMER
			ENDIF
			IF TIMER>=COMM_RESET THEN 
				SERIALCLOSE
				RESET_TIMER
			ENDIF
	SUBEND

REM ANALISI COMUNICAZIONI IN ARRIVO ED ESECUZIONE COMANDI REMOTI
	SUB COMM_ANALYZE
		RESET_TIMER
	:ANALYZE
		GV3=&H01
		MSGID=ASC(MID(COM_IN,1,1)))
		MRQ=ASC(MID(COM_IN,2,1)))
		DATOIN=ASC(MID(COM_IN,3,1)))
		CHECKIN=ASC(MID(COM_IN,4,1)))
		CALL CHECK
		MASTREPLY=TRUE
 		IF CHECKIN<>CHECK THEN :ANALYZEBACK
		IF MSGID=MAST_PRG OR MSGID=NODE_PRG THEN :PROG_COMMAND
		IF WPGM THEN :ANALYZEOK 
'	:COMMANDS
		MASTREPLY=FALSE
		IF MSGID=MAST_CMD THEN :MAST_COMMS
		MASTREPLY=TRUE
		IF MSGID<>NODE_CMD THEN :ANALYZEOK
		MSGID=MAST_RPL
		IF MRQ=MRQ_NOP THEN :NOP_COMM
		IF MRQ=MRQ_IN THEN :COMMS_INSTATE
		IF MRQ=MRQ_OUT THEN :COMMS_OUTSTATE
		IF MRQ=MRQ_ANALOG THEN 
			GV2=1
	:COMMS_ANALOG
			AG1=0
			GV1=&H0
	:ADD
			AG1+=CADSIND(GV2)
			GV1--
			IF GV1>&H9 THEN :ADD
			AG1=(AG1/&HA)*&H2+&H801
			AG3=AG1/&H100
			AG2=(AG1-AG3*&H100)/&H10
			AG1=AG1-(AG3*&H100+AG2*&H10)
			MRQ=NODE_ID+AG3
			DATOIN=AG2*&H10+AG1
			CALL COMMOUT
			GV2++
			IF GV2<3 THEN :COMMS_ANALOG
			GOTO :ANALYZEOK
		ENDIF
	:MAST_COMMS
		IF MRQ=MRQ_SET THEN :COMMS_SETOUT 
		IF MRQ=MRQ_TOG THEN :COMMS_TOGOUT
		IF MRQ=MRQ_LSET THEN :COMMS_LSET
		IF MRQ=MRQ_LRST THEN :COMMS_LRST
		GOTO :ANALYZEOK
'COMUNICAZIONE USCITE ANALOGICHE
	:COMMS_OUTSTATE
		MRQ=NODE_ID+&HD
		CELL=2
		DATOIN=REEPROM+&H80
		GOTO :COMMS_END
	:COMMS_INSTATE
		MRQ=NODE_ID+&HB
		DATOIN=(OLD_T*&H10+OLD_P) OR &H80
		GOTO :COMMS_END
	:COMMS_SETOUT
		MRQ=NODE_ID+&HE
		T_ADDR=&H03
		GOTO :TOG_SET_END
	:COMMS_TOGOUT
		MRQ=NODE_ID+&HF
		T_ADDR=&H06
		GOTO :TOG_SET_END	
	:COMMS_LSET
		MRQ=NODE_ID+&H9
		T_ADDR=&H04
		GOTO :TOG_SET_END	
	:COMMS_LRST
		MRQ=NODE_ID+&H8
		T_ADDR=&H05
	:TOG_SET_END
		MOD_OUT=DATOIN-&H80
		CALL CALCOUT(TRUE)
		GOTO :COMMS_END
	:NOP_COMM
		MRQ=NODE_ID+&HC
		MSGID=MAST_RPL
		CELL=&HF7
		IF DATOIN=&HFF THEN 
			OLDNOP=REEPROM
			DATOIN=OLDNOP
			GOTO :COMMS_END
		ENDIF
		IF DATOIN<>&HF0 THEN :ANALYZEBACK
		NOP=REEPROM
		DATOIN=&H7F
		IF NOP=OLDNOP THEN WEEPROM=&H80
		GOTO :COMMS_END
	:PROG_COMMAND
		IF MSGID=MAST_PRG THEN MASTREPLY=FALSE
		CELL=&HFF
		IF MRQ=PROG_MODE_IO THEN
			MRQ=NODE_ID + &HF
			IF WPGM AND DATOIN=&H55 THEN :EXIT_PROGMODE
			IF DATOIN=&HAA AND MSGID=NODE_PRG THEN :ENTER_PROGMODE
			IF DATOIN=&HAA AND MSGID=MAST_PRG AND INPUT_CHECK=&H2F THEN :ENTER_PROGMODE 
		ENDIF
		IF MRQ=PROG_ERR THEN :PROG_ERROR_QRY
		IF WPGM THEN :PROG_DATA
		GOTO :ANALYZEOK
	:ENTER_PROGMODE
		WEEPROM=&H02
		WPGM=TRUE
		GOTO :PROGMODE_COMM
	:EXIT_PROGMODE
		WEEPROM=&HAA
	:PROGMODE_COMM
		MSGID=PROG_MODE_ANSW
		GOTO :COMMS_END
	:PROG_DATA
		IF MRQ>=&H90 THEN :NODPRG
	<img border=0 src=faccine\biggrin.gif width=20 height=20>PRG
		MRQ-=DPRG
		DATOIN-=DPRG
	:NODPRG
		CELL=MRQ
		WEEPROM=DATOIN
		CALL SIGNAL(25,1)
		MSGID=PROG_RPL
		GOTO :COMMS_END
	:PROG_ERROR_QRY
		IF MSGID=NODE_PRG OR WPGM THEN MASTREPLY=TRUE
		DATOIN=REEPROM
		MSGID=PROG_ERR
		MRQ=NODE_ID + &HF
		GOTO :COMMS_END
	:COMMS_END
		IF MASTREPLY THEN CALL COMMOUT
	:ANALYZEOK
		GV3=&H04
	:ANALYZEBACK
		COM_IN=RIGHT(COM_IN,LEN(COM_IN)-GV3)
		IF LEN(COM_IN)>=4 THEN :ANALYZE
		COM_IN=""
	SUBEND

REM CALCOLO CHECK BYTE
	SUB CHECK
		CHECK=(MRQ+DATOIN) MOD &H100
		IF CHECK<>&H00 THEN :CHECKBACK
		CHECK=&HFF
	:CHECKBACK
	SUBEND

REM TRASMISSIONE MESSAGGI SU SERIALE/USB
	SUB COMMOUT
		CALL CHECK
		GV1=CHR(MSGID)
		GV1=GV1&CHR(MRQ)
		GV1=GV1&CHR(DATOIN)
		GV1=GV1&CHR(CHECK)
		SERIALOUT=GV1
		USBOUT=GV1
	SUBEND

REM CALCOLO NUOVO STATO USCITE
	SUB CALCOUT
		IF T_ADDR>&H02 THEN :COMMSET
		CELL=INPUT_CHECK
		MOD_OUT=REEPROM
		IF MOD_OUT=&H80 THEN :CALCOUTBACK
		IF MOD_OUT>&H80 THEN :MEM_NOPCOMM
:COMMSET
		CELL=&H02
		OLD_OUT=REEPROM
		INIBH_OUT=(OLD_OUT AND MASKBIT)
		IF T_ADDR=&H04 THEN
			MOD_OUT=OLD_OUT OR MOD_OUT
			GOTO :IMPOSE
		ENDIF
		IF T_ADDR=&H05 THEN
			MOD_OUT=OLD_OUT AND MOD_OUT
		ENDIF
		IF T_ADDR=&H02 OR T_ADDR=&H03 THEN :IMPOSE
	:TOGGLE
		IF RELAY=&H55 THEN <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS ELSE :XOROUTS
	:IMPOSE
		IF RELAY=&H55 THEN :XOROUTS
	<img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS
		NEW_OUT=MOD_OUT
		IF T_ADDR=&H02 THEN
			NEW_OUT=NEW_OUT OR INIBH_OUT
		ENDIF
		IF RELAY=&H55 THEN MEM=MOD_OUT XOR OLD_OUT ELSE MEM=NEW_OUT
		GOTO <img border=0 src=faccine\biggrin.gif width=20 height=20>OIT
	:XOROUTS
		IF T_ADDR=&H02 THEN
			MOD_OUT=MOD_OUT OR INIBH_OUT
		ENDIF
		NEW_OUT=MOD_OUT XOR OLD_OUT
		IF RELAY=&H55 THEN MEM=MOD_OUT ELSE MEM=NEW_OUT
	<img border=0 src=faccine\biggrin.gif width=20 height=20>OIT
		CALL SETOUT
		GOTO :CALCOUTBACK
	:MEM_NOPCOMM
		CELL=&HF7
		WEEPROM=MOD_OUT
	:CALCOUTBACK
		IF &H0F-(INP/&H800)>&H00 THEN :CALCOUTBACK
	SUBEND

REM ATTUAZIONE NUOVO STATO USCITE
	SUB SETOUT
		CELL=&H02
		WEEPROM=MEM
'	:NORMALRELAY
		OUT=NEW_OUT*&B100
		IF RELAY<>&H55 THEN :SETOUTBACK
'	:STEPRELAY
		WAITMS STEPDELAY
		OUT=&H00
	:SETOUTBACK
	SUBEND

REM CARICO CONFIGURAZIONE DA EEPROM
	SUB LOAD_MEMORY
		LOAD_MEMORY=TRUE
'	:NODEID
		GV1=&HFE
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 OR GV2>=&H0F THEN :PROGERR
'	:SETID	
		NODE_ID=GV2*&H10
		NODE_PRG=MAST_PRG+GV2
		NODE_CMD=MAST_CMD+GV2
'	:CONFIGOK
		CELL=&HFF
		GV1=REEPROM
		IF GV1<>&HAA THEN :PROGERR
'	:SERIALCOMM
		GV1=&HF6
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 THEN :PROGERR
		COMM_RESET=GV2*(30.0/255)
		GV1=&HF5
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 THEN :PROGERR
		COMM_INTR=GV2*(15.0/255)
		GV1=&HF4
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 THEN :PROGERR
		COMM_WAIT=GV2*(1.0/255)
'	:RELAYKIND
		GV1=&HFD
		CELL=GV1
		GV2=REEPROM
		IF GV2<>&HAA AND GV2<>&H55 THEN :PROGERR
		RELAY=GV2
		CELL=&HFC
		STEPDELAY=REEPROM
'	:TIMEOUT
		CELL=&HFB
		GV2=REEPROM
		PUSHTIME2=2.0/255
		PUSHTIME1=GV2*PUSHTIME2
		CELL=&HFA
		GV2=REEPROM
		PUSHTIME2*=GV2
		CELL=&HF9
		PWT=REEPROM
		PWT/=512.0
'	:INIBITHED_OUTS
		CELL=&HF2
		MASKBIT=REEPROM
'	:SIGNAL
		GV1=&HF3
		CELL=GV1
		GV2=REEPROM-&H01
		IF GV2>&H01 THEN :PROGERR
		DO_SIGNAL=GV2
		GOTO :LOADMEMBACK
	:PROGERR
		LOAD_MEMORY=FALSE
		IF WPGM THEN :LOADMEMBACK
		CELL=&HFF
		WEEPROM=GV1
		WPGM=TRUE
	:LOADMEMBACK
	SUBEND

REM SEGNALAZIONE
	SUB SIGNAL(GV1,GV2)
	:SIG
		OUTBIT(&H0F)=GV2 MOD 2
		WAITMS GV1
		GV2--
		IF GV2>0 THEN :SIG
		OUTBIT(&H0F)=FALSE
	SUBEND



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 06/10/2015 13:36:24

...Sono riuscito a rimettere la selezione velocità, più alcune ottimizzazioni del codice, in 1937 token... ho pure sistemato una stupidaggine che non mi piaceva sui comandi...
Adesso mi applico sul serio con il Micromite... forse...


PRAGMA NO_NUM_LINE
PRAGMA EXTENDED2K_EEPROM

REM INIZIO PROGRAMMA
REM PPTEA/DOMO v3.28a 05/10/15

REM IMPOSTAZIONI INIZIALI
		SETIO=&H67803
		OUT=&H0000
		PWMIO1=&H0
		CADS=2
		EEXTERNAL=0
		CONSTANT MRQ_OUT=&HFD
		CONSTANT MRQ_IN=&HFB
		CONSTANT MRQ_ANALOG=&HFA
		CONSTANT MRQ_SET=&HFE
		CONSTANT MRQ_TOG=&HFF
		CONSTANT MRQ_LSET=&HF9
		CONSTANT MRQ_LRST=&HF8
		CONSTANT MRQ_NOP=&HFC
		CONSTANT MAST_CMD=&HC0
		CONSTANT MAST_PRG=&HF0
		CONSTANT MAST_RPL=&HAF
		CONSTANT PROG_MODE_IO=&H7F
		CONSTANT PROG_RPL=&HDF
		CONSTANT PROG_MODE_ANSW=&HBF
		CONSTANT PROG_ERR=&HEF
		CONSTANT DPRG=&H10
	:INIT
REM CARICO CONFIGURAZIONE DA EEPROM
REM	:NODEID
		GV1=&HFE
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 OR GV2>=&H0F THEN :PROGERR
REM	:SETID	
		NODE_ID=GV2*&H10
		NODE_PRG=MAST_PRG+GV2
		NODE_CMD=MAST_CMD+GV2
REM	:CONFIGOK
		CELL=&HFF
		GV1=REEPROM
		IF GV1<>&HAA THEN :PROGERR
REM	:SERIALCOMM
		GV1=&HF6
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 THEN :PROGERR
		COMM_RESET=GV2*(30.0/255)
		GV1=&HF5
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 THEN :PROGERR
		COMM_INTR=GV2*(15.0/255)
		GV1=&HF4
		CELL=GV1
		GV2=REEPROM
		IF GV2=&H00 THEN :PROGERR
		COMM_WAIT=GV2*(1.0/255)
REM	:SPEED
		GV1=&HF8
		CELL=GV1
		GV2=REEPROM
		IF GV2<&H51 OR GV2>&H55 THEN :PROGERR
REM	:SELECTSPEED
		GV2=POW(2,GV2-&H51)
		GV1=&HA0/GV2
		IF GV1=10 THEN GV1+=2
		IF GV1=20 THEN GV1-=1
		SERIALSPEED=GV1
REM	:RELAYKIND
		GV1=&HFD
		CELL=GV1
		GV2=REEPROM
		IF GV2<>&HAA AND GV2<>&H55 THEN :PROGERR
		RELAY=GV2
		CELL=&HFC
		STEPDELAY=REEPROM
REM	:TIMEOUT
		CELL=&HFB
		GV2=REEPROM
		PUSHTIME2=2.0/255
		PUSHTIME1=GV2*PUSHTIME2
		CELL=&HFA
		GV2=REEPROM
		PUSHTIME2*=GV2
		CELL=&HF9
		PWT=REEPROM
		PWT/=512.0
REM	:INIBITHED_OUTS
		CELL=&HF2
		MASKBIT=REEPROM
REM	:SIGNAL
		GV1=&HF3
		CELL=GV1
		GV2=REEPROM-&H01
		IF GV2>&H01 THEN :PROGERR
		DO_SIGNAL=GV2
REM CALCOLO STATO USCITE INIZIALE
		CELL=&H02
		OLD_OUT=REEPROM
		NEW_OUT=OLD_OUT
		IF RELAY=&HAA THEN
			MEM=OLD_OUT
			CALL SETOUT
		ENDIF
		WPGM=FALSE
		GOTO :MAIN_LOOP
	:PROGERR
		IF !WPGM THEN
			CELL=&HFF
			WEEPROM=GV1
			WPGM=TRUE
		ENDIF
REM ATTESA PROGRAMMAZIONE VIA SERIALE/USB
		MOD_OUT=0
		COMM_RESET=30.0
		COMM_INTR=0.500
		COMM_WAIT=0.100
		CALL SIGNAL(5,6)
		CALL COMMS_CHECK
REM FINE CARICO CONFIGURAZIONE DA EEPROM
REM LOOP PRINCIPALE
	:MAIN_LOOP
		IF WPGM THEN :INIT
REM CONTROLLO INGRESSI
		T_ADDR=&H00
		P_ADDR=&H0F-(INP/&H800)
		IF P_ADDR=&H00 THEN :EXIT_CHECK
		GV1=FALSE
		GV2=TIMER+PWT 
		ST=TIMER
	:PUSHTIME_MEASURE
		IF TIMER<GV2 THEN :SKIP_FLASH
		GV2=TIMER+PWT
		GV1=!GV1
		OUTBIT(&H0F)=GV1*DO_SIGNAL
	:SKIP_FLASH
		IF &H0F-(INP/&H800)<>&H0 AND TIMER<ST+PUSHTIME2 THEN :PUSHTIME_MEASURE
		GV3=TIMER-ST
		IF GV3>PUSHTIME1 THEN T_ADDR=&H01
		IF GV3>PUSHTIME2 THEN T_ADDR=&H02
		OLD_P=P_ADDR
		OLD_T=T_ADDR
		OUTBIT(&H0F)=FALSE
	:EXIT_CHECK
		INPUT_CHECK=P_ADDR*&H03+T_ADDR
REM FINE CONTROLLO INGRESSI
		IF INPUT_CHECK<&H2F AND INPUT_CHECK>&H00 THEN CALL CALCOUT(FALSE)
		IF TIMER-RT<COMM_INTR THEN :MAIN_LOOP
		CALL COMMS_CHECK
		GOTO :MAIN_LOOP
	END

REM CONTROLLO COMUNICAZIONI IN ARRIVO
	SUB COMMS_CHECK
			ST=TIMER+COMM_WAIT
			WHILE TIMER<ST
				COM_IN=COM_IN & SERIALINPSTR & USBINPSTR
			LOOP
			IF TIMER>=COMM_RESET THEN
				SERIALCLOSE
				RESET_TIMER
			ENDIF
			IF LEN(COM_IN)>=&H04 THEN CALL COMM_ANALYZE
			RT=TIMER
	SUBEND

REM TRASMISSIONE MESSAGGI SU SERIALE/USB
	SUB COMMOUT
		CALL CHECK
		COMMOUT=CHR(MSGID)
		COMMOUT=COMMOUT&CHR(MRQ)
		COMMOUT=COMMOUT&CHR(DATOIN)
		COMMOUT=COMMOUT&CHR(CHECK)
		SERIALOUT=COMMOUT
		USBOUT=COMMOUT
	SUBEND

REM CALCOLO CHECK BYTE
	SUB CHECK
		CHECK=(MRQ+DATOIN) MOD &H100
		IF CHECK<>&H00 THEN :CHECKOUT
		CHECK=&HFF
	:CHECKOUT
	SUBEND


REM ANALISI COMUNICAZIONI IN ARRIVO ED ESECUZIONE COMANDI REMOTI
	SUB COMM_ANALYZE
		RESET_TIMER
	:ANALYZE
		GV3=&H01
		MSGID=ASC(MID(COM_IN,1,1)))
		MRQ=ASC(MID(COM_IN,2,1)))
		DATOIN=ASC(MID(COM_IN,3,1)))
		CHECKIN=ASC(MID(COM_IN,4,1)))
		GV4=NODE_ID+(MRQ-&HF0)
		CALL CHECK
		MASTREPLY=TRUE
 		IF CHECKIN<>CHECK THEN :ANALYZEBACK
		IF MSGID=MAST_PRG OR MSGID=NODE_PRG THEN :PROG_COMMAND
		IF WPGM THEN :ANALYZEOK 
REM	:COMMANDS
		MASTREPLY=FALSE
		IF MSGID=MAST_CMD THEN :MAST_COMMS
		MASTREPLY=TRUE
		IF MSGID<>NODE_CMD THEN :ANALYZEOK
		MSGID=MAST_RPL
		IF MRQ=MRQ_NOP THEN :NOP_COMM
		IF MRQ=MRQ_IN THEN :COMMS_INSTATE
		IF MRQ=MRQ_OUT THEN :COMMS_OUTSTATE
		IF MRQ=MRQ_ANALOG THEN 
REM 	COMUNICAZIONE USCITE ANALOGICHE
			GV2=1
	:COMMS_ANALOG
			AG1=0
			GV1=&H0A
	:ADD
			AG1+=CADSIND(GV2)
			GV1--
			IF GV1>1 THEN :ADD
			AG1=(AG1/&HA)*&H2+&H801
			AG3=AG1/&H100
			AG2=(AG1-AG3*&H100)/&H10
			AG1=AG1-(AG3*&H100+AG2*&H10)
			MRQ=NODE_ID+AG3
			DATOIN=AG2*&H10+AG1
			CALL COMMOUT
			GV2++
			IF GV2<3 THEN :COMMS_ANALOG
			GOTO :ANALYZEOK
		ENDIF
	:MAST_COMMS
		IF MRQ=MRQ_SET THEN :COMMS_SETOUT 
		IF MRQ=MRQ_TOG THEN :COMMS_TOGOUT
		IF MRQ=MRQ_LSET THEN :COMMS_LSET
		IF MRQ=MRQ_LRST THEN :COMMS_LRST
		GOTO :ANALYZEOK
	:COMMS_OUTSTATE
		CELL=2
		DATOIN=REEPROM+&H80
		GOTO :COMMS_END
	:COMMS_INSTATE
		DATOIN=(OLD_T*&H10+OLD_P) OR &H80
		GOTO :COMMS_END
	:COMMS_SETOUT
		T_ADDR=&H03
		GOTO :TOG_SET_END
	:COMMS_TOGOUT
		T_ADDR=&H06
		GOTO :TOG_SET_END	
	:COMMS_LSET
		T_ADDR=&H04
		GOTO :TOG_SET_END	
	:COMMS_LRST
		T_ADDR=&H05
	:TOG_SET_END
		MOD_OUT=DATOIN-&H80
		CALL CALCOUT(TRUE)
		GOTO :COMMS_END
	:NOP_COMM
		MSGID=MAST_RPL
		CELL=&HF7
		IF DATOIN=&HFF THEN 
			OLDNOP=REEPROM
			DATOIN=OLDNOP
			GOTO :COMMS_END
		ENDIF
		IF DATOIN<>&HF0 THEN :ANALYZEBACK
		NOP=REEPROM
		DATOIN=&H7F
		IF NOP=OLDNOP THEN WEEPROM=&H80
		GOTO :COMMS_END
	:PROG_COMMAND
		IF MSGID=MAST_PRG THEN MASTREPLY=FALSE
		CELL=&HFF
		IF MRQ=PROG_MODE_IO THEN
			IF WPGM AND DATOIN=&H55 THEN :EXIT_PROGMODE
			IF DATOIN=&HAA AND MSGID=NODE_PRG THEN :ENTER_PROGMODE
			IF DATOIN=&HAA AND MSGID=MAST_PRG AND INPUT_CHECK=&H2F THEN :ENTER_PROGMODE 
		ENDIF
		IF MRQ=PROG_ERR THEN :PROG_ERROR_QRY
		IF WPGM THEN :PROG_DATA
		GOTO :ANALYZEOK
	:ENTER_PROGMODE
		WEEPROM=&H02
		WPGM=TRUE
		GOTO :PROGMODE_COMM
	:EXIT_PROGMODE
		WEEPROM=&HAA
	:PROGMODE_COMM
		MSGID=PROG_MODE_ANSW
		GOTO :COMMS_END
	:PROG_DATA
		IF MRQ>=&H90 THEN :NODPRG
	<img border=0 src=faccine\biggrin.gif width=20 height=20>PRG
		MRQ-=DPRG
		DATOIN-=DPRG
	:NODPRG
		CELL=MRQ
		WEEPROM=DATOIN
		CALL SIGNAL(25,1)
		MSGID=PROG_RPL
		MRQ_TX=MRQ
		GOTO :COMMS_END
	:PROG_ERROR_QRY
		IF MSGID=NODE_PRG OR WPGM THEN MASTREPLY=TRUE
		DATOIN=REEPROM
		MSGID=PROG_ERR
		GOTO :COMMS_END
	:COMMS_END
		IF MASTREPLY THEN 
			MRQ=GV4
			CALL COMMOUT
		ENDIF
	:ANALYZEOK
		GV3=&H04
	:ANALYZEBACK
		COM_IN=RIGHT(COM_IN,LEN(COM_IN)-GV3)
		IF LEN(COM_IN)>=4 THEN :ANALYZE
		COM_IN=""
	SERIALCLOSE
	SUBEND

REM CALCOLO NUOVO STATO USCITE
	SUB CALCOUT
		IF T_ADDR>&H02 THEN :COMM_IN_SET
		CELL=INPUT_CHECK
		MOD_OUT=REEPROM
		IF MOD_OUT=&H80 THEN :CALCOUTBACK
		IF MOD_OUT>&H80 THEN :MEM_NOPCOMM
	:COMM_IN_SET
		CELL=&H02
		OLD_OUT=REEPROM
		INIBH_OUT=(OLD_OUT AND MASKBIT)
		IF T_ADDR=&H04 THEN
			MOD_OUT=OLD_OUT OR MOD_OUT
			GOTO :IMPOSE
		ENDIF
		IF T_ADDR=&H05 THEN
			MOD_OUT=OLD_OUT AND MOD_OUT
		ENDIF
		IF T_ADDR=&H02 OR T_ADDR=&H03 THEN :IMPOSE
	:TOGGLE
		IF RELAY=&H55 THEN <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS ELSE :XOROUTS
	:IMPOSE
		IF RELAY=&H55 THEN :XOROUTS
	<img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS
		NEW_OUT=MOD_OUT
		IF T_ADDR=&H02 THEN
			NEW_OUT=NEW_OUT OR INIBH_OUT
		ENDIF
		IF RELAY=&H55 THEN MEM=MOD_OUT XOR OLD_OUT ELSE MEM=NEW_OUT
		GOTO <img border=0 src=faccine\biggrin.gif width=20 height=20>OIT
	:XOROUTS
		IF T_ADDR=&H02 THEN
			MOD_OUT=MOD_OUT OR INIBH_OUT
		ENDIF
		NEW_OUT=MOD_OUT XOR OLD_OUT
		IF RELAY=&H55 THEN MEM=MOD_OUT ELSE MEM=NEW_OUT
	<img border=0 src=faccine\biggrin.gif width=20 height=20>OIT
		CALL SETOUT
		GOTO :CALCOUTBACK
	:MEM_NOPCOMM
		CELL=&HF7
		WEEPROM=MOD_OUT
	:CALCOUTBACK
		IF &H0F-(INP/&H800)>&H00 THEN :CALCOUTBACK
	SUBEND

REM ATTUAZIONE NUOVO STATO USCITE
	SUB SETOUT
		CELL=&H02
		WEEPROM=MEM
REM RELE STANDARD
		OUT=NEW_OUT*&B100
		IF RELAY<>&H55 THEN :SETOUTBACK
REM RELE STEP
		WAITMS STEPDELAY
		OUT=&H00
	:SETOUTBACK
	SUBEND

REM SEGNALAZIONE
	SUB SIGNAL(GV1,GV2)
	:SIG
		OUTBIT(&H0F)=GV2 MOD 2
		WAITMS GV1
		GV2--
		IF GV2>0 THEN :SIG
		OUTBIT(&H0F)=FALSE
	SUBEND



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 20/11/2015 22:19:36

Piu lavoro col Micromite e piu apprezzo il lavoro di Bolle con il PPTEA. Il simulatore è uno strumento potentissimo, che permette di provare il codice ed individuare problemi e bug a colpo d'occhio... il MM ti obbliga a provare tutto in hardware, la versione per PC del MMBasic non supporta i comandi specifici dell'hardwarw e quindi devi lavorare per forza col chip... rinnovo i complimenti a Bolle ed al team che sta dietro al PPTEAFaccine/Smileys_0003.gif... bisognerebbe che vi applicaste al MM per fare la stessa cosa...



Modificato da BellaEli - 20/11/2015, 23:44:03


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

 

PinoTux

Avatar
GigaWatt


Gruppo:AMMINISTRATORE
Messaggi:3509

Stato:



Inviato il: 25/11/2015 18:27:36

Mi fa piacere che stai provando altre alternative e che nel confronto hai trovato punti di forza del lavoro fatto da Bolle.
Ultimamente mi ha confidato che riprenderà in mano il PPTEA appena sbrigati i compiti di questo periodo, sperando in un attimo di "calma"...



---------------
"Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza"
http://iv3gfn.altervista.org/
http://pptea.altervista.org/

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 26/11/2015 07:35:28

Più che alternativo è un compagno di giochi...
Avendo più porte seriali e la gestione degli interrupt sia su seriale che sugli input mi permette alcune cose in maniera più facile rispetto al PPTEA (cmq il master domotica esiste già x PPTEA) ma nn è ancora detto che non scelga una soluzione ibrida demandando ad un PPTEA la gestione delle routine di interrogazione a causa di alcuni intoppi che sto incontrando nella comunicazione a 4800/9600bps... sembra che il MM mi perda dei dati in RX... purtroppo sto usando la versione del fw precedente e nn riesco a trovare il tempo per proseguire con costanza... ogni volta che riparto devo recuperare le idee... difetti del cowboy programmer...



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

 

non sbaglio mai

Avatar
GigaWatt


Gruppo:Utente
Messaggi:2215

Stato:



Inviato il: 26/11/2015 16:29:22

Sì d'accordo su tutto
essendo ignorantissimo in materia, mi chiedo se non ci fosse un modo per far entrare in teste dure come la mia, tutti quei concetti e o

( fw, r, mm,cawboy programmer, )

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 29/11/2015 12:02:03

Chiedi e ti sarà spiegato ;-)

con un pò di ritardo:

fw=firmware (il "sistema operativo" che, messo nel PIC, lo trasforma in PPTEA o MicroMite)

rx=Receive (tx=Transmit) abbreviazioni usate quando si parla di comunicazioni

mm=abbreviazione per MicroMite

cowboy programmer=programmatore che lavora seguendo l'istinto e l'impeto del momento (come un cowboy che insegue il capo di bestiame) senza una pianficazione ed uno studio preliminare del problema).



Modificato da MarKoZaKKa - 08/12/2015, 08:07:03


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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 08/12/2015 08:18:59

La versione 1.0 del DomoMaster on MicroMite èstata testata ieri con successo nella gestione di eventi in una rete di 5 nodi PPTEA/DOMO 3.28a; alla attuazione di un'ingresso al quale è associato un'evento remoto, entro 6 secondi viene eseguito il comando; nello specifico la cordicella di emergenza del bagno provoca l'accensione di luce bagno, luce stanza, luce corridoio, allarme stanza ed allarme remoto (ricordo che lo scenario dove sto costruendo il sistema è il futuro b&b di mio fratello).
Le prove fatte mi hanno permesso di capire che i problemi di "comprensione" del MM erano dovuti al rumore sul CAN-BUS (mancavano le resistenze di terminazione del bus, per cui il rumore causava errori nei bytes trasmessi, specie alle alte velocità).
Adesso proseguo per implementare alcune funzioni aggiuntive (comunicazione via bluetooth e/o wifi per la segnalazione allarmi)



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

 
 InizioPagina
 

Pagine: (20)   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   [20]    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum