Go Down

Topic: Seriale con pochi bit (Read 1 time) previous topic - next topic

erpomata

Oct 22, 2012, 09:11 am Last Edit: Oct 22, 2012, 09:13 am by erpomata Reason: 1
Ciao a tutti.
Non so se questo è il forum giusto. Io scrivo poi eventualmente i moderatori lo sposteranno. In caso mi scuso in anticipo.

Avrei bisogno di trasferire via seriale 6 caratteri(anche numerici non importa), si avete capito bene 6 caratteri e basta, quindi mi basterebbe poter inviare 4 bit invece degli 8 della seriale classica.

Praticamente dovrei fare questa decodifica:
a=0000
b=0001
c=0010
ecc...

Come posso fare? Devo modificare la SoftwareSerial?
http://www.paologiammarco.it
http://www.valentinamagni.it

astrobeed

Un carattere occupa sempre e comunque 8 bit, la seriale comunica inviando sempre 8 bit per volta, in realtà sono previste anche modalità a 7 e 6 bit però sono solo per retro compatibilità con vecchi sistemi ormai obsoleti.
Nel tuo caso devi comunque inviare sei byte, uno per ogni carattere, quindi non ha alcun senso il discorso che stai facendo, a partire dal fatto che fa confusione tra bit e Byte (8 bit).


erpomata

Quindi non c'è speranza di limitare il numero di bit per velocizzare la trasmissione.
Ovviamente agendo sia sul trasmettitore che sul ricevente
http://www.paologiammarco.it
http://www.valentinamagni.it

astrobeed


Quindi non c'è speranza di limitare il numero di bit per velocizzare la trasmissione.


Se devi velocizzare aumenta il baud rate.

erpomata

Sisi già fatto.
Diciamo che è più per curiosità che altro.
Mi sembrava inutile inviare tutti e 8 i bit quando me ne servono solo 4.

Penso che per fare quello che vorrei fare bisognerebbe riscrivere un pò il protocollo di comunicazione seriale.
Sbaglio?
http://www.paologiammarco.it
http://www.valentinamagni.it

astrobeed


Penso che per fare quello che vorrei fare bisognerebbe riscrivere un pò il protocollo di comunicazione seriale.


Si e non poco, comunque il limite è dato sempre dalla seriale software, anche se limiti i bit non cambia molto la cosa, i colli di bottiglia sono ben altri.

erpomata

http://www.paologiammarco.it
http://www.valentinamagni.it

uwefed

La seriale é definita per 8Bit. (una volta anche 7bit ma non si usa piú)
Quello che puoi fare é unire 2 numeri a 4Bit per avere 1 numero a 8 bit.
Ciao Uwe

erpomata

No io voglio mandare un codice a 4 bit e basta.
http://www.paologiammarco.it
http://www.valentinamagni.it

astrobeed


No io voglio mandare un codice a 4 bit e basta.


Guarda che il consiglio di Uwe è ottimo, se a te bastano 4 bit, ci rappresenti 16 diversi simboli, per inviare l'informazione sfruttando tutti gli otto bit raddoppi a tutti gli effetti la velocità di trasmissione/ricezione perché spedisci due gruppi di dati per volta.


erpomata

Non mi è chiaro.
Io devo spedire tramite seriale la lettura digitale di 3 pin ed attivare (o disattivare) 3 pin sul ricevente quindi 4 bit sono più che sufficienti.
Ma come fare?
http://www.paologiammarco.it
http://www.valentinamagni.it

astrobeed


Io devo spedire tramite seriale la lettura digitale di 3 pin ed attivare (o disattivare) 3 pin sul ricevente quindi 4 bit sono più che sufficienti.


Visto il tipo di applicazione mi chiedo perché ti stai creando tutti questi problemi di velocità, invia un byte contenente lo stato dei tre pin e sei a posto.

erpomata

Bè ci sono arrivato ora a questa soluzione.
Ma come implementarla? Non ho ancora capito come creare un byte con i 3 bit in un determinato stato.
http://www.paologiammarco.it
http://www.valentinamagni.it

astrobeed

Nulla di più facile, ipotizziamo che i pin da inviare sono 4-5-6 non devi fare altro che assegnare a ciascuno un peso crescente pari a una potenza di due, ovvero il pin 4 vale 1, primo bit, il pin 5 vale 2, secondo bit, il pin 6 vale 4, terzo bit.
In pratica non devi fare altro che leggere lo stato dei pin, moltiplicarlo per 1, 2, 4  a seconda del pin e sommare questi valori tra loro, il valore ottenuto è il byte da inviare, in ricezione devi fare il procedimento opposto.
Un modo più semplice è usare una union però non so se le conosci e non vorrei confonderti le idee.

leo72

Funzioni facili da usare e che manipolano i bit sono quelle precostituite di Arduino:
http://arduino.cc/en/Reference/BitSet
http://arduino.cc/en/Reference/BitClear
http://arduino.cc/en/Reference/BitRead

Rispettivamente puoi impostare un bit ad 1, impostarlo a 0 oppure leggerne lo stato.

Go Up