Se sei già registrato           oppure    

Orario: 06/05/2024 06:11:31  

 

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

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 7/3/2013,14:36

Prima bozza...dovrebbe essere autoesplicativo! faccine/smile.gif



Scarica allegato

TestSerialeZakka.rar ( Numero download: 160 )



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 7/3/2013,15:57

Grazie... lo immaginavo diverso, ma per iniziare è ottimo!

Io lo vedevo così, dove ad ogni riga, si invia la prima sequenza, si aspetta la ricezione, se la ricezione combacia con quanto atteso, si illumina OK, mi dice il ritardo della risposta, e se presente TX2 invia la seconda sequenza (stessa riga) aspetta la risposta e mi dice il ritardo. Se non è specificata una TX2, si va alla riga sotto e si ripete, dopo il ritardo impostato.

Grazie!!!

E chi è che se lo scarica, oltre me? faccine/wink.gif

Immagine Allegata: SerialZaK

http://www.energialternativa.info/Public/NewForum/ForumEA/6/8/8/3/5/5/0/1362668022.png




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

 

alessio287

Avatar
MegaWatt


Gruppo:Utente
Messaggi:306

Stato:



Inviato il: 7/3/2013,21:36

Ciao Marko,

io non ho ambienti di sviluppo come il vb6 di Bolle...


Non penso che con eabasic ti posso essere d'aiuto... se pensi il contrario sono qua

Bye
Alessio287

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 7/3/2013,23:26

Bolle, una precisazione: usando i CAN transceiver, ho una eco di ritorno di quanto trasmetto, sulla ricezione... il ritardo misurato dal tuo pgm è 15ms... dovresti quindi buttare via quanto arriva sulla seriale entro, diciamo, i 30ms dalla trasmissione del PC (modificabile? faccine/smile.gif). Attualmente, la risposta dal nodo 1 la ricevo in 300ms, quella dal nodo 14 in 850ms, ma volevo appunto usare questo strumento anche per ottimizzare il codice e ridurre questi tempi di reazione.

Alessio287, tutti si può essere d'aiuto a tutti... come già detto in altri luoghi, sono un cattivo programmatore ed un pessimo elettronico, ho solo molte idee per la testa e poco tempo per realizzarle... magari tu dai un'occhiata al mio codice della domotica, e trovi come ottimizzarlo. Mio padre diceva "chiunque può insegnarti qualcosa, anche uno spazzino per la strada".

Ciao!



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

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 8/3/2013,01:48

CITAZIONE (MarKoZaKKa @ 7/3/2013, 23:26)
Bolle, una precisazione: usando i CAN transceiver, ho una eco di ritorno di quanto trasmetto, sulla ricezione... il ritardo misurato dal tuo pgm è 15ms... dovresti quindi buttare via quanto arriva sulla seriale entro, diciamo, i 30ms dalla trasmissione del PC (modificabile? faccine/smile.gif).

Si può mettere un flag del tipo 'cut echo' che si limita a buttare i caratteri di echo non legandoli al tempo....i dati di recezione vengono presi dopo quelli.
Cosa ne dici? 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).

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 8/3/2013,12:24

Come le mette meglio, capo, purchè funzioni! faccine/wink.gif



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 9/5/2013,09:27

Visto che manca, posto il codice EABASIC del PPTEA/DOMO nella sua ultima versione... Aspetto sempre un volontario che mi realizzi il

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 12/9/2013,00:36

faccine/tongue.gif Dopo un pò di lavoro rubando quà e là quarti d'ora, ho finalmente riscritto il codice del PPTEA/DOMO per la versione Advanced del compiler... sicuramente non sarà un capolavoro, ma perlomeno è aggiornato. In questa versione i comandi possono essere ricevuti sia via seriale che via usb, ciò facilita chi volesse giocarci sopra, perchè non impone di avere un MAX232 od altro adattatore rs232/ttl a portata di mano, e nemmeno una porta COM disponibile (Luca450MHz faccine/wink.gif ). Il codice è poco commentato, ma non ho potuto fare di meglio, perdonatemi e divertitevi, chi avesse domande le ponga (pinga panga) faccine/smile.gif Ciao! faccine/sleep.gif

p.s. C'è anche la versione "indentata" faccine/smile.gif


REM PPTEA/DOMO v.3.14 by MarKoZaKKa

REM I/O MAP:
REM BIT 0-1: ANALOG INPUTS
REM BIT 2-8: RELAY OUTPUTS CONFIGURABLE FOR NORMAL OR STEP RELAY
REM BIT 11-14: BINARY CODED INPUTS
REM BIT 15: STATUS LED OUTPUT

