Pero` oggettivamente mi sembra un esempio assurdo... perche' detta cosi` potrebbe far intendere che via seriale sia del tutto impossibile far passare valori piu` grandi di 255... invece non e` che ogni valore lo si debba sempre segare per farlo passare per forza in otto bit :D
Diciamo che l'autore non ha voluto appesantire la trattazione per mantenerla a livello ultraprincipianti (immagino che in quel punto non poteva certo dire che il valore va scomposto in due byte alto e basso, che vanno trasmessi indipendentemente per essere poi ricombinati in ricezione nel valore a 16 bit originale... con la relativa necessita` di occuparsi anche della sincronizzazione del flusso dati... e sorvoliamo sul controllo errori).
- Con 1 byte si traferiscono valori compresi tra 0 e 255 (0 e 0xFF in HEX)
- Per trasferire un dato ADC, presumibilmente da 12 a 16bit, sono necessari due byte perche il valore sara' compreso tra 0 e 65535 Se suggerisce di dividere per 4, il valore ADC sara' un 12bit di valore compreso tra 0 e 1023 (0 e 0x3FF in HEX)
- Dividendo per 4, il valore si comprime tra 0 e 255 (0 e 0xFF), perdendo al massimo i 2 bit MENO significativi (LSB), pero' essendo un valore analogico ed essendo un dimostrativo, questo non compromette il risultato. Se fosse stato un dato di altra natura con molta probabilita' la perdita dei bit meno significativi sarebbe stata disastrosa.
- Ovviamente si puo' sempre inviare (come suggerito da altri) l' intero dato di 2 Byte trasmettendo due caratteri sulla seriale, in un ordine NOTO im modo da ricostruirlo esattamente alla ricezione, esempio (ordine little endian, si trasmette prima LSB):
1 byte = (Valore_adc & 0xFF) Parte meno significativa del dato
2 byte =( (Valore_adc >> 8)&0xFF) Shift a destra di 8bit, MSB
1 byte = 165 (0xA5)
2 byte = 3 Inviando un solo byte (diviso per 4)
1 byte = (933/4)=233 (0xE9)
Rientrato a casa infreddolito e bagnato dopo una giornata (ieri) trascorsa fuori trovo il msg di cortexA57 che mi ha fatto capire come la mia interpretazione della frase " dividendo per 4 mi da la certezza di aver inviato valori compresi fra 0 e 255" fosse completamente sbagliata. Ora capisco cosa intendeva l'autore di quella frase. L'avevo interpretata come una prova del nove o come si interpreta la divisione per 4 per trovare un anno bisestile. Sbagliavo della grossa. Grazie Cortex ora posso affrontare la cosa nella direzione giusta. La tua frase
"Se suggerisce di dividere per 4, il valore ADC sara' un 12bit di valore compreso tra 0 e 1023 (0 e 0x3FF in HEX)
- Dividendo per 4, il valore si comprime tra 0 e 255 (0 e 0xFF), perdendo al massimo i 2 bit MENO significativi (LSB), pero' essendo un valore analogico ed essendo un dimostrativo, questo non compromette
l'orizzonte. Alle volte basta una frase per capire che stai andando a sinistra mentre dovevi andare a destra. Grazie ancora Cortex. Gab
Si, ma il "problema" che l'autore dell'esempio fa passare inosservato e` appunto che dividendo per 4 perdi i due bit meno significativi, in sostanza riduci la risoluzione della misura da 1024 punti a 256, peggiorando di 4 volte la precisione della misura.
Tutto dipende se questo e` rilevante o meno. Per l'esempio in questione non lo e`, per uno strumento di misura invece lo sarebbe, e allora andrebbero trasmessi tanti byte quanti ne servono per rappresentare il valore completo e non azzoppato ;)
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.