TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: albertoie1 en 14 de Septiembre de 2016, 20:40:24
-
Bunas noches
Mi pregunta es la siguiente estoy manejando un LCD de 2x16, la programar el pin RW con RB1 no funciona pero si utilizo otro puerto si, lo que sucede es que necesito en algun punto del programa colocarlo a 1 para hacer lectura de la memoria del LCD.
el bus de datos esta a 4 bits, utilizo B4 a B7 para el bus de datos y programo en xc8
Gracias por la ayuda
-
fijate como lo seteas , no se que usas, voy a suponer librerias, setea en bits altos capas lo tenes en bajos, y aparte setea usal las salidas B
-
Buenas noches
El puerto esta configurado como salida pero esto solo sucede con le pin RW, el resto de pines funciona bien, solo cambio el pin RW de puerto para que funcione, otra cosa que sucede es que si conecto RW a tierra, si funciona asi el resto de pines esten conectados al puerto B.
Gracias por la ayuda
-
Hola,
en realidad el pin RW sirve para indicarle a la LCD en que modo usarlo, ya para lectura RW=1 ó como escritura RW=0, entonces cuando quieras desplegar mensajes en la LCD debes poner RW=0, pero si quieres leer los datos de la LCD poner RW=1; por eso cuando lo conectas a GND funciona pero como escritura.
Saludos.
-
Buenos dias
Sigo molestando con el control del LCD con el puerto B, les dejo unas imagenes de la simulaion y el codigo para ver si alguien encuentra algo incorrecto, ya lo probe en protoboard y pasa lo mismo.
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
// CONFIGURACION
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = ON // Data EEP ROM Memory Code Protection bit (Data EEPROM code-protected)
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = ON // Flash Program Memory Code Protection bit (All program memory code-protected)
#pragma config DEBUG = OFF // Pogramacion in circuit desahablitado
//********************************************************************
#define _XTAL_FREQ 16000000 // Indicamos a que frecuencia de reloj esta funcionando el micro para retardos
//DEFINE ETIQUETAS DE BITS
#define RS RB0 // RS DEL LCD
#define RW RB1 // RW DEL LCD
#define E RB2 // E DEL LCD
#define D4 RB4 // BUS DE DATOS DEL 4 AL 7
#define D5 RB5 // DEL LCD
#define D6 RB6 //
#define D7 RB7 //
//********FIN ETIQUETAS***************************************
//********VARIABLES GLOBALES**********************************
unsigned char CONUNO; //REGISTRO DE TEMPORAL PARA CONTROL LCD
unsigned char CONDOS; //REGISTRO DE CONTROL LCD 8 BITS
const char TABLA [][17]={ //const PARA ALMACENAR VARIABLE EN LA MEMORIA DE PROGRAMA
"TIEMPO : ", //0
"AD/SULF : ", //1
"RAPIDA : ", //2
"LENTA : ", //3
"REPOSO : ", //4
"MANUAL rpm", //5
"RAMPA rpm", //6
" ! ALERTA ! ", //7
"PALETA ATASCADA", //8
" FIN TIEMPO ", //9
"PULSAR BOTON [<]", //10
" AUTOMATICO ", //11
" ", //12
"MANUAL PULSA [<]", //13
"AUTO PULSA 3s[-]", //14
" ", //15
" ", //16
"EQUIFAR ING.LTDA", //17
"PBX 7596983 BTA.", //18
" TEST DE JARRAS ", //19
" S/N 140415 ", //20
};
//**************************
//FUNCIONES O SUBRRUTINAS DECLARACION
void RETARDO(int TE); //FUNCION RETARDO EN uM MULMTIPLO DE 2
void CONTROL(); //FUNCION CONFIGURACION DEL LCD
void DATO(const char *BYTE); //FUNCION DATOS PARA LCD CON PUNTERO
//PROGRAMA PRINCIPAL
void main(void)
{
TRISC=0; //CONFIGURA PUERTO SALIDAS
PORTC=0; //LIMPIA PUERTO
TRISB=0; //CONFIGURA PUERTO SALIDAS
PORTB=0; //LIMPIA PUERTO
OPTION_REGbits.nRBPU=0;//RESISTENCIA PULL UP DESCONECTADA
RC3=1; //PONE A 1 BIT
RC1=0; //PONE A 0 BIT
//LCD CONFIGURACION INICIAL
PORTB=71; //LIMPIA PUERTO
RETARDO(10200); //RETARDO ESTABILIZAR LCD
CONUNO=0b00000010; //CARGA DATO PARA CURSOR EN LA PRIMERA POSICION DEL LCD
CONTROL(); //FUNCION PARA CONFIGURACION LCD
CONUNO=0b00101000; //TRANSFERENCIA DE INFORMACION A 4 BITS
CONTROL(); //FUNCION PARA CONFIGURACION LCD
CONUNO=0b00001100; //ACTIVA DISPLAY,ACTIVA CURSOR Y NO HAY PARPADEO
CONTROL(); //FUNCION PARA CONFIGURACION LCD
CONUNO=0b00000110; //AVANCE DERECHA Y DYSPLAY QUIETO
CONTROL(); //FUNCION PARA CONFIGURACION LCD
while (1)
{
RC3=!RC3; //NIEGA ESTADO DEL BIT
RC1=!RC1; //NIEGA ESTADO DEL BIT
RETARDO(160); //LLAMA FUNCION
RC3=!RC3; //NIEGA ESTADO DEL BIT
RC1=!RC1; //NIEGA ESTADO DEL BIT
RETARDO(40); //LLAMA FUNCION
//DATOS INICALES LCD
CONUNO=0b10000000; //COLOCA CURSOR EN LA PRIMERA FILA DEL LCD
CONTROL(); //FUNCION PARA CONFIGURACION LCD
RETARDO(25); //RETARDO ESTABILIZAR LCD
DATO(TABLA[13]); //TOMA DATOS DE LA TABLA COMO CADENA
CONUNO=0b11000000; //COLOCA CURSOR EN LA SEGUNA FILA DEL LCD
CONTROL(); //FUNCION PARA CONFIGURACION LCD
RETARDO(25); //RETARDO ESTABILIZAR LCD
DATO(TABLA[17]);
}
}
//****FIN PROGRAMA PRINCIPAL*************************************
// FUNCIONES O SUBRRUTINAS COMANDOS
void RETARDO(int TE)
{
unsigned int TP;
for (TP = TE; TP> 0;TP--)
{
__delay_us(2);
}
}
void CONTROL()
{
PORTB=CONUNO; //MANDO LOS 4 BITS MAS SIGNIFICATIVOS
RW=0; //HABILITA ESCRITURA DEL LCD
RS=0; //SELECCIONA REGISTRO DE CONTROL
E=1; //HABILITA LCD
RETARDO(1800); //RETARDO PARA ESTABILIZAR LCD
E=0; //DESHABILITA LCD
CONUNO=(CONUNO << 4) | (CONUNO >> 4);//INTERCAMBIO DE NIBLES
PORTB=CONUNO; //MANDO LOS 4 BITS MENOS SIGNIFICATIVOS
RW=0; //HABILITA ESCRITURA DEL LCD
RS=0; //SELECCIONA REGISTRO DE CONTROL
E=1; //HABILITA LCD
RETARDO(25); //RETARDO ESTABILIZAR LCD
E=0; //DESHABILITA LCD
return;
}
void DATO(const char *BYTE)
{
while (*BYTE) //MIENRAS SEA DIFERENTE DE NULL CONTINUA
{
PORTB=*BYTE; //MANDO LOS 4 BITS MAS SIGNIFICATIVOS
RW=0; //HABILITA ESCRITURA DEL LCD
RS=1; //SELECCIONA REGISTRO DE DATOS
E=1; //HABILITA LCD
RETARDO(1800); //RETARDO PARA ESTABILIZAR LCD
E=0; //DESHABILITA LCD
CONUNO=*BYTE;
CONUNO=(CONUNO << 4) | (CONUNO >> 4);//INTERCAMBIO DE NIBLES
PORTB=CONUNO; //MANDO LOS 4 BITS MENOS SIGNIFICATIVOS
RW=0; //HABILITA ESCRITURA DEL LCD
RS=1; //SELECCIONA REGISTRO DE DATOS
E=1; //HABILITA LCD
RETARDO(25); //RETARDO ESTABILIZAR LCD
E=0; //DESHABILITA LCD
BYTE++; //INCREMETA POSICION DE MEMORIA PARA ACCEDER AL DATO
}
}