Autor Tema: Libreria programada "en paralelo" LCD dsPIC  (Leído 14578 veces)

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

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #30 en: 03 de Enero de 2007, 07:37:14 »
Hola Nocturno estoy intentando usar tu libreria y no me tira, necesito oblogatoriamente (tengo el hard diseñado) que los puertos sean:

#define DATA_PIN_7            LATBbits.LATB11   // (30)
#define DATA_PIN_6            LATBbits.LATB10   // (29)
#define DATA_PIN_5            LATBbits.LATB9   // (28)
#define DATA_PIN_4            LATBbits.LATB8   // (27)

#define TRIS_DATA_PIN_7       TRISBbits.TRISB11
#define TRIS_DATA_PIN_6       TRISBbits.TRISB10
#define TRIS_DATA_PIN_5       TRISBbits.TRISB9
#define TRIS_DATA_PIN_4       TRISBbits.TRISB8

// Defino los pines de control del LCD.

#define EN_LCD                LATBbits.LATB12      // Puerto para E (33)
#define RS_LCD                LATBbits.LATB13      // Puerto para RS (34)
#define RW_LCD                LATBbits.LATB14      // Puerto para RW (35)

#define TRIS_EN               TRISBbits.TRISB12   // TRIS para E
#define TRIS_RS               TRISBbits.TRISB13   // TRIS parar RS
#define TRIS_RW               TRISBbits.TRISB14   // TRIS parar RW

// Defino alimentación y backligth

#define POWER_LCD                 LATBbits.LATB7
#define BACK_LCD                  LATDbits.LATD0

#define TRIS_POWER_LCD            TRISBbits.TRISB7
#define TRIS_BACK_LCD            TRISDbits.TRISD0


He hecho esto:  en la librería

#define LCD_Filas         2   // Número de filas del LCD: 1,2
#define LCD_Columnas      20   // Número de columnas del LCD: 8,16,20
#define MAX_EVENTOS       50   // Tamaño máximo de la cola de trabajo
#define USA_TIMER_1            // Selección del timer a utilizar
#define USA_PUERTO_B         // Selección del puerto a utilizar
#define USA_PUERTO_ALTO         // Selección del byte a utilizar
#define MIPS             30   // Millones de instrucciones por segundo
//#define UsaUSART            // Se define sólo si vamos a usar la USART y el LCD a la vez
#define POWER_LCD                 LATBbits.LATB7
#define BACK_LCD                  LATDbits.LATD0

#define TRIS_POWER_LCD            TRISBbits.TRISB7
#define TRIS_BACK_LCD            TRISDbits.TRISD0

y esto en el main y no tira, que puede ser ¿?

#include <P30F6014A.H>
#define __30F6014A_H

/*_FOSCSEL(3);
_FOSC (194);
_FICD (223);*/
#include "LCD_HD44780.h"

_FOSC(CSW_FSCM_OFF & XT_PLL8);                    // Con oscilador 8 y PLL a 16, reloj a prueba de errores
_FWDT(WDT_OFF & WDTPSA_512 & WDTPSB_16);            // Enable WDT);                      
_FBORPOR(PBOR_ON & BORV_42 & PWRT_64 & MCLR_EN);   

   char yo[] = {'N','o','c','t','u','r','n','o',' ','-',' ','2','0','0','6',' '};
const elrebujito[] = {'e','l','r','e','b','u','j','i','t','o','.','e','s',' '};

int main(void){
unsigned char i;

/*CLKDIVbits.PLLPRE=10;
CLKDIVbits.PLLPOST=1;
PLLFBD=238;*/
ADPCFG = 0xffff;

POWER_LCD       = 0;
delay_ms(100);
POWER_LCD = 1;

LCD_Inicializacion();
LCD_Goto (1,1);
LCD_EscribeCadena(yo);
LCD_Goto (4,2);
LCD_EscribeConstante(elrebujito);
while(1);
}
Por favor si me puedes ayudar.....

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #31 en: 03 de Enero de 2007, 07:45:02 »
Por lo que veo la  MASCARA aun no has llegado a usarla ahora la implemento en tu librería

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #32 en: 03 de Enero de 2007, 09:45:07 »
¿Has puesto RW a 0?