REM EEPROM MEMORY MAP:
REM CELL &HFF: CONFIGURATION STATUS &HAA=OK
REM CELL &HFE: NODE ID FOR MESSAGES &H01...&H0E (&H00=BROADCAST, &h0F=MASTER)
REM CELL &HFD: RELAY TYPE &HAA=STANDARD &H55=STEP
REM CELL &HFC: STEP RELAY COMMAND PULSE LENGHT IN MILLISECONDS
REM CELL &HFB: SHORT PUSH TIMEOUT
REM CELL &HFA: LONG PUSH TIMEOUT
REM CELL &HF9: PUSH CYCLE TIMEOUT
REM CELL &HF8: COMMUNICATION SPEED &H50=4800bps...&H55=57600bps
REM CELL &HF7: QUERY CODE FOR MASTER CONTROLLER
REM CELL &H02: OUTPUT STATUS
REM CELL &H03...&H2C: CONFIGURATION AREA
REM IN CONFIGURATION AREA EACH INPUT CODE BELONGS TO 3 CONFIGURATION CELLS:
REM 1st & 2nd CELL ARE OUTPUT TOGGLE BITMAPS, 3rd CELL IS FORCED OUTPUT BITMAP
REM 1st CELL IS ADDRESSED BY INPUT DURATION LESS THAN SHORT PUSH TIMEOUT
REM 2nd CELL IS ADDRESSED BY INPUT DURATION LESS THAN LONG PUSH TIMEOUT
REM 3rd CELL IS ADDRESSED BY INPUT DURATION MORE THAN LONG PUSH TIMEOUT
REM OUTPUT BITMAPS ARE 7 BIT LONG STARTING FROM LSB
REM MSB IS O FOR NORMAL OPERATION CODE,
REM MSB IS 1 AND ALL OTHERS BIT 0 FOR "NO OUTPUT CHANGE" CODE
REM MSB IS 1 AND OTHERS BIT LESS OR EQUAL TO &HEB FOR "MASTER QUERY" CODES

PRAGMA NO_NUM_LINE
PRAGMA EXTENDED2K_EEPROM

REM INIZIO PROGRAMMA
 CALL BASIC_INITS
 :INIT
 CELL=&HFF
 WPGM=REEPROM
 IF WPGM=&HAA THEN :LOAD_MEM
 IF WPGM=&H0 THEN :NOCONFIG ELSE :MEMERR
 :NOCONFIG
 PRINT " PPTEA/DOMO IS WAITING FOR CONFIG"
 GOTO :WPGM
 :MEMERR
 CALL PROG_ERR(WPGM)
 :WPGM
 WPGM=TRUE
 CALL WAIT_PGM
 OUTBIT(15)=1
 GOTO :INIT
 :LOAD_MEM
 WPGM=FALSE
 CALL LOAD_MEMORY
 IF LOAD_MEMORY THEN :GO_ON
 GOTO :INIT
REM INIZIALIZZAZIONE USCITE
 :GO_ON
 CELL=&H02
 MOD_OUT=REEPROM
 CALL INITOUTS
REM LOOP PRINCIPALE
 PRINT " PPTEA/DOMO v 3.14 IS RUNNING!"
 :MAIN_LOOP
 IF WPGM THEN :INIT
 OUTBIT(15)=1
 CALL INPUT_CHECK
 IF P_ADDR=0 THEN :COMMSCHECK
 IF P_ADDR<>&H0F THEN :OKIN
 CALL PROG_ERR(&H00)
 GOTO :INIT
 :OKIN
 CALL CALCOUT(FALSE)
 :COMMSCHECK
 CALL COMMS_CHECK(WPGM)
 GOTO :MAIN_LOOP

REM IMPOSTAZIONI INIZIALI
 SUB BASIC_INITS
 SETIO=&H67803
 OUT=&H0000
 PWMIO1=&H00
 CADS=2
 EEXTERNAL=0
 CONSTANT PULSHI=&H7803
 CONSTANT PTIME1_ADDR=&H00
 CONSTANT PTIME2_ADDR=&H01
 CONSTANT PTIME3_ADDR=&H02
 CONSTANT MRQ_STATO=&HFD
 CONSTANT MRQ_ANALOG=&HFA
 CONSTANT MRQ_SET=&HFF
 CONSTANT MAST_CMD=&HB*16
 CONSTANT MAST_PRG=&HF*16
 CONSTANT MAST_RPL=&HDF
 CONSTANT DPRG=&H40
 SUBEND


REM ATTESA PROGRAMMAZIONE VIA SERIALE/USB
 SUB WAIT_PGM
 OUTBIT(15)=1
 MOD_OUT=0
 SERIALSPEED=SPEED_4800
 FOR GV1=0 TO 5
 OUTBIT(15)=1
 WAITMS 2
 OUTBIT(15)=0
 WAITMS 5
 NEXT GV1
 OUTBIT(15)=0
 CALL COMMS_CHECK(WPGM)
 SUBEND

REM CONTROLLO COMUNICAZIONI IN ARRIVO
 SUB COMMS_CHECK(MODE)
 :COMMS
 ST=TIMER
 WHILE TIMER-ST<0.250
 COM_IN=COM_IN & SERIALINPSTR & USBINPSTR
 WAITMS 75
 IF LEN(COM_IN)>=4 THEN :COMMANALYZE
 LOOP
 GOTO :COMMBACK
 :COMMANALYZE
 CALL COMM_ANALYZE(MODE)
 :COMMBACK
 SERIALCLOSE
 IF LEN(COM_IN)<4 THEN COM_IN=""
 SUBEND

