Autor Tema: [C18] escritura de un byte con distintos puertos para LCD  (Leído 2565 veces)

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

Desconectado GAME

  • PIC10
  • *
  • Mensajes: 9
[C18] escritura de un byte con distintos puertos para LCD
« en: 20 de Enero de 2008, 11:21:15 »
Llevo un par de dias full time buscando como asignar distintos puertos a una variable data del LCD. Definida en la libreria XLCD.h del mcc18.
El caso es el siguiente en la libreria la variable datos se define:

#define DATA_PORT      PORTB
#define TRIS_DATA_PORT TRISB


Mi intención debido a un problema de puertos y organización física es organizarlo de este modo:

Pin D0(lcd) PORBTbits.RB0
Pin D1(lcd) PORTBbits.RB1
Pin D2(lcd) PORTBbits.RB2
Pin D3(lcd) PORTBbits.RB3
Pin D4(lcd) PORTBbits.RB4
Pin D5(lcd) PORTBbits.RB5
Pin D6(lcd) PORTAbits.RA1
Pin D7(lcd) PORTAbits.RA0


y asignarlo a DATA_PORT.
He buscado en varios foros pero no he encontrado nada, he creado distintas estructuras pero no funciona, el compilador no las acepta.
« Última modificación: 20 de Enero de 2008, 11:29:33 por GAME »

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #1 en: 20 de Enero de 2008, 11:32:40 »
Busca la librería flex_lcd dentro del foro, que funciona de esa forma (permite definir cada pin de cualquier puerto como conexión de cualquier pin del LCD) y adáptala a tu compilador.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado GAME

  • PIC10
  • *
  • Mensajes: 9
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #2 en: 20 de Enero de 2008, 11:47:52 »
Siempre se puede modificar el codigo entero, mi idea que parecía simple al principio es asignar distintos bits a un byte, en este caso DATA_PORT. Es interesante aprender a modificar los bits sin tener que recurrir al ensamblador.
Por otra parte la libreria que me comentas utiliza 4 bits de datos en vez de 8.
« Última modificación: 20 de Enero de 2008, 11:53:53 por GAME »

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #3 en: 20 de Enero de 2008, 12:04:52 »
Te indico la librería para que estudies y cojas la filosofia de como está desarrollada para que lo apliques a la que tú tienes.

Efectivamente la mayoría de los LCD's pueden trabajar con 4 u 8 bits de datos.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado GAME

  • PIC10
  • *
  • Mensajes: 9
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #4 en: 20 de Enero de 2008, 12:12:30 »
Otra opcion es poner las patas de datos que no utilice a masa. Es possible ponerlas a traves del puerto del microprocesador o puede dar lugar a fallos?
Me explico:
Las patas RB0-->RB3 las utilizo como bus de datos y el resto las configuro en modo salida y las pongo a 0 logico.

Desconectado GAME

  • PIC10
  • *
  • Mensajes: 9
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #5 en: 20 de Enero de 2008, 14:11:22 »
He estado mirando distintos post y e encontrado que utilizando estructuras del tipo union se puede hacer pero no llego a entender como se podría asignarle los puertos.

Citar
typedef union {
   unsigned char byte;
   struct {
        unsigned bit0:1;
        unsigned bit1:1;
        unsigned bit2:1;
        unsigned bit3:1;
        unsigned bit4:1;
        unsigned bit5:1;
        unsigned bit6:1;
        unsigned bit7:1;
   };
}DataBinario;

void initlcd (void)
{   
DataBinario DATA;

DATA.byte = 0x20;

   DATA.bit0 = PORTBbits.RB0;
   DATA.bit1 = PORTBbits.RB1;
   DATA.bit2 = PORTBbits.RB2;
   DATA.bit3 = PORTBbits.RB3;
   DATA.bit4 = PORTBbits.RB4;
   DATA.bit5 = PORTBbits.RB5;
   DATA.bit6 = PORTAbits.RA1;
   DATA.bit7 = PORTAbits.RA2;

}

Tendría que asignar cada bit el puerto. Pero esto se haria en tiempo real?

« Última modificación: 20 de Enero de 2008, 14:41:13 por GAME »

Desconectado GAME

  • PIC10
  • *
  • Mensajes: 9
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #6 en: 20 de Enero de 2008, 19:53:16 »
Sigo sin conseguir crear el byte correctamente. Hay alguien que conozca como estructurar bien las uniones que me pueda explicar, es simple pero hay que seguir unas reglas que desconozco y hay muy poca información.
Un SaluDo

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #7 en: 20 de Enero de 2008, 20:44:31 »
Yo lo veo bien creado. Lo único que veo que esta mal es crear la variable:

DataBinario DATA;

Dentro de la función void initlcd (void), ya que esto la crea local a la función y no deja manejarla en el resto de las funciones.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado GAME

  • PIC10
  • *
  • Mensajes: 9
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #8 en: 20 de Enero de 2008, 21:31:22 »
Vaya tienes razon tantas horas delante del ordenador ha quemado mis neuronas  :shock: .
Ahun asi no lo consigo declarar como globales, creo que me estoy equivocando.
Seguire intentandolo
En cuanto lo consiga publicare el programa que creo que sera de gran utilidad

Un Saludo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: [C18] escritura de un byte con distintos puertos para LCD
« Respuesta #9 en: 22 de Enero de 2008, 10:03:14 »
He estado mirando distintos post y e encontrado que utilizando estructuras del tipo union se puede hacer pero no llego a entender como se podría asignarle los puertos.

Game, el problema que quieres resolver no es tan simple.  Lo que tu tienes que haces es editar el .h del micro que estés usando y luego recompilar la librería junto con su .asm asociado.

Como sugerencia, es más simple que hagas un #define de un pin y así te alivias de esto.

Por ejemplo

#define LCD_E  LATAbits.LATA0 

Con eso le dices al compilador que el enable es el pin LATA0 .

Si te fijas en la librería xlcd.h de microchip hacen algo similar.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything