Problemas con LCD Y PIC18F4550

Hola a toda la comunidad, estoy realizando un proyecto con el PIC18F4550 y un LCD 16 X 2 el problema esta cuando se me juntan las palabras que pongo, no se borran las anteriores.

ejemplo:
al presionar el pulsador a0 y a1 deben de aparecer "posibles fallas:" pero se junta con las del inicio y no puedo lograr que funcione como quiero, dejo una imagen para que vean como queda, espero me puedan ayudar con este problema.


Código:
#include <18F4550.h>
#device ADC=8
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,VREGEN,NOPBADEN,WRTB
#use standard_io(B)
#define use_portB_lcd TRUE
#include <lcd.c>
#use standard_io(A)
#use standard_io(D)
#use standard_io(C)
 
void main()
{
lcd_init();
 delay_ms(100);
      printf(lcd_putc, "\f Iniciando.");
      delay_ms(400);
      
      printf(lcd_putc, "\f Iniciando.. ");
      delay_ms(400);
  
      printf(lcd_putc, "\f Iniciando...");
      delay_ms(400);
lcd_init();
output_low(pin_D1);
output_high(pin_D0);
while(true){
lcd_gotoxy(1,1);
lcd_putc("Estado:");
lcd_gotoxy(2,2);
lcd_putc("Excelente");


if(input(pin_a1)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Tarjeta LED");
delay_ms(200);
}
else {
output_high(pin_D0);
output_low(pin_D1);
output_low(pin_D2);
}
if(input(pin_a2)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Falla Display");
delay_ms(200);
}
if(input(pin_a3)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Falla DMX");
delay_ms(200);
}
if(input(pin_a4)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Motor Paneo");
delay_ms(200);
}
if(input(pin_a5)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Motor Tildeo");
delay_ms(200);
}
if(input(pin_a5)==1){
output_high(pin_D1);
output_low(pin_D0);
lcd_gotoxy(2,2);
lcd_putc("Falla LEDS");
delay_ms(200);
}
if((input(pin_a0) == 1) && (input(pin_a1) == 1)){
output_high(pin_D1);
output_high(pin_D2);
lcd_gotoxy(1,1);
lcd_putc("Posible Falla:");
lcd_gotoxy(2,2);
lcd_putc("Voltaje");

}
}
}
 

Adjuntos

  • ciruit0.jpg
    ciruit0.jpg
    161 KB · Visitas: 13
Última edición por un moderador:

D@rkbytes

Moderador
Posible solución sin estar limpiando la pantalla constantemente.
PHP:
#include <18F4550.h>
#fuses    NOFCMEN, NOVREGEN
#use delay(crystal = 20 MHz)

#define USE_PORTB_LCD    TRUE
#include <lcd.c>


void main (void)
{
    lcd_init();
    printf(lcd_putc, "\fIniciando");
    
    for(int8 x=10;x<17;x++)
    {
        lcd_gotoxy(x,1);
        lcd_putc(".");
        delay_ms(400);
    }
    
    delay_ms(500);

    output_low(pin_D1);
    output_high(pin_D0);
    
    lcd_putc("\fEstado:\nExcelente");
    
    while(true)
    {
        if(input(PIN_A1))
        {
            output_high(pin_D1);
            output_low(pin_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Tarjeta LED     ");
            while(input(PIN_A1));
        }
        else
        {
            output_high(PIN_D0);
            output_low(PIN_D1);
            output_low(PIN_D2);
        }
        
        if(input(PIN_A2))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla Display   ");
            while(input(PIN_A2));
        }
        
        if(input(PIN_A3))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla DMX       ");
            while(input(PIN_A3));
        }
        
        if(input(PIN_A4))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Paneo     ");
            while(input(PIN_A4));
        }
        
        if(input(PIN_A5))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Tildeo    ");
            while(input(PIN_A5));
        }
        
        if(input(PIN_C0))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla LEDS      ");
            while(input(PIN_C0));
        }
        
        if(input(PIN_A0) && input(PIN_A1))
        {
            output_high(PIN_D1);
            output_high(PIN_D2);
            lcd_gotoxy(1,1);
            lcd_putc("Posible Falla:  ");
            lcd_gotoxy(1,2);
            lcd_putc("Voltaje         ");
            while(input(PIN_A0));
        }
    }
}
 
Última edición:
Posible solución sin estar limpiando la pantalla constantemente.
PHP:
#include <18F4550.h>
#fuses    NOFCMEN, NOVREGEN
#use delay(crystal = 20 MHz)

#define USE_PORTB_LCD    TRUE
#include <lcd.c>


void main (void)
{
    lcd_init();
    printf(lcd_putc, "\fIniciando");
    
    for(int8 x=10;x<17;x++)
    {
        lcd_gotoxy(x,1);
        lcd_putc(".");
        delay_ms(400);
    }
    
    delay_ms(500);

    output_low(pin_D1);
    output_high(pin_D0);
    
    lcd_putc("\fEstado:\nExcelente");
    
    while(true)
    {
        if(input(PIN_A1))
        {
            output_high(pin_D1);
            output_low(pin_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Tarjeta LED     ");
            while(input(PIN_A1));
        }
        else
        {
            output_high(PIN_D0);
            output_low(PIN_D1);
            output_low(PIN_D2);
        }
        
        if(input(PIN_A2))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla Display   ");
            while(input(PIN_A2));
        }
        
        if(input(PIN_A3))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla DMX       ");
            while(input(PIN_A3));
        }
        
        if(input(PIN_A4))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Paneo     ");
            while(input(PIN_A4));
        }
        
        if(input(PIN_A5))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Motor Tildeo    ");
            while(input(PIN_A5));
        }
        
        if(input(PIN_C0))
        {
            output_high(PIN_D1);
            output_low(PIN_D0);
            lcd_gotoxy(1,2);
            lcd_putc("Falla LEDS      ");
            while(input(PIN_C0));
        }
        
        if(input(PIN_A0) && input(PIN_A1))
        {
            output_high(PIN_D1);
            output_high(PIN_D2);
            lcd_gotoxy(1,1);
            lcd_putc("Posible Falla:  ");
            lcd_gotoxy(1,2);
            lcd_putc("Voltaje         ");
            while(input(PIN_A0));
        }
    }
}

tienes razon con eso de no limpiar el lcd constantemente pero en tu codigo no me muestra nada el lcd
 

D@rkbytes

Moderador
Armé el circuito tan solo para comprobar el funcionamiento de la pantalla y sí se ve.
Seguramente tienes algo mal conectado.

DSC02025.jpg
 
Armé el circuito tan solo para comprobar el funcionamiento de la pantalla y sí se ve.
Seguramente tienes algo mal conectado.

si ya funciona gracias ya no se juntan las palabras el problema esta en la siguiente sentencia if

if(input(PIN_A0) && input(PIN_A1))
{
output_high(PIN_D1);
output_high(PIN_D2);
lcd_gotoxy(1,1);
lcd_putc("Posible Falla: ");
lcd_gotoxy(1,2);
lcd_putc("Voltaje ");
while(input(PIN_A0));
}

ya que no me muestra lo que asigne si no lo del pulsador a1 lo de la "tarjeta led" no me muestra lo de "posible falla"
 
Arriba