REM ANALISI COMUNICAZIONI IN ARRIVO ED ESECUZIONE COMANDI REMOTI
 SUB COMM_ANALYZE(MODE)
 DELTACOMM=1
 IF LEN(COM_IN)<4 THEN :ANALYZEBACK
 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
 IF CHECKIN<>CHECK THEN :ANALYZEBACK
 IF MODE AND (MSGID=MY_PRG OR MSGID=MAST_PRG) THEN :PROGIN
 IF WPGM=FALSE AND (MRQ=&H01 AND DATOIN=&HAA) THEN CALL PROG_ERR(&H00)
 IF !(MSGID=MY_CMD OR MSGID=MAST_CMD) THEN :ANALYZEBACK
 CELL=&HF7
 GV1=REEPROM
 IF (MRQ=&HF0 AND DATOIN=&HFF) THEN :NOPCOMM
 MSGID=MAST_RPL
 IF MRQ=MRQ_STATO THEN :COMMS_OUTSTATE
 IF MRQ=MRQ_SET THEN :COMMS_SETOUT
 IF MRQ=MRQ_ANALOG THEN :COMMS_ANALOGIN
 GOTO :ANALYZEBACK
 :NOPCOMM
 MRQ=NODE_ID+&HC
 MSGID=&HDF
 DATOIN=GV1
 CALL COMMOUT
 CELL=&HF7
 WEEPROM=&H80
 GOTO :ANALYZEOK
 :COMMS_OUTSTATE
 MRQ=NODE_ID+&HF
 CELL=2
 DATOIN=REEPROM+&H80
 CALL COMMOUT
 GOTO :ANALYZEOK
 :COMMS_SETOUT
 MRQ=NODE_ID+&H5
 MOD_OUT=DATOIN-&H80
 CALL CALCOUT(TRUE)
 CALL COMMOUT
 GOTO :ANALYZEOK
 :COMMS_ANALOGIN
 FOR GV2=1 TO 2
 AG1=0
 FOR GV1=1 TO 10
 AG1=AG1+CADSIND(GV2)
 NEXT GV1
 AG1=(AG1/(GV1-1))+&H400
 AG3=AG1/256
 AG2=(AG1-AG3*256)/16
 AG1=AG1-(AG3*256+AG2*16)
 MSGID=MAST_RPL
 MRQ=NODE_ID+AG1
 DATOIN=AG2*16+AG3
 CALL COMMOUT
 NEXT GV2
 GOTO :ANALYZEOK
 :PROGIN
 IF WPGM=TRUE AND !(MRQ=&H01 AND DATOIN=&H55) THEN :PROG
 CELL=&HFF
 WEEPROM=&HAA
 WPGM=FALSE
 GOTO :ANALYZEOK
 :PROG
 IF MRQ>=&HB8 THEN :NODPRG
 IF MRQ>=&H40 THEN <img border=0 src=faccine\biggrin.gif width=20 height=20>PRG
 GOTO :ANALYZEBACK
 <img border=0 src=faccine\biggrin.gif width=20 height=20>PRG
 MRQ=MRQ-DPRG
 DATOIN=DATOIN-DPRG
 :NODPRG
 CELL=MRQ
 WEEPROM=DATOIN
 MSGID=MAST_RPL
 CALL COMMOUT
 FOR GV1=0 TO 2
 OUTBIT(15)=1
 WAITMS 10
 OUTBIT(15)=0
 WAITMS 50
 NEXT GV1
 OUTBIT(15)=0
 GOTO :ANALYZEOK
 :ANALYZEOK
 DELTACOMM=4
 :ANALYZEBACK
 COM_IN=RIGHT(COM_IN,LEN(COM_IN)-DELTACOMM)
 SUBEND

REM CALCOLO CHECK BYTE
 SUB CHECK
 CHECK=(MRQ+DATOIN)
 CHECK=INT(CHECK-((CHECK/256)*256))
 IF CHECK>&H00 THEN :CHECKBACK
 CHECK=&HFF
 :CHECKBACK
 SUBEND

REM TRASMISSIONE MESSAGGI SU SERIALE/USB
 SUB COMMOUT
 CALL CHECK
 MSGID=CHR(MSGID)
 MRQ=CHR(MRQ)
 DATOIN=CHR(DATOIN)
 CHECK=CHR(CHECK)
 WAITMS 75+((NODE_ID/16)*25)
 GV1=MSGID & MRQ & DATOIN & CHECK
 SERIALOUT=GV1
 USBOUT=GV1
 WAITMS 75
 SUBEND

REM CALCOLO STATO USCITE INIZIALE
 SUB INITOUTS
 CELL=&HFD
 RELAY=REEPROM
 CELL=&H02
 OLD_OUT=REEPROM
 IF RELAY=&H55 THEN :STEP ELSE :PULSE
 :PULSE
 NEW_OUT=MOD_OUT
 GOTO :INITIT
 :STEP
 NEW_OUT=MOD_OUT XOR OLD_OUT
 :INITIT
 MEM=OLD_OUT
 CALL SETOUT
 SUBEND

REM CALCOLO NUOVO STATO USCITE
 SUB CALCOUT(MODE)
 IF MODE THEN :COMMSET
 R_C=(P_ADDR*&H03)+T_ADDR
 CELL=R_C
 MOD_OUT=REEPROM
 IF MOD_OUT>&H80 THEN :MEM_NOPCOMM
 IF MOD_OUT=&H80 THEN :CALCOUTBACK
 :COMMSET
 CELL=&HFD
 RELAY=REEPROM
 CELL=&H02
 OLD_OUT=REEPROM
 IF MODE THEN :IMPOSE
 IF T_ADDR=PTIME3_ADDR THEN :IMPOSE ELSE :TOGGLE
 :IMPOSE
 IF RELAY=&H55 THEN :XOROUTS ELSE <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS
 :TOGGLE
 IF RELAY=&H55 THEN <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS ELSE :XOROUTS
 <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS
 NEW_OUT=MOD_OUT
 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
 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
 IF NEW_OUT=0 THEN :CALCOUTBACK
 CALL SETOUT
 GOTO :CALCOUTBACK
 :MEM_NOPCOMM
 CELL=&HF7
 WEEPROM=MOD_OUT
 :CALCOUTBACK
 SUBEND

REM ATTUAZIONE NUOVO STATO USCITE
 SUB SETOUT
 :NORMALRELAY
 OUT=NEW_OUT*&B100
 IF RELAY<>&H55 THEN :SETOUTBACK
 :STEPRELAY
 CELL=&HFC
 GV1=REEPROM
 WAITMS GV1
 OUT=&H00
 :SETOUTBACK
 CELL=&H02
 WEEPROM=MEM
 PRINT "OUTS: "&MEM
 SUBEND

REM CARICO CONFIGURAZIONE DA EEPROM
 SUB LOAD_MEMORY
 LOAD_MEMORY=TRUE
 CELL=&HFD
 GV1=REEPROM
 IF (GV1=&HAA OR GV1=&H55) THEN :TIMEOUT
 GV1=&HFD
 GOTO :PROGERR
 :TIMEOUT
 CELL=&HFB
 GV1=REEPROM
 PUSHTIME1=(GV1*(2.0/255))
 CELL=&HFA
 GV1=REEPROM
 PUSHTIME2=(GV1*(2.0/255))
 CELL=&HF8
 GV1=REEPROM
 IF GV1>&H50 OR GV1<&H54 THEN :SELECTSPEED
 GOTO :PROGERR
 :SELECTSPEED
 GV1=GV1-80
 ON GV1 GOTO :Q,:N,<img src='faccine/biggrin.gif' alt="faccine/biggrin.gif" style="max-width:700px;max-height:1700px;"/>,:T,:C

 :Q
 SERIALSPEED=SPEED_4800
 GOTO :NODEID
 :N
 SERIALSPEED=SPEED_9600
 GOTO :NODEID
 <img src='faccine/biggrin.gif' alt="faccine/biggrin.gif" style="max-width:700px;max-height:1700px;"/>
 SERIALSPEED=SPEED_19200
 GOTO :NODEID
 :T
 SERIALSPEED=SPEED_38400
 GOTO :NODEID
 :C
 SERIALSPEED=SPEED_57600
 GOTO :NODEID
 :NODEID
 CELL=&HFE
 NODE_ID=REEPROM*16
 IF NODE_ID>0 AND NODE_ID<240 THEN :SETID
 GV1=&HFE
 GOTO :PROGERR
 :SETID
 MY_CMD=MAST_CMD+(NODE_ID/16)
 MY_PRG=MAST_PRG+(NODE_ID/16)
 PRINT " PPTEA/DOMO NODE NR:" & NODE_ID/16
 GOTO :LOADMEMBACK
 :PROGERR
 LOAD_MEMORY=FALSE
 CALL PROG_ERR(GV1)
 :LOADMEMBACK
 SUBEND

REM SALVATAGGIO ERRORE PROGRAMMAZIONE IN EEPROM
 SUB PROG_ERR(IND)
 PRINT " !CONFIG ERROR IN EEPROM: " & IND & " ! "
 CELL=&HFF
 WEEPROM=IND
 WPGM=TRUE
 SUBEND

REM CONTROLLO ATTUAZIONE INGRESSI
 SUB INPUT_CHECK
 P_ADDR=0
 T_ADDR=0
 CELL=&HF9
 PWT=REEPROM
 PWT=INT(PWT*(1.0/255)*1000)
 OUTBIT(15)=TRUE
 :RELEASED
 P_ADDR=(&H0F-((INP AND &H7800)/&H800))
 IF P_ADDR=&H00 THEN :INPUTSBACK
 GV1=TRUE
 ST=TIMER
 OUTBIT(15)=GV1
 :PUSHED
 GV1=GV1 XOR TRUE
 WAITMS PWT
 OUTBIT(15)=GV1
 IF (&H0F-((INP AND &H7800)/&H800))<>&H0 AND ((TIMER-ST)<pushtime2) THEN :PUSHED
 PTIME=(TIMER-ST)
 IF PTIME>PUSHTIME1 THEN :PT2
 T_ADDR=PTIME1_ADDR
 GOTO :ENDPT
 :PT2
 IF PTIME>PUSHTIME2 THEN :PT3
 T_ADDR=PTIME2_ADDR
 GOTO :ENDPT
 :PT3
 T_ADDR=PTIME3_ADDR
 :ENDPT
 :NOT_RELEASED
 OUTBIT(15)=FALSE
 GV1=(&H0F-((INP AND &H7800)/&H800))
 IF GV1>&H00 AND GV1<>15 THEN :NOT_RELEASED
 :INPUTSBACK
 SUBEND






