Autor Tema: Problema MPLAB X - LCD  (Leído 6204 veces)

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

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Problema MPLAB X - LCD
« en: 18 de Noviembre de 2012, 17:40:10 »
Hola,

Tengo un problema con la librería XLCD de MPLAB XC8. En los ejemplos que he encontrado todos indican lo siguiente:

void DelayFor18TCY(void){
    Delay10TCYx(2);
}

A mi el Delay10TCYx(2); me da error.

Tengo todas estas librerías incluidas:

#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include "lib/xlcd.h"
#include <delays.h>

Creo que podría ser que el Delay10TCYx venga del C18 y en XC8 no lo reconozca, pero no estoy seguro de como usarlo en XC8 (Soy novato con el XC8, yo vengo del CCS).

Alguna ayuda!?

P.D.: el PIC es un PIC18F97J60.

Gracias.

Saludos;.
BitPIC

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema MPLAB X - LCD
« Respuesta #1 en: 18 de Noviembre de 2012, 18:58:08 »
Podes usar __delay_ms() , __delay_us o Nop() para crear tus demoras.


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

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Problema MPLAB X - LCD
« Respuesta #2 en: 19 de Noviembre de 2012, 10:08:34 »
Ok, perfecto.

Probare a ver que tal.

En cuanto a librerias, es suficiente con agregar xlcd.h o hay que poner todos los archivos de la carpeta xlcd?
Ahora la librería xlcd que uso es una modificación de la original para adaptarla al hardware.

Saludos
BitPIC

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Problema MPLAB X - LCD
« Respuesta #3 en: 24 de Noviembre de 2012, 18:03:26 »
Buenas,

Esto del Mplab X me esta costando.... acostumbrado a otros como CCS C que es escribir y a funcionar jejejeje pero quiero dominarlo así que llevo toda la tarde para hacer que funcione el LCD pero no hay manera.

Al menos he conseguido como cargar la libreria y que no me salgan errores.

El problema básicamente es que no hace nada. El programa lo único que debería hacer es mostrar HOLA en el LCD y luego hacer un bucle infinito encendiendo y parando un rele.

Lo de poner en ON y OFF el rele es basicamente para comprobar que aunque el display no funcione el programa en si si que funciona.

Si pongo solo la parte del rele funciona correctamente, pero si pongo la parte del display no va ni el display ni el rele.

creo que el problema esta en el "putrs("HOLA");" pero no estoy seguro del todo y me gustaría que un experto como vosotros me asesorase un poco.

El código es el que sigue:


#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include "xlcd.h"
#include <delays.h>

#define _XTAL_FREQ 25000000     //Frec. del osc. en Hz para calculo de delays

// PIC18F97J60 Configuration Bit Settings

// CONFIG1L
#pragma config DEBUG = ON      // Background debugger disabled; RB6 and RB7 configured as general purpose I/O pins
#pragma config WDTEN = OFF      // Watchdog Timer Enable bit (WDT disabled (control is placed on SWDTEN bit))
#pragma config XINST = OFF      // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode enabled)
#pragma config STVR = OFF       // Stack Overflow/Underflow Reset Enable bit (Reset on stack overflow/underflow enabled)

// CONFIG1H
#pragma config CP0 = OFF        // Code Protection bit (Program memory is not code-protected)

// CONFIG2L
#pragma config IESO = ON        // Two-Speed Start-up (Internal/External Oscillator Switchover) Control bit (Two-Speed Start-up enabled)
#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config FOSC2 = ON       // Default/Reset System Clock Select bit (Clock selected by FOSC1:FOSC0 as system clock is enabled when OSCCON<1:0> = 00)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor enabled)

// CONFIG2H
#pragma config WDTPS = 32768    // Watchdog Timer Postscaler Select bits (1:32768)

// CONFIG3L
#pragma config EASHFT = OFF     // External Address Bus Shift Enable bit (Address shifting enabled; address on external bus is offset to start at 000000h)
#pragma config MODE = MM        // External Memory Bus (Microcontroller mode, external bus disabled)
#pragma config BW = 8           // Data Bus Width Select bit (8-Bit Data Width mode)
#pragma config WAIT = OFF       // External Bus Wait Enable bit (Wait states for operations on external memory bus disabled)

// CONFIG3H
#pragma config CCP2MX = OFF      // ECCP2 MUX bit (ECCP2/P2A is multiplexed with RC1)
#pragma config ECCPMX = OFF      // ECCP MUX bit (ECCP1 outputs (P1B/P1C) are multiplexed with RE6 and RE5; ECCP3 outputs (P3B/P3C) are multiplexed with RE4 and RE3)
#pragma config ETHLED = OFF     // Ethernet LED Enable bit (RA0/RA1 are multiplexed with LEDA/LEDB when Ethernet module is enabled and function as I/O when Ethernet is disabled)

 
#define salida PORTGbits.RG7

// void DelayFor18TCY(void);
// void DelayPORXLCD(void);
// void DelayXLCD(void);


// Temporizador ms
void delay_ms(int mseconds){
    int count = 0;
    for(count=0; count<mseconds; count++){
        __delay_ms(1);
    }
    return;
}

// Temporizaciones libreria xlcd.h
void DelayFor18TCY(void){
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    NOP();
    return;
}
void DelayPORXLCD(void){
    delay_ms(15);
    //Delay1KTCYx(60); // Retardo de 15 ms
    return;
}
void DelayXLCD(void){
    delay_ms(5);
    //Delay1KTCYx (20); // Retardo de 5 ms
    return;
}

void main(void) {
    
    TRIS_DATA_PORT = 0;
    TRIS_RW = 0;
    TRIS_E = 0;
    TRIS_RS = 0;

    TRISG7 = 0;
    OSCCONbits.SCS0 = 0;
    OSCCONbits.SCS1 = 1;

    OpenXLCD(EIGHT_BIT & LINES_5X7);
    WriteCmdXLCD(0x06);
    WriteCmdXLCD(0x0c);
    putrsXLCD("HOLA");

    while(1){
        salida = 1;
        delay_ms(1000);
        salida = 0;
        delay_ms(1000);
    }
}

Que opinais? donde estoy metiendo la pata?

Gracias...
« Última modificación: 24 de Noviembre de 2012, 18:22:49 por bitpic »
BitPIC

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Problema MPLAB X - LCD
« Respuesta #4 en: 24 de Noviembre de 2012, 18:38:35 »
Perdon, mejor dicho, creo que el problema lo tengo con la libreria xlcd.h.

Cualquiera de estas instrucciones que hay antes del "while" hace que no funcione el rele, supongo que el programa se queda atascado en la librería.

OpenXLCD(EIGHT_BIT & LINES_5X7);
BusyXLCD();
WriteCmdXLCD(0x06);
BusyXLCD();
WriteCmdXLCD(0x0c);
putrsXLCD("HOLA");

Si comento estas instrucciones el rele (salida) si funciona correctamente... (que extresante se hace empezar con MPLAB X :D )
BitPIC

Desconectado compiler

  • PIC10
  • *
  • Mensajes: 2
Re: Problema MPLAB X - LCD
« Respuesta #5 en: 24 de Septiembre de 2013, 13:07:52 »
Hola
Yo tengo un problema muy parecido al de bitpic lo que pasa es que yo venia trabajando normalmente con el lcd y me funcionaba perfectamente pero una vez cambie el compilador del c18 v 3.37.01 por el xc8 como no me funciono bien después volví a  trabajar con el mismo c18 y ya no me volvió a funcionar el lcd y al hacerle un seguimiento al programa pasa que se me queda en la librería del lcd puntualmente en la librería DelayFor18TCY del lcd y me hace los 18 ciclos que necesito sale y vuelve y entra a la misma librería del DelayFor18TCY y hai se me queda indefinidamente y nunca sale de ahí por lo tanto no me ejecuta el resto del programa ya he probado de todo para solucionarlo y no he podido  :(

Si alguien me puede ayudar con este problema estaré muy agradecida la verdad necesito solucionar esto lo antes posible para poder seguir con mi programa

Gracias

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: Problema MPLAB X - LCD
« Respuesta #6 en: 24 de Septiembre de 2013, 14:08:13 »
Hola,

De esto hace ya algún tiempo y no recuerdo como acabo, pero diría que no me acabo de funcionar. Lo que hice fue hacerme mi propia libreria de LCD.

Te la adjunto por si te puede ser de ayuda.

Tendrás que configurar los pines que usas en tu PIC:

Código: [Seleccionar]
#define LCD_Data    PORTC
#define LCD_RS      PORTBbits.RB5
#define LCD_RW      PORTBbits.RB4
#define LCD_E       PORTBbits.RB3
#define backlight   PORTBbits.RB2

#define TRIS_LCD_Data    TRISC
#define TRIS_LCD_RS      TRISBbits.TRISB5
#define TRIS_LCD_RW      TRISBbits.TRISB4
#define TRIS_LCD_E       TRISBbits.TRISB3
#define TRIS_backlight   TRISBbits.TRISB2

BitPIC


 

anything