Pages: [1] 2 3   Go Down
Author Topic: Seriale con pochi bit  (Read 1127 times)
0 Members and 1 Guest are viewing this topic.
Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: October 22, 2012, 02:13:29 am by erpomata » Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"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

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).

Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quindi non c'è speranza di limitare il numero di bit per velocizzare la trasmissione.
Ovviamente agendo sia sul trasmettitore che sul ricevente
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"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 non c'è speranza di limitare il numero di bit per velocizzare la trasmissione.

Se devi velocizzare aumenta il baud rate.
Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"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

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.
Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ottimo rimane così  smiley
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20193
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"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

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.

Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"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

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.
Logged

Roma (RM)
Offline Offline
God Member
*****
Karma: 3
Posts: 634
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9186
"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

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.
Logged

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

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.
Logged


Pages: [1] 2 3   Go Up
Jump to: