memorizzazione interi PIC16

12 Anni 3 Mesi fa #6 da Cigolino
Risposta da Cigolino al topic Re: memorizzazione interi PIC16
Penso di non aver capito. Quello che ho inteso io è che devi inviare il risultato dell'ADC che sta in una variabile a 16 bit, via seriale, un byte alla volta. Se non ti serve tutto il valore a 10 bit, invia solo il low_byte dell'esempio che ti ho fatto, che contiene solo i primi 256 bit dell'informazione. Non riesco a capire per quale motivo si debba conoscere dove sia allocato in memoria.

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

  • Cigolino
  • Avatar di Cigolino
  • Junior Member
  • Junior Member
Di più
12 Anni 3 Mesi fa #7 da luongo
Risposta da luongo al topic Re: memorizzazione interi PIC16

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

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

  • luongo
  • Avatar di luongo
  • Premium Member
  • Premium Member
Di più
12 Anni 3 Mesi fa #8 da gcupini
Risposta da gcupini al topic Re: memorizzazione interi PIC16
ciao,
se non ho capito male, tu desideri rimappare un numero intero a 10 BIT in un numero Intero a 7 0 8 Bit ? se è cosi è sufficiente fare uno shift di due a destra del numero intero ( o 3 bit se tmappi da 0 a 127).
Infatti se hai un intero (che corrisponde ad una misura a 10 bit) il valore varia da 0 a 1023. e la sua memorizzazione in due Byte è la seguente xxxx xxyy yyyy yyyy dove x=0 y= valore binario memorizzato.

Se tu desideri rimappare i numeri da 0 a 1023 nell'intervallo 0 - 255 (un byte) basta eseguire uno shift a destra di 2 bit. Infatti supponi di avere il numero 1023= 0000 0011 1111 1111 dopo lo shift attieni :
un byte 1111 1111=255; se invece hai il valore a 10 bit pari 511=0000 0001 1111 1111 dopo lo shift di due a destra ottieni 0111 1111=127 (127 è esattamente la metà di 255, come 511 è la meta di 1023).

in effetti lo shift a destra di 1 bit corrisponde alla divisione (decimale) per 2. lo shift di 2 bit alla divisione per 4 e così via.

Spero di aver capito la tua richiesta
Saluti

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

  • gcupini
  • Visitatori
  • Visitatori
12 Anni 3 Mesi fa #9 da luongo
Risposta da luongo al topic Re: memorizzazione interi PIC16

gcupini ha scritto: ciao,
se non ho capito male, tu desideri rimappare un numero intero a 10 BIT in un numero Intero a 7 0 8 Bit ? se è cosi è sufficiente fare uno shift di due a destra del numero intero ( o 3 bit se tmappi da 0 a 127).
Infatti se hai un intero (che corrisponde ad una misura a 10 bit) il valore varia da 0 a 1023. e la sua memorizzazione in due Byte è la seguente xxxx xxyy yyyy yyyy dove x=0 y= valore binario memorizzato.

Se tu desideri rimappare i numeri da 0 a 1023 nell'intervallo 0 - 255 (un byte) basta eseguire uno shift a destra di 2 bit. Infatti supponi di avere il numero 1023= 0000 0011 1111 1111 dopo lo shift attieni :
un byte 1111 1111=255; se invece hai il valore a 10 bit pari 511=0000 0001 1111 1111 dopo lo shift di due a destra ottieni 0111 1111=127 (127 è esattamente la metà di 255, come 511 è la meta di 1023).

in effetti lo shift a destra di 1 bit corrisponde alla divisione (decimale) per 2. lo shift di 2 bit alla divisione per 4 e così via.

Spero di aver capito la tua richiesta
Saluti[/quote

Allora su quanto hai detto non ci piove il mio problena è ridurre il numero di byte inviati dall'usart quindi se io da 1023 shifto di tre e ottengo 127 ora io devo codificare due canali quindi a uno sommo 128 e ottengo 255 se è l'altro non sommo nulla e così spedisco un byte

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

  • luongo
  • Avatar di luongo
  • Premium Member
  • Premium Member
Di più
12 Anni 3 Mesi fa #10 da Cigolino
Risposta da Cigolino al topic Re: memorizzazione interi PIC16
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 :)

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

  • Cigolino
  • Avatar di Cigolino
  • Junior Member
  • Junior 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