Autor Tema: Guardar variable por medio de su dirección, en matriz de LEDs  (Leído 2028 veces)

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

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Guardar variable por medio de su dirección, en matriz de LEDs
« en: 27 de Marzo de 2011, 21:18:36 »
Hola amigos, estoy tratando de hacer el scroll de una matriz de LEDs, y estoy pasandola mal, a grandes rasgos mi problema particular es el siguiente:

Yo tengo guardados mis caracteres en la EEPROM de mi 16F887, en grupos de 4 a 8 bytes, dependiendo del ancho de cada uno, y utilice la directiva #rom para ello, de la siguiente forma:

Código: [Seleccionar]
#rom 0x2100 = { 0x06,0xFC,0x12,0x11,0x11,0x12,0xFC } //A
#rom 0x2107 = { 0x06,0xFF,0x89,0x89,0x89,0x89,0x76 } //B
#rom 0x210E = { 0x06,0x7E,0x81,0x81,0x81,0x81,0x42 } //C
#rom 0x2115 = { 0x06,0xFF,0X81,0X81,0X81,0X42,0X3C } //D

despues definí el inicio de cada caracter asi:

Código: [Seleccionar]
#define MAY_A 0x00
#define MAY_B 0x07
#define MAY_C 0x0E
#define MAY_D 0x15

Donde cada etiqueta de cada caracter contiene la dirección en la cual comienza cada caracter, el primer byte de cada uno, indica la cantidad de bytes que forman el caracter, y los demás son el caracter en sí, de esta forma solo esperaba leer el primero para saber el ancho y la dirección de inicio y de esta forma volcarlo en la matriz.

Posteriormente, a la hora de querer utilizar cada caracter, guardo la dirección de inicio de cada uno en una matriz llamada buffer[], que declaré sin definir cuantos bytes tiene, para escribir textos de diferentes longitudes. De esta forma guardo las direcciones en el buffer:

Código: [Seleccionar]
case 'A': buffer[char_counter]=(MAY_A); break;
case 'B': buffer[char_counter]=(MAY_B); break;
case 'C': buffer[char_counter]=(MAY_C); break;
case 'D': buffer[char_counter]=(MAY_D); break;

Hasta aquí todo bien, el problema está cuando quiero acceder a la información que contiene cada miembro de mi matriz buffer[], que debe tener la dirección de inicio de cada caracter, y es que he tratado de guardar el contenido por medio de apuntadores asi:

Código: [Seleccionar]
no_bytes=*buffer[0];

Se supone que de esta forma estoy accediendo a la informacion que hay en la dirección buffer[0], que es la dirección del primer byte que me dice cuantos bytes tiene, pero solo me sale 0x00, lo cual es incorrecto.

Leyendo por allí me dí cuenta que solo se puede usar un apuntador inicializandolo como tal, pero la verdad no estoy seguro como se haría en mi caso, ya que la información de las direcciones no las puedo guardar en formato de apuntador, alguien me puede hechar una mano?

Gracias.
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Guardar variable por medio de su dirección, en matriz de LEDs
« Respuesta #1 en: 27 de Marzo de 2011, 21:24:08 »
No entiendo bien la idea que quieres implementar, pero si en el buffer tienes la dirección que es solo de 8-bits no es necesario usar apuntadores. Además con un apuntador no puedes direccionar la EEPROM.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Guardar variable por medio de su dirección, en matriz de LEDs
« Respuesta #2 en: 27 de Marzo de 2011, 22:17:58 »
No entiendo bien la idea que quieres implementar, pero si en el buffer tienes la dirección que es solo de 8-bits no es necesario usar apuntadores. Además con un apuntador no puedes direccionar la EEPROM.


Saludos!

Bueno, la idea es cargar en un buffer todas las direcciones del inicio de cada caracter y sobre este buffer trabajar, si no se puede hacer con apuntadores entonces de que forma podría lograr lo siguiente:

Código: [Seleccionar]
#define MAY_A 0x00        // etiqueta de la direccion de inicio del caracter A

#rom 0x2100 = { 0x06,0xFC,0x12,0x11,0x11,0x12,0xFC } // A - Dirección de inicio: 0x00

int8 buffer[];      Buffer de x bytes de largo

buffer[0]= "El contenido de la direccion MAY_A (o 0x00)" es decir: buffer[0]= 0x06;

Gracias por tu respuesta.
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Guardar variable por medio de su dirección, en matriz de LEDs
« Respuesta #3 en: 27 de Marzo de 2011, 22:37:50 »
Jajaja, la verdad es que el problema era únicamente que en mi frustración olvide que los datos que estaba intentando leer estaban guardados en la eeprom y no en la rom, ya que facilmente se pueden leer con read_eeprom, gracias por la ayuda Suky
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com