| NonSoloBolleDiAcqua
| Inviato il: 9/9/2012,19:32
|
CITAZIONE (MarKoZaKKa @ 9/9/2012, 00:54) Ancora, mi sono cimentato nella comunicazione di stringhe usando la SERIALINPSTR, e purtroppo devo dire che forse abbiamo ancora qualche problemuccio nel firmware, dato che la variabile DATO_IN saltuariamente si "sporca" con il contenuto delle stringhe virgolettate. Il codice seguente funziona, anche se da raffinare, sia in collegamento cross che con i transceiver CAN, ma guardando l'output USB degli slave, si dovrebbe leggere sequenze del tipo " ID:C RX:CA TX:M" ed invece si leggono cose così: " ID:C RX:CA ID: TX:M" con quell' " ID:" di troppo. Può darsi...indago domani...spero!
CITAZIONE (PinoTux @ 8/9/2012, 15:06) CITAZIONE Segnalo solo a Bolle che, pur usando compilatore e firmware 2.16s, al check version, il pptea risponde 2.16s ma il compilatore segnala check error 2.16r<>2.16s Non ho capito se bisogna ancora aspettare qualche correzione da parte di Bolle....o se va bene così... Va sistemato...vediamo come procede Marko...quando avrà verificato tutto faremo uscire una nuova versione...il problema è che ora non ho molto tempo! Ciao
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | NonSoloBolleDiAcqua
| Inviato il: 10/9/2012,13:25
|
Bravo Marko, forse ho trovato il problema, è una questione molto sofisticata, per ora verificami se ti funge il codice eabasic...poi vedrò di trovare una soluzione. Non sono certo ma apparentemente il controllo con una variabile (NULL) al posto di una costante sembra non creare problemi...ma è tutto da capire...il problema è confinato in uno spazio molto ristretto...quanto prima lo uccido...spero Ciao Bolle
CODICE PPTEA MASTER:
CODICE 10 CADS=0 15 NULL="" 20 SETIO=&H4006C 30 SERIALSPEED=SPEED_9600 40 ADR=1 50 SENDER=65 60 TARGET=SENDER+ADR 70 OUTBIT(0)=1 80 TS=TIMER 90 SERIALOUT=CHR(TARGET)&CHR(SENDER) 100 LCDPOS=17 110 LCDWRITE="TX:" & CHR(TARGET)&CHR(SENDER) 120 WAITMS 50 130 OUTBIT(0)=0 140 WAITMS 50 150 OUTBIT(1)=1 160 WAITMS 50 170 DATO_IN=SERIALINPSTR 180 OUTBIT(1)=0 190 WAITMS 50 200 IF DATO_IN=NULL THEN 210 ELSE 220 210 IF TIMER-TS<2 THEN 150 ELSE 70 220 P=1 230 R=LEN(DATO_IN) 240 C=MID(DATO_IN,P,1) 250 IF C="L" OR C="M" THEN 290 ELSE 260 260 IF P<R THEN 270 ELSE 150 270 P++ 280 GOTO 240 290 LCDPOS=33 300 LCDWRITE="RX:" & DATO_IN 310 ADR++ 320 IF ADR=3 THEN 330 ELSE 340 330 ADR=ADR-2 340 WAITMS 2000 350 LCDCLEAR 360 GOTO 60
CODICE PPTEA SLAVE
CODICE 10 CADS=0 15 NULL="" 20 SETIO=&H4F7EC 30 SERIALSPEED=SPEED_9600 40 MYID=(66 +(INP AND &HC) / 4) 50 OUTBIT(1)=1 60 WAITMS 50 70 DATO_IN=SERIALINPSTR 80 OUTBIT(1)=0 90 WAITMS 50 100 IF DATO_IN=NULL THEN 40 110 USBOUT=" ID:" & CHR(MYID) 120 USBOUT=" RX:" & DATO_IN 130 WAITMS 500 140 DATO_IN=LEFT(DATO_IN,1) 150 IF ASC(DATO_IN)=MYID THEN 160 ELSE 200 160 DATO_OUT=CHR(ASC(DATO_IN)+10) 170 OUTBIT(0)=1 180 SERIALOUT=DATO_OUT 190 USBOUT=" TX:" & DATO_OUT 200 X=SERIALINPSTR 'PULIZIA BUFFER RX USANDO CAN-BUS MCP2551 210 IF X<>NULL THEN 200 220 WAITMS 50 230 OUTBIT(0)=0 240 GOTO 40
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | MarKoZaKKa
| Inviato il: 10/9/2012,13:40
|
Nel frattempo ho rifatto le prove su cavo lungo, mettendo in serie i vari doppini, con tre PPTEA sparsi per casa ho coperto una lunghezza di bus di circa 120mt... in giornata provo il codice che hai postato, mi dici al volo in cosa lo hai modificato?
--------------- Tecnico qualificato in clownerie Windsurfer a tempo perso Slalomaro senza speranze
| | | | NonSoloBolleDiAcqua
| Inviato il: 10/9/2012,21:00
|
Ho inserito la variabile NULL (linea 15= ed ho fatto il confronto con la variabile invece che con la costante...tutto qui...ma è solo una pezza in attesa di risolvere. Ciao Bolle PS:Vedo che procedi alla grande...ho anche pensato perchè il wifi non funge...è tarato su una certa velocità per i moduli aurel...manca il setting della velocità!
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | PinoTux
| Inviato il: 10/9/2012,22:38
|
CITAZIONE Vedo che procedi alla grande...ho anche pensato perchè il wifi non funge...è tarato su una certa velocità per i moduli aurel...manca il setting della velocità! ...forse si potrebbe fare come per la RS232.
--------------- "Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza" http://iv3gfn.altervista.org/ http://pptea.altervista.org/
| | | | NonSoloBolleDiAcqua
| Inviato il: 11/9/2012,06:48
|
XMarko,
trovato il problema a livello di firmware...era più tosto del previsto...ma alla fine ha soccombuto...Firmware 2.16u provalo con qualsiasi tipo di codice.
X Pino,
se c'è spazio provo a metterlo nella prossima versione...provo a fare la consegna 2.16u.
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | MarKoZaKKa
| Inviato il: 11/9/2012,10:46
|
Ok... riguardo al wifi, io ho provato il CAN-BUS con la seriale su tutte le velocità possibili, e non ho mai avuto problemi... non ho indagato più di tanto, ma mi pare che gli stati logici dei pin di TX ed RX a riposo siano diversi quando la porta è impostata come WIFI piuttosto che come RS232. Sarebbe bello riuscire a far funzionare i transceiver con il protocollo wifi, in maniera da avere un unico modo di trasmissione per poter trasmettere anche a slave non raggiungibili con il rame. Adesso provo il firmware nuovo (ma non doveva essere "t" ?) , e poi semmai mi metto d'impegno su questa cosa...
--------------- Tecnico qualificato in clownerie Windsurfer a tempo perso Slalomaro senza speranze
| | | | NonSoloBolleDiAcqua
| Inviato il: 11/9/2012,12:18
|
CITAZIONE (MarKoZaKKa @ 11/9/2012, 11:46) ... ho provato il CAN-BUS con la seriale su tutte le velocità possibili, e non ho mai avuto problemi... Faccio qualche altra pensata...forse dipende dalla cifratura...ma è tanto per dire qualcosa...quando ho tempo (sempre meno) mi ci metto. Ciao Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | MarKoZaKKa
| Inviato il: 11/9/2012,16:10
|
...stai bravo e pensa ad altro, per quanto mi interessa, funziona anche in rs232, io farò i test del caso e poi ne riparliamo... sarebbe interessante fare la prova contraria, porta RS232 su modulo Aurel... credo che almeno in un punto dovrò usarlo (a meno di magie con le sonde e lo scivolante... )
--------------- Tecnico qualificato in clownerie Windsurfer a tempo perso Slalomaro senza speranze
| | | | PinoTux
| Inviato il: 11/9/2012,18:32
|
Avevo scritto un messaggio ma probabilmente non l'ho inviato... Chiedevo quali differenze ci sono fra la RS232 (TTL) e il "WiFi", e se fosse il caso di mantenere o meno quest'ultima, mi ricordo che parlavi qualcosa riguardo alla codifica manchester, ma non mi è molto chiaro il tutto, non basterebbe avere la RS232 e poi uno ci collega ciò che vuole? Mi rendo conto che non c'é una UART a gestirlo, il problema, penso da profano/praticone, e quello di gestire entrambi i buffer, sia di input che di output....sempre che ci siano...
--------------- "Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza" http://iv3gfn.altervista.org/ http://pptea.altervista.org/
| | | | NonSoloBolleDiAcqua
| Inviato il: 11/9/2012,20:57
|
Ciao Pino e Marko
il motivo è legato al segnale che deve 'ballare' ed avere una certa frequenza...facciamo un esempio, se inviamo tutti 0...il segnale è quasi sempre basso...la codifica serve cmq a far oscillare i dati costanti....quindi se mandi un segnale seriale ad un modulino aurel (od altro) che non è predisposto per la seriale...questo non funzica...la codifica oscilla e invia un segnale oscillante anche se questo è costante...e poi la decodifica risistema tutto. Il PPTEA gestisce sia la codifica WIFI che i dati seriali...ora occorre capire come mai a marko non funge...quando ho tempo faccio vedere le differenze. Quindi se provate la seriale su un modulo generico wireless non funzica...quelli che gestiscono la seriale costano di più. Ciao Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | MarKoZaKKa
| Inviato il: 12/9/2012,00:06
|
...ho capito che devo prendere a prestito l'oscilloscopio in azienda...
--------------- Tecnico qualificato in clownerie Windsurfer a tempo perso Slalomaro senza speranze
| | | | PinoTux
| Inviato il: 12/9/2012,10:01
|
Credo di aver capito che il segnale che "balla" in pratica è un clock che serve a tenere sincronizzato il ricevitore in attesa dei dati, ogni tanto mi sovvengono vecchi ricordi...
--------------- "Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza" http://iv3gfn.altervista.org/ http://pptea.altervista.org/
| | | | MarKoZaKKa
| Inviato il: 21/9/2012,09:02
|
@bolle: stavo pensando ad una cosa del genere, per rendere il progetto fruibile a tutti e non limitato al mio uso: allocare una parte della memoria esterna per una tabella; l'indirizzo della cella di memoria lo ricavo dallo stato dalla linea di input attivata e dal tempo di pressione del pulsante, a questopunto leggo il contenuto della cella che mi riporta lo stato da assegnare alle uscite; prevedo un ciclo di "programmazione" del pptea slave per caricare/aggiornare la tabella, e la tabella di assegnazione stato ingressi/stato uscite la creo con un sw ad hoc su PC... in questo modo, una volta inserito il codice nel pptea slave, ogni modifica di funzione all'impianto la faccio via comunicazione seriale, senza riprogrammare ogni slave... che ne dici? Il problema è: come faccio a sapere con certezza il "base address" dal quale la eeprom esterna non è usata per il codice?
--------------- Tecnico qualificato in clownerie Windsurfer a tempo perso Slalomaro senza speranze
| | | | NonSoloBolleDiAcqua
| Inviato il: 21/9/2012,09:16
|
Direi soluzione ottima ed elegante. Per risolvere il tuo problema ,che problema non è, è molto semplice: prendere nota della lunghezza del codice compilato (numerello presente nella fase 7 ) . Se si usa l'exp di memoria quel valore può arrivare al max a 2047...ciò vuol dire che da quel valore in poi la memoria è libera. Quindi puoi utilizzare i valori partendo dal fondo.
Esempio: se ti servono 60 Byte...la parte dati la metti da 1980 a 2040. In questo caso il valore del compilato deve essere inferiore a 1980!!! Sono stato chiaro?
Ciao Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|