memorizzazione interi PIC16

11 Anni 9 Mesi fa #11 da luongo
Risposta da luongo al topic Re: memorizzazione interi PIC16

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.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • luongo
  • Avatar di luongo
  • Premium Member
  • Premium Member
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login