Autor Tema: LCD no funciona con puerto B  (Leído 1488 veces)

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

Desconectado albertoie1

  • PIC10
  • *
  • Mensajes: 10
LCD no funciona con puerto B
« 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

Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
Re:LCD no funciona con puerto B
« Respuesta #1 en: 14 de Septiembre de 2016, 21:07:21 »
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

Desconectado albertoie1

  • PIC10
  • *
  • Mensajes: 10
LCD no funciona con puerto B
« Respuesta #2 en: 14 de Septiembre de 2016, 22:31:26 »
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

Desconectado Stban

  • PIC12
  • **
  • Mensajes: 78
Re:LCD no funciona con puerto B
« Respuesta #3 en: 15 de Septiembre de 2016, 09:35:05 »
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.

Desconectado albertoie1

  • PIC10
  • *
  • Mensajes: 10
Re:LCD no funciona con puerto B
« Respuesta #4 en: 15 de Septiembre de 2016, 11:23:08 »
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
       }
    }