Scarica allegato

PPTEA_DOMO.TXT
( Numero download: 168 )



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 12/9/2013,12:38

E TE PAREVA... ho trovato un bug relativamente all'uso dei relè passo-passo... ho aggiornato nel post sopra sia il codice che il file allegato, chi lo avesse scaricato è pregato di riscaricarlo (o di cercarsi il bug faccine/smile.gif) Ciao!



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 18/9/2013,22:11

A fare le cose a spizzichi e bocconi, succede che si fanno dei macelli faccine/wacko.gif ... rifatta la gestione dei rele passo-passo ed aggiornato il msg precedente con il codice corretto. faccine/dry.gif
P.S. ho sistemato anche una cosetta... usavo una cosa del tipo:

CELL=&HFD
PWT=(1.0/REEPROM)*255

ma in hardware a volte PWT veniva calcolato correttamente, a volte no... ho risolto facendo leggere il valore della cella con una variabile ed usandola poi nel calcolo ... faccine/blink.gif




Modificato da MarKoZaKKa - 19/9/2013, 01:14


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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 21/10/2013,11:50

Bolle, ho ancora problemi con la gestione della seriale... se invio i dati sulla porta USB, con il TX str del debugger, funziona tutto regolarmente; se mi collego con la seriale (utilizzo un convertitore USB/seriale TTL della FTDI, niente MAX232) non c'è verso, la ricezione è saltuaria... urge spiegone su come usare la seriale del PPTEA, ormai il sw domotico è terminato... thnks



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

 

NonSoloBolleDiAcqua

Avatar
PetaWatt


Gruppo:AMMINISTRATORE
Messaggi:13786

Stato:



Inviato il: 21/10/2013,12:02

CITAZIONE (MarKoZaKKa @ 21/10/2013, 12:50)
Bolle, ho ancora problemi con la gestione della seriale... se invio i dati sulla porta USB, con il TX str del debugger, funziona tutto regolarmente; se mi collego con la seriale (utilizzo un convertitore USB/seriale TTL della FTDI, niente MAX232) non c'è verso, la ricezione è saltuaria... urge spiegone su come usare la seriale del PPTEA, ormai il sw domotico è terminato... thnks

faccine/huh.gif la gestione della seriale del PPTEA utilizza l'uart della libreria della microchip...nel funzionamento non ho mai avuto problemi...nemmeno con l'utilizzo del raspberry che funge a livelli di tensione differenti.Quando puoi posta lo schema elettrico ...gli do un'occhiatina da vicino! 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).

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 21/10/2013,20:31

Ciao Marko,
io ho riscontrato un problema simile interfacciando un convertitore usb/ttl ad un Atmega.
Ricevevo alcune volte errori senza spiegazione .
Dopo giorni di mal di testa ,ho capito che bastava resettare il processore in contemporanea alla connessione dell'usb.
Quindi i +5V provenienti dall'usb (che fino a quel momento alimentavano solo il convertitore quando connesso) li ho mandati tramite una resistenza da 4.7K alla base di un BC547 ,il quale ha l'emettitore a massa e il collettore connesso ad un condensatore da 1microF e una resistenza da 1M . L'altro capo del condensatore e della resistenza sono connessi al reset del microcontrollore (che possiede una resistenza pull up da 10K).
In pratica quando connetto l'usb ,i 5V mandano un impulso di reset al micro .
Cosi' ho risolto i miei problemi .... problemi mai riscontrati con una 232 vera faccine/smile.gif

Ciao
ElettroshockNow

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 22/10/2013,09:59

CITAZIONE (NonSoloBolleDiAcqua @ 21/10/2013, 13:02)
Quando puoi posta lo schema elettrico ...gli do un'occhiatina da vicino! faccine/smile.gif

Lo schema elettrico non c'è, nel senso che sto ancora lavorando con la KSB-I, comunque c'e poco da "schemare", tx su rx ed rx su tx
per il momento, nulla in mezzo, no max232 no mcp2551, solo link seriale a livelli TTL con adattatore usb FTDI. Penso sia più qualcosa legato a come ho scritto il codice... può essere un problema il fatto di avere la eeprom da2K piena al 98-99%?

CITAZIONE (ElettroshockNow @ 21/10/2013, 21:31)
Cosi' ho risolto i miei problemi .... problemi mai riscontrati con una 232 vera faccine/smile.gif

Purtroppo non è il mio caso...

Allego il codice dell'ultimo rimaneggiamento... adesso faccio fare un polling ogni tot della seriale, anzichè ad ogni ciclo di esecuzione, devo ancora provarlo in hardware... nel file .hex allego i comandi da inviare via seriale o via usb per configurare il nodo; una volta configurato, il comando più banale è il query dello stato uscite: &HB1FDFFFC al quale il nodo risponde con &HDF1F809F se le uscite sono tutte a zero. Attenzione a portare alti gli ingressi (sarebbe utile una funzione del debugger per impostare lo stato circuitale degli ingressi...) altrimenti il codice torna in modalità configurazione, dalla quale lo si fà uscire portando prima gli ingressi alti e poi inviando &HF1015556

