Autor Tema: guardar en la eeprom un numero de 16 bits  (Leído 15336 veces)

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

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #30 en: 14 de Septiembre de 2009, 15:35:48 »
Cuando postees código realizalo entre [code = c .][ /code . ] (Sin los puntos)  ;-)

Después 12 y 55 del ejemplo que mostraste están en decimal, por eso que al realizar el make y mostrarlo te da cualquier cosa, si cambias esto:
printf(" make= %lu \n\r ",hora );
a esto, seguro visualizará lo que tu quieres:
printf(" make= %x \n\r ",hora );


Saludos!





Hola
no me explique  el problema no es enviar los datos con el pritf esa parte funciona ok ya que como atinada mente comentas hay que darle el formato adecuado.
El problema es este tengo dos variable tipo byte (hrs,min) las cuales requiero convertir en una variable tipo long para poderla mandar a mi procedimiento destripa.
Tengo esto
hrs=12
min=55
y requiero
esto
long=1255
0
 
long=5512

en realidad la pocion no me importa siempre y cuando cada byte se mantenga integro
e intentado con  make16(min,hrs) pero me devuelve un valor que no tiene nada que ver con  lo que quiero, incluso me devuelve 5 dígitos en ves de 4.
se me ocurre  que se podría pasar a caracteres cada variable, después pegarlas y por ultimo pasarla a long.
Pero no se como hacer esto
cualquier sugerencia se agradece 

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #31 en: 14 de Septiembre de 2009, 15:42:37 »
Hola, no te devuelve el valor que esperas porque hace una conversión de hexadecimal a decimal...

Código: [Seleccionar]
12 = 0x0C
55 = 0x37

Al unirlos en un int16 queda:

Código: [Seleccionar]
0x0C37

Al imprimirlos como un int16 en decimal queda:

Código: [Seleccionar]
0x0C37 = 3127

Estás atacando el problema erróneamente. Explícanos que es lo que "destripa" hace exactamente y te podremos guiar en cómo armar tu dato. Seguramente lo que necesitas es pasarlo a BCD o algo por el estilo.

Edito:
Creo que esto es lo que necesitas:

Código: [Seleccionar]
int16 dato;
int8 hora, min;

dato = hora*100 + min;
« Última modificación: 14 de Septiembre de 2009, 15:44:59 por migsantiago »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #32 en: 14 de Septiembre de 2009, 16:07:23 »
Hola.

Si vas a usar BCD luego, conviene guardar el dato en hexadecimal directamente no?
El papel lo aguanta todo

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #33 en: 14 de Septiembre de 2009, 16:35:20 »
Hola, no te devuelve el valor que esperas porque hace una conversión de hexadecimal a decimal...

Código: [Seleccionar]
12 = 0x0C
55 = 0x37

Al unirlos en un int16 queda:

Código: [Seleccionar]
0x0C37

Al imprimirlos como un int16 en decimal queda:

Código: [Seleccionar]
0x0C37 = 3127

Estás atacando el problema erróneamente. Explícanos que es lo que "destripa" hace exactamente y te podremos guiar en cómo armar tu dato. Seguramente lo que necesitas es pasarlo a BCD o algo por el estilo.

Edito:
Creo que esto es lo que necesitas:

Código: [Seleccionar]
int16 dato;
int8 hora, min;

dato = hora*100 + min;




Exacto esa es la solucion    :-/ :-/ :-/ como dices estaba atacando mal el problema
gracias. :) :)
el pro sedimentooo destripa lo que hace es que resive un valor long y lo separa en digitos
si le paso 1255 me devuelve
digito[1]=5
digito[2]=5
digito[3]=2
digito[1]=1
y así  ya puedo trabajar con el max7219 así

max7219(numero_display,digito)

Desconectado septiembre_negro

  • PIC18
  • ****
  • Mensajes: 310
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #34 en: 14 de Septiembre de 2009, 16:44:50 »
Hola.

Si vas a usar BCD luego, conviene guardar el dato en hexadecimal directamente no?

Hola
en este caso no por que la librería del ds1307  ase la convercion de bcd a decimal  el asunto es  que la función make convierte los datos tengo que checar bien que es lo que hace.
Ademas de que yo estaba atacando mal el problema lo que quería hacer era pegar dos variables byte y el asunto era tan simple como hacer  dato=hora*100+min  :mrgreen:
« Última modificación: 14 de Septiembre de 2009, 16:46:51 por septiembre_negro »

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #35 en: 14 de Septiembre de 2009, 20:13:58 »
espero no llegar tan tarde y no repetir si es que ya lo dijeron, pero el CCS tiene una librería para manejar varios tipos de datos y almacenarlos en la eeprom interna, los use una vez en una memoria externa, cambiando las funciones de lectura y escritura, pero no la idea nada del algoritmo, la librería se llama internal_eeprom.c y esta dentro la carpeta Drivers

saludos!
« Última modificación: 14 de Septiembre de 2009, 21:02:42 por Cryn »
.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #36 en: 14 de Septiembre de 2009, 20:49:57 »
Uff Cryn sí es cierto  :D

Yo la busqué en la ayuda de CCS pero no la encontré  :P

Desconectado micronet3

  • PIC18
  • ****
  • Mensajes: 288
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #37 en: 15 de Septiembre de 2009, 11:13:36 »
si que bien, gracias amigo cryn :-/

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: guardar en la eeprom un numero de 16 bits
« Respuesta #38 en: 15 de Septiembre de 2009, 11:39:52 »
que bueno que haya servido

ya saben fácilmente se puede cambiar para memorias externas i2c, funciona muy bien también, solo hay que tener bien las drecciones

saludos.
.

Desconectado alexmorales

  • PIC10
  • *
  • Mensajes: 6
Re:guardar en la eeprom un numero de 16 bits
« Respuesta #39 en: 06 de Enero de 2018, 00:38:10 »
buen dia estoy viendo a barios amigos que estan colocando los parametros de la funcion write_eeprom (valor,dirección) y para mi concepto esta malo ya que la funcion es write_eeprom(dirección,valor) direccion es la posicion en la memoria y valor es el dato que se guardara ojo con eso

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:guardar en la eeprom un numero de 16 bits
« Respuesta #40 en: 06 de Enero de 2018, 00:46:10 »
buen dia estoy viendo a barios amigos que estan colocando los parametros de la funcion write_eeprom (valor,dirección) y para mi concepto esta malo ya que la funcion es write_eeprom(dirección,valor) direccion es la posicion en la memoria y valor es el dato que se guardara ojo con eso

Si fue un error por escribir el codigo sin mirar el manual o de memoria. En la 2da pagina se advierte el error y se modifica el contenido de alli en adelante.


 

anything