Cigolino ha scritto: OK, finalmente ho capito il discorso di trasmettere due informazioni diverse in un solo byte! Soluzione quantomeno interessante
Naturalmente, il discorso di inviare solo il byte più basso non ha senso, su una lettura a fondo scala, si perderebbe parte dell'informazione.
Dividendola invece, si perde in risoluzione, ma come hai detto non importa...
Personalmente, non so andare oltre, quando trovi il modo di gestire la cosa in assembler, spero che la pubblichi così si impara... Ho visto qui sul forum il progetto del Rover, così adesso mi è chiaro anche cosa stai realizzando
Secondo una mia opinione assolutamente qualitativa si andrebbe a perdere parte dell'informazione e precisione (come affermato anche da te), si avrebbe una "accellerazione" con un andamento logaritmico, se così si può dire, il calcolo del punto morto del controllo è molto più alla buona. A parer mio però riesco a ridurre la probabilità d'errore, mi spiego meglio: perdendo buona parte dell'acquisizione ADC molti dati si assomigliano quindi è come se mandassi continuamente lo stesso dato pertanto se si perdesse qualche pezzo di byte per strada non dovrei avere problemi e per di più elimino i problemi di tempistica per coordinare tx e rx.
Mi spiego attraverso una sorta di flow chart:
TX:
ADC (10 bit) --> shift di tre verso destra (ottengo dato da 0 a 127) --> codifica (se canale 1 aggiungo 128 se canale due il dato resta immutato) --> trasmetto tramite modulo USART
RX:
ricezione modulo USART (8 bit) --> decodifico (se superiore di 128 sottraggo 128 sennò resta immutato) --> shifto di 1 verso sinistra (ottengo dato da 0 a 255) --> calcolo punto morto del controller (levetta) --> decodifico direzione e velocità --> mando il dato tramite USART al motor driver
A me sembra che non faccia una piega non ha una notevole precisione però potrebbe andare. Per la storia dell'assembly intendevo allocare l'intero nella locazione chessò 0x0C (ad esempio), a rigor di logica il byte alto si troverà in 0x0C e il byte basso in 0x0D. Con l'assembly volevo spostare il valore del byte basso nell'accumulatore per poi allocarlo che ne so in 0x0F, dichiarata in precedenza come la locazione della variabile char da mandare con l'USART.