Autor Tema: Como unir bits para formar cantidades diferentes?? PIC MICROS  (Leído 2836 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado hepl2000

  • PIC10
  • *
  • Mensajes: 2
Como unir bits para formar cantidades diferentes?? PIC MICROS
« en: 16 de Febrero de 2010, 21:10:49 »
Estoy haciendo un proyecto con pic micro y la eeprom no me alcanza para meter todos los datos que necesito asi que decidi usar catidades representadas en bits pero como manejarlas ala hora de procesar los datos??
Por ejemplo grabo 3 cantidades en 2 bytes en la eeprom (con 16bits en total) y cuando mi programa los lee dichos bits tienen significados diferentes
por ejemplo
uniendo los 16 bits serian de B0-B15
AHORA
Del bit 0   al bit  5 (6bits) seria un numero del 0-60
del bit 6   al bit  11 (6bits) seria otro numero de 0-45
del bit 12 al bit   15 (4bits) seria un numero de 0-10
total 16 bits 0-15
La dificultad radica en una vez leidos los 2 bytes de la eeprom como los separo para meterlos en 3 variables diferentes tipo byte para que una vez dentro de la variable pueda compararlas, operarlas, sumarles, restarles etc,
Estoy usando PIC basic del pic simulator ide....

Miurge alguna idea ----

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Como unir bits para formar cantidades diferentes?? PIC MICROS
« Respuesta #1 en: 17 de Febrero de 2010, 05:46:10 »
Mira en este ejemplo:

http://www.todopic.com.ar/foros/index.php?topic=14917.msg242520#msg242520

También de esta otra manera:

Dim v1 as byte
Dim v2 as byte
Dim v3 as byte
Dim d_eeprom as word

V1=0 ‘/Importante inicializar las variables
V2=0
V3=0 ‘*/

V1.0 = d_eeprom.0
V1.1= d_eeprom.1
V2.0= d_eeprom.2
V2.1=d_eeprom.3
‘etc.
« Última modificación: 17 de Febrero de 2010, 10:09:15 por dogflu66 »
Saludos desde Granada, España.

Desconectado hepl2000

  • PIC10
  • *
  • Mensajes: 2
Re: Como unir bits para formar cantidades diferentes?? PIC MICROS
« Respuesta #2 en: 18 de Febrero de 2010, 02:47:10 »
MMMM fijate que anoche lei tu respuesta y no me parecio que resolvia mi problema, debido a que no explicaste nada solo pusiste los ejemplos, no tienia ni idea de que habias hecho.... pero al dormir, soñar, pensar, se me vino a la cabeza que podia agarrar los bits individuales de la variable de la eeprom y reemplazarlos en la nueva variable tipo byte asi no necesariamente seria nvariable.0=eeprom.0  sino en el orden que yo quisiera: variable.0=eeprom.7 etc. lo probe y decidi entrar nuevamente al foro para ver alguna otra respuesta, y nada, solo la tuya y zaz, se me pararon los pelos de la cabeza al ver que exactamente lo que yo pense es lo que tu me habias ejemplificado, mmm pero como te dije, no explicaste nada y por eso no comprendi tu idea, que esta por demas exelente, pero gracias a Dios tube que resolverlo yo solo... asi jamas se me olvidara, pero gracias amigo, aunque no te haya entendido.. jaja que  cosas tiene la vida...

el otro metodo del limk no me gusta pues se lleva demasiados ciclos de procesamiento multiplicar y dividir, es mejor el directo, bit a bit aunque yo lo hice con for next por ejemplo
teniendo esta variable var_eeprom=10111001 quiero tomar los ultimos 6 bits (b2-b7) a la variable nVariable asi que en for next

for x=0 to 5
 Nvariable.x=var_eeprom.x+2
next x
 
« Última modificación: 18 de Febrero de 2010, 02:54:17 por hepl2000 »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Como unir bits para formar cantidades diferentes?? PIC MICROS
« Respuesta #3 en: 18 de Febrero de 2010, 09:00:31 »
Si, alguna vez cometemos el error de no explicar lo más basico, sorry.

En mi lenguaje por desgracia, en la expresion var_eeprom.x, no se puede usar la variable x, a la fuerza tiene que ser un numero.
Saludos desde Granada, España.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Como unir bits para formar cantidades diferentes?? PIC MICROS
« Respuesta #4 en: 19 de Febrero de 2010, 11:44:54 »
Este tambien te vale:

Dim dato_eeprom As Byte
Dim dato_aux As Byte
'/*Se mueven los bit de la variable dato_eeprom dos lugares a la derecha
'los dos huecos de la izquierda se rellenan con ceros y los bit que salen
'por la derecha se pierden. */
dato_aux = ShiftRight(dato_eeprom, 2)
Saludos desde Granada, España.