Mi librería no lo gestiona, dando por hecho que está puesto a masa en el hardware.

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #33 en: 03 de Enero de 2007, 12:46:46 »
Lo he hecho esta es mi cabecera del .h:

#define LCD_Filas         2   // Número de filas del LCD: 1,2
#define LCD_Columnas      20   // Número de columnas del LCD: 8,16,20
#define MAX_EVENTOS       50   // Tamaño máximo de la cola de trabajo
#define USA_TIMER_1            // Selección del timer a utilizar
#define USA_PUERTO_B         // Selección del puerto a utilizar
#define USA_PUERTO_ALTO         // Selección del byte a utilizar
#define MIPS             30   // Millones de instrucciones por segundo
//#define UsaUSART            // Se define sólo si vamos a usar la USART y el LCD a la vez

#define BACK_LCD                  LATDbits.LATD0

#define TRIS_BACK_LCD            TRISDbits.TRISD0


//#define TRIS_LCD_RW              TRISBbits.TRISB14 

/************************************************************************/
/*                  DEFINICIONES GENERALES                     */
/************************************************************************/

#define SalidaLCD          1
#define SalidaUSART       0

#ifdef USA_PUERTO_B
   #define LCD            LATB               // Todo el puerto
   #define TRISx         TRISB               // Tris
   #define CheckPinEN()   asm("btsc.w _LATB,#%0"::"i"(PosEnable)) // Chequea bit Enable
   #define LeePuerto()      asm("mov.w LATB,w2")   // Carga puerto en w2
   #define EscribePuerto() asm ("mov.w w0,LATB")   // Vuelca contenido de w0 al puerto
   #define BajaPinEN()      asm ("bclr.w _LATB,#%0"::"i" (PosEnable)) // Baja el pin Enable
   #ifdef USA_PUERTO_ALTO
                #define POWER_LCD     LATBbits.LATB7
      #define   LCD_EN      LATBbits.LATB12       // Enable
      #define   LCD_RS      LATBbits.LATB13          // Selección Registro
      #define LCD_RW      LATBbits.LATB14
   #else
      #define   LCD_EN      LATBbits.LATB4           // Enable
      #define   LCD_RS      LATBbits.LATB5          // Selección Registro
      #define LCD_RW      LATBbits.LATB6
   #endif
#endif

Ademas he cambiado la inicializacion del puerto y la mascara

#ifdef USA_PUERTO_ALTO
   #define MASCARA         0x807F
   #define PosEnable      12
#else
   #define PosEnable      4
   #define MASCARA         0xFF80
#endif

y la el tris

TRISx = (TRISx & MASCARA);

y en el main

#include <P30F6014A.H>
#define __30F6014A_H

#include "LCD_HD44780.h"

_FOSC(CSW_FSCM_OFF & XT_PLL8);                    // Con oscilador 8 y PLL a 16, reloj a prueba de errores
_FWDT(WDT_OFF & WDTPSA_512 & WDTPSB_16);            // Enable WDT);                      
_FBORPOR(PBOR_ON & BORV_42 & PWRT_64 & MCLR_EN);   

   char yo[] = {'N','o','c','t','u','r','n','o',' ','-',' ','2','0','0','6',' '};
const elrebujito[] = {'e','l','r','e','b','u','j','i','t','o','.','e','s',' '};

int main(void){
unsigned char i;

ADPCFG = 0xffff;

POWER_LCD       = 0;
delay_ms(100);
POWER_LCD = 1;

LCD_Inicializacion();
LCD_Goto (1,1);
LCD_EscribeCadena(yo);
LCD_Goto (4,2);
LCD_EscribeConstante(elrebujito);
while(1);
}

