Pages: [1] 2   Go Down
Author Topic: cosa viene trasmesso esattamente ?  (Read 1117 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Edison Member
*
Karma: 19
Posts: 2314
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

viene trasmesso un byte alla volta con un bit di start e uno di stop

http://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter#Character_framing

Ciao
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Edison Member
*
Karma: 19
Posts: 2314
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi   in questo caso viene "corrotto"  il dato perche è impossibile ricostruirlo nel ricevente ?   smiley-confuse
« 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 Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Edison Member
*
Karma: 19
Posts: 2314
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-grin
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Mi fido (anche perché sono a lavoro e non potrei materialmente fare la prova  smiley-wink).
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


Pages: [1] 2   Go Up
Jump to: