Offline
God Member
Karma: 6
Posts: 541
|
 |
« on: October 13, 2012, 11:31:54 am » |
tra due arduini collegati tramite seriale cosa viene effettivamente trasmesso nella seriale del ricevente, indipendentemente da come poi è strutturato lo sketct sul ricevente,
cosa viene trasmesso prima di tutto nei 2 casi
arduino trasmittente
long x;
x = 12345;
Serial.print (x);
Seriaa.write (x)
|
|
|
|
« Last Edit: October 13, 2012, 11:33:51 am by gingardu »
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Parma
Offline
Edison Member
Karma: 10
Posts: 2106
|
 |
« Reply #1 on: October 13, 2012, 11:36:56 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16447
Don't know what I do
|
 |
« Reply #2 on: October 13, 2012, 11:37:30 am » |
Nel primo caso il numero viene trasmesso trasformato in una sequenza di char, ossia byte il cui valore indica il codice ASCII della cifra in trasmissione.
Nel secondo viene spedito il numero scomposto nei byte che lo compongono.
|
|
|
|
|
Logged
|
|
|
|
|
Parma
Offline
Edison Member
Karma: 10
Posts: 2106
|
 |
« Reply #3 on: October 13, 2012, 11:38:58 am » |
Quando non si trasmette la linea si dice che è in idle e vale 1, il bit di start è uno 0 e quello di stop un 1  Con l'oscilloscopio vedi questi valori Ciao
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #4 on: October 13, 2012, 11:48:17 am » |
Nel primo caso il numero viene trasmesso trasformato in una sequenza di char, ossia byte il cui valore indica il codice ASCII della cifra in trasmissione.
Nel secondo viene spedito il numero scomposto nei byte che lo compongono.
quindi nel primo caso vengono trasmessi 49 50 51 52 53 e nel secondo invece non riesco a comprendere bene valori esadecimali?
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #5 on: October 13, 2012, 11:52:54 am » |
Nel secondo viene spedito il numero scomposto nei byte che lo compongono.
La serial.write trasmette un solo byte, se gli passi un long ne fa il casting a unsigned char e invia questo unico byte risultante.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #6 on: October 13, 2012, 12:09:26 pm » |
quindi in questo caso viene "corrotto" il dato perche è impossibile ricostruirlo nel ricevente ? 
|
|
|
|
« Last Edit: October 13, 2012, 12:35:06 pm by gingardu »
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #7 on: October 13, 2012, 12:35:16 pm » |
quindi in questo caso viene "corrotto"
Non viene corrotto nulla, semplicemente la Serial.Write è pensata per inviare un singolo byte in formato binario, va da se che un long, ma anche un int, non puo è essere passato direttamente alla Serial.Write, se lo fai viene eseguito il casting a unsigned char, prima va scomposto nei byte che lo compongono e poi si inviano questi singolarmente.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #8 on: October 13, 2012, 12:48:29 pm » |
ok adesso e piu chiaro, in tutti e due i casi viene trasmesso il comtenuto della variabile x solo che vengono adoperate "codifiche" differenti,
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #9 on: October 13, 2012, 12:56:36 pm » |
ok adesso e piu chiaro, in tutti e due i casi viene trasmesso il comtenuto della variabile x solo che vengono adoperate "codifiche" differenti,
Non è proprio così, nel primo caso x viene convertito in stringa ASCII e viene trasmessa questa, nel secondo caso vengono presi solo i primi otto bit di x (casting) e viene trasmesso un singolo byte composto da questi bit.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #10 on: October 13, 2012, 03:17:34 pm » |
Quando non si trasmette la linea si dice che è in idle e vale 1, il bit di start è uno 0 e quello di stop un 1  Con l'oscilloscopio vedi questi valori Ciao ma Arduino nella seriale a i meno 12 volt ? e a conclusione la seriale trasmette sempre e unicamente 8 bit in quel modo?
|
|
|
|
« Last Edit: October 13, 2012, 03:20:34 pm by gingardu »
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Parma
Offline
Edison Member
Karma: 10
Posts: 2106
|
 |
« Reply #11 on: October 13, 2012, 03:25:36 pm » |
Nell'immagine sono mostrati i livelli di una porta seriale (quelle vecchie dei pc), in Arduino gli 1 sono 5 volt e gli 0 o 0 volt Puoi impostare anche bit di parità, doppio stop, etc.. Ciao
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16447
Don't know what I do
|
 |
« Reply #12 on: October 13, 2012, 11:23:17 pm » |
ok adesso e piu chiaro, in tutti e due i casi viene trasmesso il comtenuto della variabile x solo che vengono adoperate "codifiche" differenti,
Non è proprio così, nel primo caso x viene convertito in stringa ASCII e viene trasmessa questa, nel secondo caso vengono presi solo i primi otto bit di x (casting) e viene trasmesso un singolo byte composto da questi bit. Nel reference, alla voce Serial.write si parla esplicitamente che il metodo è capace di spedire 1 singolo byte oppure una sequenza di byte, dipende da che tipo di dati gli passi. Se gli passi un int o un long (2 o 4 byte) verrà spedita la variabile scomposta nei singoli byte.
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #13 on: October 14, 2012, 12:04:00 am » |
Nel reference, alla voce Serial.write si parla esplicitamente che il metodo è capace di spedire 1 singolo byte oppure una sequenza di byte, dipende da che tipo di dati gli passi. Se gli passi un int o un long (2 o 4 byte) verrà spedita la variabile scomposta nei singoli byte.
No, la serie di byte è solo se gli passi uno string o un array, in quest'ultimo caso puoi anche specificare quanti byte vanno trasmessi, se gli passi una variabile numerica maggiore di un (unsigned) char viene trasmesso un singolo byte ottenuto tramite il casting, cioè solo i primi otto bit, di questa. Provare per credere 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16447
Don't know what I do
|
 |
« Reply #14 on: October 14, 2012, 12:16:55 am » |
No, la serie di byte è solo se gli passi uno string o un array, in quest'ultimo caso puoi anche specificare quanti byte vanno trasmessi, se gli passi una variabile numerica maggiore di un (unsigned) char viene trasmesso un singolo byte ottenuto tramite il casting, cioè solo i primi otto bit, di questa. Provare per credere  Mi fido (anche perché sono a lavoro e non potrei materialmente fare la prova  ). Allora l'unico modo è passargli il numero scomposto in un array di unsigned char (byte) che poi il metodo write spedisce 1 ad 1 con la sintassi Serial.write(buf, len).
|
|
|
|
|
Logged
|
|
|
|
|
|