Tengo un 30f6014 con oscilador de 8 y pll (como puedes ver de 8) en que fallo (perdona la paliza)
« Última modificación: 03 de Enero de 2007, 13:39:59 por zer0 »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #34 en: 03 de Enero de 2007, 13:36:06 »
Insisto, no veo por ningún sitio la asignación:
LCD_RW=0;

¿La tienes con seguridad?

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #35 en: 03 de Enero de 2007, 13:41:17 »
Empieza a funcionar  :-/

Gracias ahora ya puedo empezar a modificar para el retardo gracias Nocturno cuando lo tenga ok te lo paso.

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #36 en: 05 de Enero de 2007, 05:26:36 »
Hola Nocturno aqui el pesao catalan :)
Esto es correcto ¿?

   const caracter0[] = {0xE, 0x11, 0x11, 0x1F, 0x1B, 0x1B, 0x1F, 0x0};    // Candado cerrado
   
   LCDDefineCaracter(0, caracter0);
        LCDPrintChar(0);

He cambiado el nombre de alguna funcion para que se adapte a mi codigo,  esto no me va creo que la uso bien ¿verdad?

Gracias por tu ayuda.
« Última modificación: 05 de Enero de 2007, 06:25:29 por zer0 »

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #37 en: 05 de Enero de 2007, 09:01:09 »
Nocturno creo haber visto un error en la definicion de caracteres despues de definir uno se debe volver a setear la posicion de la DDRAM.
void SetCGRamAddr(unsigned char direccion) {
    direccion = (direccion * 8) & 0x3F | 0x40; //
    LCDSendCommand(direccion);
}

void SetDDRamAddr(unsigned char direccion) {
     direccion = direccion & 0x3F | 0x80; //
     LCDSendCommand(direccion);
}

void LCDDefineCaracter(unsigned  char posicion , const  *fuente) {
   char i;
   i=8;
    SetCGRamAddr(posicion);
     while(i != 0){
       LCDSendData(*fuente++);
      i--;
   }
   SetDDRamAddr(posicion);
}


// La definiré así

   const caracter0[] = {0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1F, 0xE, 0x0};    // U
   
   LCDDefineCaracter(0, caracter0);

Y se imprimirá con LCDPrintChar(0);

Ahora intentaré hacer lo de la pausa
« Última modificación: 05 de Enero de 2007, 12:00:52 por zer0 »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #38 en: 05 de Enero de 2007, 12:51:31 »
Lo utilicé en el ejemplo del QEIM definiendo caracteres a partir del nº 1:
LCD_DefineCaracter (8,c1);
LCD_DefineCaracter (16,c2);
LCD_DefineCaracter (24,c3);
LCD_DefineCaracter (32,c4);
LCD_DefineCaracter (40,c5);

e imprimiendo así:
printf ("%c",col+1);

donde "col" valía de 0 a 4.

Creo recordar que con el caracter nº 0 fallaba, pero no lo miré demasiado.

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #39 en: 11 de Febrero de 2007, 17:48:18 »
Hola Nocturno a ver que te parece logré acabarla, tenia un fallo muy tonto era que faltaba un break en el  switch del timer.....
Esta a falta de pulir los comentarios, poner unos define para los gráficos "personalizados"  pero el resto  todo ok, además uso el lcd waiting que te permite hacer aparecer un timepo una cosa en la pantalla sin afectar al programa principal. Muchas gracias por tu ayuda.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #40 en: 12 de Febrero de 2007, 02:39:19 »
Enhorabuena, me alegro que lo consiguieras

Desconectado zer0

  • PIC12
  • **
  • Mensajes: 57
Re: Libreria programada "en paralelo" LCD dsPIC
« Respuesta #41 en: 12 de Febrero de 2007, 05:25:57 »
Un detalle Nocturno, sabes algo de Bus Can lo necesito para acabar mi proyecto de final de carrera, estoy mirando  y probando las notas de aplicacion de Microchip y no me hacen nada. Muchisimas grácias.

He mirado el documento de Xelene también.




 

anything