Grazie dell'aiuto.. è l'ultimo scoglio, ma è il cuore del progetto... dopo questo c'è il montaggio delle schedine... faccine/bye2.gif

PRAGMA NO_NUM_LINE
PRAGMA EXTENDED2K_EEPROM

REM INIZIO PROGRAMMA
 PRINT " PPTEA/DOMO v 3.14"
 CALL BASIC_INITS
 :INIT
 CELL=&HFF
 WPGM=REEPROM
 IF WPGM=&HAA THEN :LOAD_MEM
 IF WPGM=&H00 THEN :NOCONFIG ELSE :MEMERR
 :NOCONFIG
 PRINT " CONFIG NEEDED!"
 GOTO :WPGM
 :MEMERR
 CALL PROG_ERR(WPGM)
 :WPGM
 WPGM=TRUE
 CALL WAIT_PGM
 OUTBIT(15)=1
 GOTO :INIT
 :LOAD_MEM
 WPGM=FALSE
 CALL LOAD_MEMORY
 IF LOAD_MEMORY THEN :GO_ON
 GOTO :INIT
REM INIZIALIZZAZIONE USCITE
 :GO_ON
 CELL=&H02
 MOD_OUT=REEPROM
 CALL INITOUTS
REM LOOP PRINCIPALE
 :MAIN_LOOP
 IF WPGM THEN :INIT
 OUTBIT(15)=1
 CALL INPUT_CHECK
 IF P_ADDR=0 THEN :COMMSCHECK
 IF P_ADDR<>&HF THEN :OKIN
 CALL PROG_ERR(&H00)
 GOTO :INIT
 :OKIN
 CALL CALCOUT(FALSE)
 :COMMSCHECK
 IF TIMER<comm_intr THEN :MAIN_LOOP
 CALL COMMS_CHECK(WPGM)
 GOTO :MAIN_LOOP

REM IMPOSTAZIONI INIZIALI
 SUB BASIC_INITS
 SETIO=&H67803
 OUT=&H0000
 PWMIO1=&H0
 CADS=2
 EEXTERNAL=0
 CONSTANT PULSHI=&H7803
 CONSTANT PTIME1_ADDR=&H00
 CONSTANT PTIME2_ADDR=&H01
 CONSTANT PTIME3_ADDR=&H02
 CONSTANT MRQ_STATO=&HFD
 CONSTANT MRQ_ANALOG=&HFA
 CONSTANT MRQ_SET=&HFF
 CONSTANT MAST_CMD=&HB0
 CONSTANT MAST_PRG=&HF0
 CONSTANT MAST_RPL=&HDF
 CONSTANT DPRG=&H40
 SUBEND


REM ATTESA PROGRAMMAZIONE VIA SERIALE/USB
 SUB WAIT_PGM
 OUTBIT(15)=1
 MOD_OUT=0
 SERIALSPEED=SPEED_4800
 COMM_TIME=0.500
 COMM_INTR=&H1
 FOR GV1=0 TO 5
 OUTBIT(15)=1
 WAITMS 5
 OUTBIT(15)=0
 WAITMS 10
 NEXT GV1
 OUTBIT(15)=0
 CALL COMMS_CHECK(WPGM)
 SUBEND

REM CONTROLLO COMUNICAZIONI IN ARRIVO
 SUB COMMS_CHECK(MODE)
 COM_IN=
 :WAITAGAIN
 RESET_TIMER
 OUTBIT(15)=1
 ST=TIMER
 WHILE TIMER-ST<comm_time
 COM_IN=COM_IN & SERIALINPSTR & USBINPSTR
 WAITMS 50
 LOOP
 GV1=LEN(COM_IN)
 IF (GV1<&H4 AND GV1>&H0) THEN :WAITAGAIN
 IF GV1=0 THEN :COMMBACK
 CALL COMM_ANALYZE(MODE)
 :COMMBACK
 SERIALCLOSE
 SUBEND

