| NonSoloBolleDiAcqua
| Inviato il: 15/1/2012,07:44
|
Questo argomento è stato affrontato più di qualche volta in alcuni progettini realizzati con il PPTEA: temperatura su PC, Voltmetro per PC,Oscilloscopio, etc... Il PPTEA può sfruttare la porta usb e colloquiare con il PC...a questo punto basta realizzare un SW che si interfacci con la porta USB (vista come seriale) e il gioco è fatto. Ma come fare per scambiare i dati? Il PPTEA ha 3 istruzioni (USBOUT, USBOUTB, USBINP) per comunicare con il PC...invia i dati e li riceve. In questo caso vedremo solo l'invio dei dati...cioè il PPTEA utilizza i suoi convertitori Analogico digitali e li invia al pc...ma in che modo? C'è una lunga teoria per la trasmissione dei segnali...la salterò a piè pari...farò un esempio pratico cercado di descriverlo.
Ognuno può utilizzare un qualsiasi modo...ma per essere sicuri di inviare dati ed essere capiti occorre definire un protocollo.E' una parolona...ma di fatto è un metodo, condiviso , per scambiare informazioni.Utilizziamo un metodo senza feedback...cioè inviamo dei dati...se vengono capiti bene...altrimenti non fa nulla.
I dati sono 'BYTE oriented'...cioè le informazioni che scambiamo sono dei byte (0-256)...cioè le parole che scambiamo sono valori a 8 bit ( 8 bit=1 BYTE). Quando scambiamo delle informazioni dobbiamo sapere quante informazioni dobbiamo inviare...e dobbiamo far capire quando iniziano e quando finiscono.COme fare?
Quando iniziamo inviamo un valore di start (ex :33) quando abbiamo finito i dati inviamo un dato di stop (ex:66) Quindi se boddiamo inviare i 4 dati 5,35,56,99...ne invieremo qualcuno in più per far capire a chi li riceve come interpretarli. Quindi possiamo inviare i dati: |33| 5|35|56|99|66| Quindi per inviare i 4 dati ne abbiamo messo uno in testa (33 start) ed uno alla fine (66 stop).Chi riceva (il sw presengte sul PC) vede arrivare i dati con lo start e stop ...e può calcolarsi il numero dei dati trasferiti ed anche loro valore...ma deve fare dei calcoli. Per semplificare l'operazione di chi riceve i dati, chi l'invia può inserire (nella testata...cioè nella parte iniziale) anche quanti dati deve inviare. Cioè |33| 4| 5| 35|56|99|66| A questo punto i dati inviati sono 4+3 (start, nbyte, stop). Può capitare che i dati arrivino in modo errato...disturbi di rete...etc...e per essere sicuri che chi li riceve sappia se li ha ricevuti in modo corretto. Come si fa? Si utilizza un byte di controllo...viene chiamato checksum (CKS)...cioè un controllo di somma...cioè tuti i dati vengono sommati e questo dato viene accodato ai dati inviati. Facciamo un esmepio: |33|4|5|35|56|99|CSK|66| CSK è la somma di 5+35+56+99=195...quindi i messaggio completo sarà:
|33|4|5|35|56|99|195|66|
In questo modo abbiamo definito un protocollo e il messaggio che viene scambiato viene chiamato PACCHETTO...definito in questo modo: |START|NUN_DATI|DATO1|DATO2|...| CHECKSUM|STOP|
Chi riceve il pacchetto quando vede arriare il 33 (START) sa che sta iniziano il pacchetto, subito dopo vede arriare la lunghezza dei dati..letti i dati (5,35,56,99) si vede arrivare la checksum (195) e subito dopo DEVE arrivare lo stop (66).Se Start e Stop sono corretti si passa a fare i conti della checksum...se è giusta il pacchetto è esatto ( o ci sono alte probabilità che sia giusto).
Vediamo l'esempio del sensore di temperatura del PPTEA...che utilizza un protocollo leggermente diverso....invia la checksum dopo lo stop :
CODICE 91 PSTART=22 92 PSTOP=33 93 TEMP=CADS2 94 USBOUT=PSTART 95 USBOUT=TEMP 'Invio la temperatura 96 USBOUT= PSTOP 97 USBOUT= PSTART+PSTOP+TEMP ' CHECKSUM 110 WAITS 1 ' Attendo un secondo tra una lettura 120 goto 93 Viene utilizzato 22 come start, 33 come stop e i dati inviati sono |START|TEMP|STOP|CHECKSUM|
Chiaro?Dubbi? Il prossimo passo sarà realizzare un sw sul pc che visualizzi un grafico ... Bolle
Modificato da NonSoloBolleDiAcqua - 15/1/2012, 12:42
--------------- 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: 15/1/2012,12:11
|
Ho avuto qualche dubbio quando nell'esempio sei partito con 5 dati e poi nell'esempio del CKS parlavi di quattro:
CITAZIONE Cioè |33| 4| 5| 35|25|56|99|66| A questo punto i dati inviati sono 4+3 (start, nbyte, stop). Riprendendo più sotto il tutto quadrava:
CITAZIONE Facciamo un esmepio: |33|4|5|35|56|99|CSK|66| CSK è la somma di 5+35+56+99=195...quindi i messaggio completo sarà:
|33|4|5|35|56|99|195|66| Nell'esempio di sopra c'era il 25 che avanzava? Sempre che abbia capito bene...o forse sono andato di fretta e non ho capito qualcosa? Sai com'è....l'età....
P.S. Forse è prematuro parlarne, ma la velocità di comunicazione, o bit-rate come viene definito? E' forse una particolarità dell' USB quello di non essere "rigido"? Scusa le domande, ma ero legato al fatto dell'RS232 dove bisognava definire tutto...
--------------- "Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza" http://iv3gfn.altervista.org/ http://pptea.altervista.org/
| | | | NonSoloBolleDiAcqua
| Inviato il: 15/1/2012,12:41
|
CITAZIONE (PinoTux @ 15/1/2012, 12:11) Nell'esempio di sopra c'era il 25 che avanzava? Sempre che abbia capito bene...o forse sono andato di fretta e non ho capito qualcosa? Sai com'è....l'età.... Hai capito bene...è la mia età che avanza....ehhehe...ho corretto l'esempio!
CITAZIONE (PinoTux @ 15/1/2012, 12:11) Forse è prematuro parlarne, ma la velocità di comunicazione, o bit-rate come viene definito? E' forse una particolarità dell' USB quello di non essere "rigido"? Scusa le domande, ma ero legato al fatto dell'RS232 dove bisognava definire tutto... La velocità di trasmissione è un parametro fondamentale...diciamolo subito...queste sono le caratteristiche con cui inviare/ricevere i dati se si utilizza il PPTEA: 19200, 8 bit,NOPARITY, 1 BIT DI STOP Ciao e grazie Bolle
--------------- 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: 23/1/2012,15:07
|
Vediamo come questo eseguibile in allegato permetta la visualizzazione di 3 temperature. Il codice da caricare è questo:
CODICE 10 '------CODICE EABASIC GRAFICO-------
95 'CADS=3
100 PSTART=22
120 PSTOP=33
130 T1=CADS1
133 T2=CADS2
136 T3=CADS3
140 USBOUT=PSTART
150 USBOUT=T1 'Invio il valore del convertitore 1
152 USBOUT=T2 'Invio il valore del convertitore 2
155 USBOUT=T3 'Invio il valore del convertitore 3
160 USBOUT= PSTOP
170 USBOUT= PSTART+PSTOP+T1+T2+T3 ' CHECKSUM
180 WAITS 1 ' Attendo un secondo tra una lettura
190 goto 130
200 '-----------------------------------
L'eseguibile visualizza 5 ore ( espresse in minuti) di registrazione, è possibile salvare il grafico sul PC.
Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | titone78
| Inviato il: 23/1/2012,18:23
|
ciao bolle,grande,vedo che comunque gli hai gia fatto la predisposizione sia per il 4 e 5 cads.
| | | | NonSoloBolleDiAcqua
| Inviato il: 23/1/2012,20:15
|
E si ... sta nascendo il sw che fa al caso tuo....ma lo posto nell'altra discussione...questo è generico ...il tuo sarà mirato alla tua applicazione. Ciao Bole
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | titone78
| Inviato il: 23/1/2012,20:19
|
ma per curiosita,dato che non me intendo in che linguaggio scrivi questi programmi?
| | | | NonSoloBolleDiAcqua
| Inviato il: 24/1/2012,05:09
|
In qualsiasi linguaggio...quello è fatto in vb6...dovrebbe essere facile per tutti. Per la tua applicazione posterò anche i sorgenti...se sei in grado di modificarlo.Se non sei capace ... ti seguirò passo passo....facendo le varianti che chiederai! Va bene? Bolle
--------------- 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: 24/1/2012,13:17
|
Funziona!
--------------- "Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza" http://iv3gfn.altervista.org/ http://pptea.altervista.org/
| | | | NonSoloBolleDiAcqua
| Inviato il: 25/1/2012,15:26
|
Allego la versione che monitorizza tutti i 5 sensori di temperatura del PPTEA.
Questo è un esempio di codice eabasic del PPTEA.
CODICE 90 '------CODICE EABASIC GRAFICO------- 95 CADS=5 100 PSTART=22 120 PSTOP=33 130 T1=CADS1 133 T2=CADS2 136 T3=CADS3 137 T4=CADS4 138 T5=CADS5 140 USBOUT=PSTART 150 USBOUT=T1 'Invio il valore del convertitore 1 152 USBOUT=T2 'Invio il valore del convertitore 2 155 USBOUT=T3 'Invio il valore del convertitore 3 156 USBOUT=T4 'Invio il valore del convertitore 4 157 USBOUT=T5 'Invio il valore del convertitore 5 160 USBOUT& #61; PSTOP 170 USBOUT= PSTART+PSTOP+T1+T2+T3+T4+T5 ' CHECKSUM 180 WAITS 1 ' Attendo un secondo tra una lettura 190 goto 130 200 '----------------------------------- In questa versione c'è il flag del log per salvare i dati che arrivano. Vengono salvati in continuazione sul file "Dati-gg-mm-aaaa.txt" ( gg= giorno, mm=mese, aaaa= anno) consultabile anche con i dati in arrivo. I campi sono separati dal separatore | e sono importabili su excell. I campi sono sette:
1.Secondi arrivo dati ( i secondi partono dall'avvio del programma) 2.3.4.5.6. Temperature da T1 a T5. 7.Orario arrivo dati Bolle PS:Ho la sensazione che questo era quello che aveva chiesto Titone...
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis). | | | | titone78
| Inviato il: 25/1/2012,19:27
|
Ciao bolle,ci hai preso in pieno ieri sera mi ero divertito a scrivere un programmino che mi leggeva 5 temperature sul display,e mi trasmetteva 3 temperature via usb sul tuo programmino,stasera lo modifico per i 5 cads "tempo e mal di testa permettendo" e poi lo posto cosi mi puoi dare consigli per cosa modificare.
| | | | PinoTux
| Inviato il: 25/1/2012,21:28
|
Bene titone, ho giocato anch'io solo che uso tre temperature e due letture di tensione.... Ora aspettiasmo che Bolle faccia il grafico per monitorare pure le batterie, magari in un unico programma dove scegli la configurazione degli ingressi. Proposta, visto che tratti i dati "grezzi" e poi il programma li elabora, si potrebbe fare un pgm grafico tipo KISS dove i dati me li elaboro nel pgm .eab e poi li do in pasto al "grafico"? Dico questo perché se mi serve monitorare una tensione di 5kV.....
--------------- "Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza" http://iv3gfn.altervista.org/ http://pptea.altervista.org/
| | | | titone78
| Inviato il: 25/1/2012,21:38
|
ciao a tutti,vi posto il programmino che ho scritto,in cui vedo sul display la temperatura di cinque sensori,ed a ogni lettura mi manda il rispettivo valore nel programmino creato da Bolle,il programma e abbastanza lungo e sicuramente ci sono molte parti da modificare,ma almeno sono gia riuscito a fare una buona parte.
10 ' sensore pptea 5 temp 15 ' presentazione 45 cads=5 50 lcdclear 55 lcdpos=&h11 60 lcdwrite="Sensori Stufa" 65 lcdpos=&h21 70 lcdwrite="Wood Gas PPTEA" 75 waits 2 100 ' variabili e impostazioni 102 clr a,b,c,d,e 103 pstart=22 104 pstop=33 105 a=1 106 b=1 107 c=1 108 d=1 109 e=1 200 ' Temperatura entrata scambiatore lcd+usb 205 lcdclear 210 lcdpos=&h11 215 lcdwrite="IN Scambiatore" 220 lcdpos=&h21 225 lcdwrite="Temp= " 252 gosub :usb 255 t=t1 260 gosub :temperatura 265 lcdpos=&h27 270 lcdwrite= strtemp 275 a++ 280 waitms 250 285 if a <15 then 252 300 ' temperatura uscita scambiatore lcd+usb 305 lcdclear 310 lcdpos=&h11 315 lcdwrite="OUT Scambiatore" 320 lcdpos=&h21 325 lcdwrite="Temp= " 335 gosub :usb 355 t=t2 360 gosub :temperatura 365 lcdpos=&h27 370 lcdwrite= strtemp 375 b++ 380 waitms 250 385 if b <15 then 335 400 ' temperatura accumulo display 405 lcdclear 410 lcdpos=&h11 420 lcdwrite="Accumulo" 425 lcdpos=&h21 430 lcdwrite="Temp= " 433 gosub :usb 435 t=t3 440 gosub :temperatura 445 lcdpos=&h27 450 lcdwrite= strtemp 455 c++ 460 waitms 250 465 if c <15 then 433 500 ' temperatura uscita acqua fancoil display 505 lcdclear 510 lcdpos=&h11 515 lcdwrite="OUT FanCoil" 520 lcdpos=&h21 525 lcdwrite="Temp= " 526 gosub :usb 530 t=t4 535 gosub :temperatura 540 lcdpos=&h27 545 lcdwrite= strtemp 550 d++ 555 waitms 250 560 if d <15 then 526 600 ' temperatura ambiente display+usb 605 lcdclear 610 lcdpos=&h11 615 lcdwrite="Temp Ambiente" 620 lcdpos=&h21 625 lcdwrite="Temp= " 635 gosub :usb 655 t=t5 660 gosub :temperatura 665 lcdpos=&h27 670 lcdwrite= strtemp 675 e++ 680 waitms 250 685 if e <15 then 635 890 goto 102 920 :usb 921 t1=cads1 922 t2=cads2 923 t3=cads3 924 t4=cads4 925 t5=cads5 928 usbout=pstart 929 usbout=t1 930 usbout=t2 935 usbout=t3 936 usbout=t4 937 usbout=t5 940 usbout=pstop 945 usbout=pstart+t1+t2+t3+t4+t5+pstop ' checksum 950 return 1000 :temperatura 1005 temp=t*5.0/1023 1010 temp*=100 1015 strtemp=left(temp&"",4) 1020 return
ciao a tutti
| | | | NonSoloBolleDiAcqua
| Inviato il: 25/1/2012,21:44
|
Ciao Titone, ma sei riuscito a vedere il grafico? Se vuoi do una ritoccatina al tuo programma...senza stravolgerlo molto...ma solo se vuoi! Ciao Bolle
--------------- Chi sa raccontare bene le bugie ha la verità in pugno (by PinoTux). Un risultato se non è ripetibile non esiste (by qqcreafis).
| | | | titone78
| Inviato il: 25/1/2012,21:50
|
bolle una ritocatta la voglio molto volentieri,almeno capisco dove poter risparmiare spazio e migliorare il software,certo che il grafico lo vedo,tutte e 5 le temperature e funziona molto bene adesso mi manca da mettere insieme una schedina e almeno posso monitorare gia qualcosa,questo e il primo passo per una vera centralina
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|