Hola mi nombre es fernando gomez de Merida-Venezuela, soy relativamente nuevo en el foro, siempre leo cosas pero esta es la primera vez que escribo sobre un problema.
estoy programando un pic18f4550 para que muestre un mensaje en una pantalla lcd16x4 pero muestra caracteres raros que no son, en proteus simula bien pero en el protoboard nada.
la libreria de la lcd es una libreria que utilize para una pantalla lcd16x2, el programa esta bien porque conecte la de 16x2 y muesta, pero cuando coloco la de 16x4 nada...
ahora me parace que es la programacion de la inicializacion de la pantalla...(entiendo esto por driver, corrijame si estoy mal)
hay un dato importante, la pantalla de 16x4 tiene por detras 3 nucles o 3 micros y la de 16x2 solo tiene dos, por esto me parece que es el codigo de inicializacion.
ya busque varios datasheet de pantallas 16x4 y la inicializacion es lamisma que para las de 16x2
podrian ayudarme, o alguien podria =)?? gracias
adjunto lo que estoy simulando en proteus con el codigo de la LCD
nota:(estoy programando en MPLABX y copilando con XC8)
este es el .H
/*
* File: LCD_4bits.h
* Author: fernandojose
*
* Created on 2 de noviembre de 2015, 20:38
*/
#ifndef LCD_4BITS_H
#define LCD_4BITS_H
#define _XTAL_FREQ 2000000UL //definicion del cristal para poder utilizar los delays
#define LCD_RS LD2
#define LCD_EN LD3
#define LCD_DATA LATD
#define LCD_RS_TRIS TRISD2
#define LCD_EN_TRIS TRISD3
#define LCD_DATA_TRIS TRISD
void LCD_init(void);
void LCD_write_4bits(char, char);
void LCD_write(char,char);
void LCD_clear(void);
void LCD_putc(char);
void LCD_puts(const char *);
void LCD_gotoxy(char,char);
#endif /* LCD_4BITS_H */
y aqui va el .C
#include <xc.h>
#include "LCD_4bits.h"
void LCD_init(void)
{
LCD_RS_TRIS = 0;
LCD_EN_TRIS = 0;
LCD_DATA_TRIS &= 0x0F;
LCD_RS = 0;
LCD_EN = 0;
__delay_ms(15);
LCD_write_4bits(0, 0x30);
__delay_ms(5);
LCD_write_4bits(0, 0x30);
__delay_ms(1);
LCD_write_4bits(0, 0x30);
LCD_write_4bits(0, 0x20);
LCD_write(0, 0x28);
LCD_write(0, 0x0C);
LCD_write(0, 0x01);
LCD_write(0, 0x06);
}
void LCD_write_4bits(char t, char c)
{
LCD_DATA = c;
LCD_RS = t;
LCD_EN = 1;
LCD_EN = 0;
__delay_us(400);
}
void LCD_write(char t, char c)
{
LCD_DATA = c;
LCD_RS = t;
LCD_EN = 1;
LCD_EN = 0;
__delay_us(400);
LCD_DATA = c << 4;
LCD_RS = t;
LCD_EN = 1;
LCD_EN = 0;
__delay_us(400);
}
void LCD_clear(void)
{
LCD_write(0, 0x01);
__delay_ms(5);
}
void LCD_putc(char c)
{
LCD_write(1, c);
}
void LCD_puts(const char *s)
{
char i = 0;
while(s != '\0')
{
LCD_write(1,s);
i++;
}
}
void LCD_gotoxy(char x, char y)
{
if(y < 2)
LCD_write(0, 0x80 | x + 0x40*y);
else
LCD_write(0, 0x80 | x + 0x10 + 0x40*(y - 2));
}
- Adjunto no válido -