REM ANALISI COMUNICAZIONI IN ARRIVO ED ESECUZIONE COMANDI REMOTI
 SUB COMM_ANALYZE(MODE)
 :ANALYZE
 DELTACOMM=1
 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
 IF CHECKIN<>CHECK THEN :ANALYZEBACK
 IF MODE AND (MSGID=MY_PRG OR MSGID=MAST_PRG) THEN :PROGIN
 IF WPGM=FALSE AND (MRQ=&H01 AND DATOIN=&HAA) THEN CALL PROG_ERR(&H00)
 IF !(MSGID=MY_CMD OR MSGID=MAST_CMD) THEN :ANALYZEBACK
 CELL=&HF7
 GV1=REEPROM
 IF MSGID=MY_CMD AND MRQ=MAST_PRG AND DATOIN=&HFF THEN :NOPCOMM
 MSGID=MAST_RPL
 IF MRQ=MRQ_STATO THEN :COMMS_OUTSTATE
 IF MRQ=MRQ_SET THEN :COMMS_SETOUT
 IF MRQ=MRQ_ANALOG THEN :COMMS_ANALOGIN
 GOTO :ANALYZEBACK
 :NOPCOMM
 MRQ=NODE_ID+&HC
 MSGID=&HDF
 CELL=&HF7
 DATOIN=REEPROM
 IF DATOIN=&H80 THEN :ANALYZEOK
 CALL COMMOUT
 WEEPROM=&H80
 GOTO :ANALYZEOK
 :COMMS_OUTSTATE
 MRQ=NODE_ID+&HF
 CELL=2
 DATOIN=REEPROM+&H80
 CALL COMMOUT
 GOTO :ANALYZEOK
 :COMMS_SETOUT
 MRQ=NODE_ID+&H5
 MOD_OUT=DATOIN-&H80
 CALL CALCOUT(TRUE)
 CALL COMMOUT
 GOTO :ANALYZEOK
 :COMMS_ANALOGIN
 FOR GV2=1 TO 2
 AG1=0
 FOR GV1=1 TO 10
 AG1=AG1+CADSIND(GV2)
 NEXT GV1
 AG1=(AG1/(GV1-1))+&H400
 AG3=AG1/256
 AG2=(AG1-AG3*256)/16
 AG1=AG1-(AG3*256+AG2*16)
 MSGID=MAST_RPL
 MRQ=NODE_ID+AG1
 DATOIN=AG2*16+AG3
 CALL COMMOUT
 NEXT GV2
 GOTO :ANALYZEOK
 :PROGIN
 IF WPGM=TRUE AND !(MRQ=&H01 AND DATOIN=&H55) THEN :PROG
 CELL=&HFF
 WEEPROM=&HAA
 WPGM=FALSE
 GOTO :ANALYZEOK
 :PROG
 IF MRQ>=&HB8 THEN :NODPRG
 IF MRQ>=&H40 THEN <img border=0 src=faccine\biggrin.gif width=20 height=20>PRG
 GOTO :ANALYZEBACK
 <img border=0 src=faccine\biggrin.gif width=20 height=20>PRG
 MRQ=MRQ-DPRG
 DATOIN=DATOIN-DPRG
 :NODPRG
 CELL=MRQ
 WEEPROM=DATOIN
 MSGID=MAST_RPL
 CALL COMMOUT
 FOR GV1=0 TO 2
 OUTBIT(15)=1
 WAITMS 10
 OUTBIT(15)=0
 WAITMS 50
 NEXT GV1
 OUTBIT(15)=0
 GOTO :ANALYZEOK
 :ANALYZEOK
 DELTACOMM=4
 :ANALYZEBACK
 COM_IN=RIGHT(COM_IN,LEN(COM_IN)-DELTACOMM)
 IF LEN(COM_IN)>=4 THEN :ANALYZE
 SUBEND

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

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

REM CALCOLO STATO USCITE INIZIALE
 SUB INITOUTS
 CELL=&HFD
 RELAY=REEPROM
 CELL=&H02
 OLD_OUT=REEPROM
 IF RELAY=&H55 THEN :STEP ELSE :PULSE
 :PULSE
 NEW_OUT=MOD_OUT
 GOTO :INITIT
 :STEP
 NEW_OUT=MOD_OUT XOR OLD_OUT
 :INITIT
 MEM=OLD_OUT
 CALL SETOUT
 SUBEND

REM CALCOLO NUOVO STATO USCITE
 SUB CALCOUT(MODE)
 IF MODE THEN :COMMSET
 R_C=(P_ADDR*&H03)+T_ADDR
 CELL=R_C
 MOD_OUT=REEPROM
 IF MOD_OUT>&H80 THEN :MEM_NOPCOMM
 IF MOD_OUT=&H80 THEN :CALCOUTBACK
 :COMMSET
 CELL=&HFD
 RELAY=REEPROM
 CELL=&H02
 OLD_OUT=REEPROM
 IF MODE THEN :IMPOSE
 IF T_ADDR=PTIME3_ADDR THEN :IMPOSE ELSE :TOGGLE
 :IMPOSE
 IF RELAY=&H55 THEN :XOROUTS ELSE <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS
 :TOGGLE
 IF RELAY=&H55 THEN <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS ELSE :XOROUTS
 <img border=0 src=faccine\biggrin.gif width=20 height=20>IRECTOUTS
 NEW_OUT=MOD_OUT
 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
 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
 IF NEW_OUT=0 THEN :CALCOUTBACK
 CALL SETOUT
 GOTO :CALCOUTBACK
 :MEM_NOPCOMM
 CELL=&HF7
 WEEPROM=MOD_OUT
 :CALCOUTBACK
 SUBEND

REM ATTUAZIONE NUOVO STATO USCITE
 SUB SETOUT
 :NORMALRELAY
 OUT=NEW_OUT*&B100
 IF RELAY<>&H55 THEN :SETOUTBACK
 :STEPRELAY
 CELL=&HFC
 GV1=REEPROM
 WAITMS GV1
 OUT=&H00
 :SETOUTBACK
 CELL=&H02
 WEEPROM=MEM
 PRINT "OUTS: "&MEM
 SUBEND

REM CARICO CONFIGURAZIONE DA EEPROM
 SUB LOAD_MEMORY
 LOAD_MEMORY=TRUE
 CELL=&HFD
 GV1=REEPROM
 IF (GV1=&HAA OR GV1=&H55) THEN :TIMEOUT
 GV1=&HFD
 GOTO :PROGERR
 :TIMEOUT
 CELL=&HFB
 GV1=REEPROM
 PUSHTIME1=(GV1*(2.0/255))
 CELL=&HFA
 GV1=REEPROM
 PUSHTIME2=(GV1*(2.0/255))
 CELL=&HF8
 GV1=REEPROM
 IF GV1>&H50 OR GV1<&H54 THEN :SELECTSPEED
 GOTO :PROGERR
 :SELECTSPEED
 GV1=GV1-80
 ON GV1 GOTO :Q,:N,<img src='faccine/biggrin.gif' alt="faccine/biggrin.gif" style="max-width:700px;max-height:1700px;"/>,:T,:C

 :Q
 SERIALSPEED=SPEED_4800
 GOTO :NODEID
 :N
 SERIALSPEED=SPEED_9600
 GOTO :NODEID
 <img src='faccine/biggrin.gif' alt="faccine/biggrin.gif" style="max-width:700px;max-height:1700px;"/>
 SERIALSPEED=SPEED_19200
 GOTO :NODEID
 :T
 SERIALSPEED=SPEED_38400
 GOTO :NODEID
 :C
 SERIALSPEED=SPEED_57600
 GOTO :NODEID
 :NODEID
 CELL=&HFE
 NODE_ID=REEPROM*16
 IF NODE_ID>0 AND NODE_ID<240 THEN :SERIALCOMM
 GV1=&HFE
 GOTO :PROGERR
 :SERIALCOMM
 CELL=&HF6
 GV1=REEPROM
 COMM_TIME=(GV1*(1.0/255))
 CELL=&HF5
 GV1=REEPROM
 COMM_INTR=(GV1*(2.0/255))
 :SETID
 MY_CMD=MAST_CMD+(NODE_ID/16)
 MY_PRG=MAST_PRG+(NODE_ID/16)
 PRINT " NODE:" & NODE_ID/16
 GOTO :LOADMEMBACK
 :PROGERR
 LOAD_MEMORY=FALSE
 CALL PROG_ERR(GV1)
 :LOADMEMBACK
 SUBEND

REM SALVATAGGIO ERRORE PROGRAMMAZIONE IN EEPROM
 SUB PROG_ERR(IND)
 PRINT " EEPROM ERROR: " & IND & " ! "
 CELL=&HFF
 WEEPROM=IND
 WPGM=TRUE
 SUBEND

REM CONTROLLO ATTUAZIONE INGRESSI
 SUB INPUT_CHECK
 P_ADDR=0
 T_ADDR=0
 CELL=&HF9
 PWT=REEPROM
 PWT=INT(PWT*(1.0/255)*1000)
 OUTBIT(15)=TRUE
 :RELEASED
 P_ADDR=(&H0F-((INP AND &H7800)/&H800))
 IF P_ADDR=&H00 THEN :INPUTSBACK
 GV1=TRUE
 ST=TIMER
 OUTBIT(15)=GV1
 :PUSHED
 GV1=GV1 XOR TRUE
 WAITMS PWT
 OUTBIT(15)=GV1
 IF (&H0F-((INP AND &H7800)/&H800))<>&H0 AND ((TIMER-ST)<pushtime2) THEN :PUSHED
 PTIME=(TIMER-ST)
 IF PTIME>PUSHTIME1 THEN :PT2
 T_ADDR=PTIME1_ADDR
 GOTO :ENDPT
 :PT2
 IF PTIME>PUSHTIME2 THEN :PT3
 T_ADDR=PTIME2_ADDR
 GOTO :ENDPT
 :PT3
 T_ADDR=PTIME3_ADDR
 :ENDPT
 :NOT_RELEASED
 OUTBIT(15)=FALSE
 GV1=(&H0F-((INP AND &H7800)/&H800))
 IF GV1>&H00 AND GV1<>15 THEN :NOT_RELEASED
 :INPUTSBACK
 SUBEND




Scarica allegato

DOMOCONFIG.HEX

( Numero download: 164 )



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

 

MarKoZaKKa

Avatar
GigaWatt


Gruppo:Utente
Messaggi:1886

Stato:



Inviato il: 25/10/2013,12:32

Allora, ritrovata la scatola delle meraviglie, ieri sera ho smanettato un po... la versione attuale della sub che riceve i dati via seriale è questa:

SUB COMMS_CHECK(MODE)                
        :WAITAGAIN
                RESET_TIMER
                OUTBIT(15)=1
                ST=TIMER
                WHILE TIMER-ST<COMM_TIME
                        COM_IN=COM_IN & SERIALINPSTR & USBINPSTR
                        WAITMS 75
                LOOP
                COM_IN=COM_IN & SERIALINPSTR & USBINPSTR
                SERIALCLOSE
                GV1=LEN(COM_IN)
                IF (GV1<&H4 AND GV1>&H0) THEN :WAITAGAIN
                IF GV1=0 THEN :COMMBACK
                CALL COMM_ANALYZE(MODE)
        :COMMBACK
        SUBEND


al momento, se invio una stringa di 12 comandi via seriale, ottengo da 0 a 8 risposte in sequenza, rarissimamente 12... se le invio con TX USB del compiler ottengo 12 su 12... mah!
Bolle, hai qualche idea su come modificare la routine?



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