LCD 16X2 con PIC16F628A
Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 13

Tema: LCD 16X2 con PIC16F628A

  1. #1
    Usuario
    Mensajes
    28
    Gracias
    0
    Agradecido 4 veces en 3 posts

    LCD 16X2 con PIC16F628A

    Hace tiempo actué sobre un Display de 16x2, con un PIC16F877A y haciendo una simplificación del código al máximo para mostrar con un 16F628A, simplemente "PRUEBA", por este...

    Pero no consigo ni compilar el código me envía a la librería del LCD, como si estuviera mal, supongo que tendrá que ver por el cambio del microcontrolador pero no tengo ni idea por que.

    ¿Alguna idea?

    Código:
    #include <16F628A.h>
    
    #FUSES NOWDT, XT,
    
    #use delay(clock=4000000)
    
    
    #include <lcd.c>
    
    void main()
    {
    lcd_init();
    
    printf(lcd_putc, "\prueba");
    
    }
    Gracias!

  2. #2
    Usuario Avatar de PicTrance
    Ubicación
    Puebla, México
    Mensajes
    298
    Gracias
    339
    Agradecido 142 veces en 78 posts
    Hola

    Claro si pudieras poner el código de la librería "lcd.c" y a lo mejor y se te puede ayudar

    ya que así el código se ve bonito, correcto y no puedo hacer nada.

    osea el problema es la librería, ¿ya modificaste los puertos de E/S de la libreria?
    Estoy seguro que el problema es allí !!!!!

    Saludos!
    Si el proyecto tiene mal olor es de Química, Si echa humo negro es de Mecánica, Si es verde o se retuerce es de Bioingenieria Y si no funciona es de Electrónica.. ... no es mia la frase, pero me gusto. Que la corriente te lo premie sino que te lo queme visita mi canal en youtube
    Si le das click Aquí te doy 10 pesos ┌П┐(•_-)┌П┐

  3. #3
    Usuario
    Mensajes
    28
    Gracias
    0
    Agradecido 4 veces en 3 posts
    Hola muy buenas, gracias por contestar tan rápido.
    Lo que no entiendo es que con el otro PIC el 16F877A, me funcionó perfecto...

    Aquí tienes el codigo de la librería que lleva el programa que utilizo el "PCW - CCS"

    Código:
    ///////////////////////////////////////////////////////////////////////////
    ////                             LCDD.C                                ////
    ////                 Driver for common LCD modules                     ////
    ////                                                                   ////
    ////  lcd_init()   Must be called before any other function.           ////
    ////                                                                   ////
    ////  lcd_putc(c)  Will display c on the next position of the LCD.     ////
    ////                     The following have special meaning:           ////
    ////                      \f  Clear display                            ////
    ////                      \n  Go to start of second line               ////
    ////                      \b  Move back one position                   ////
    ////                                                                   ////
    ////  lcd_gotoxy(x,y) Set write position on LCD (upper left is 1,1)    ////
    ////                                                                   ////
    ////  lcd_getc(x,y)   Returns character at position x,y on LCD         ////
    ////                                                                   ////
    ///////////////////////////////////////////////////////////////////////////
    ////        (C) Copyright 1996,2003 Custom Computer Services           ////
    //// This source code may only be used by licensed users of the CCS C  ////
    //// compiler.  This source code may only be distributed to other      ////
    //// licensed users of the CCS C compiler.  No other use, reproduction ////
    //// or distribution is permitted without written permission.          ////
    //// Derivative programs created using this software in object code    ////
    //// form are not restricted in any way.                               ////
    ///////////////////////////////////////////////////////////////////////////
    
    // As defined in the following structure the pin connection is as follows:
    //     D0  enable
    //     D1  rs
    //     D2  rw
    //     D4  D4
    //     D5  D5
    //     D6  D6
    //     D7  D7
    //
    //   LCD pins D0-D3 are not used and PIC D3 is not used.
    
    // Un-comment the following define to use port B
    // #define use_portb_lcd TRUE
    
    
    struct lcd_pin_map {                 // This structure is overlayed
               BOOLEAN enable;           // on to an I/O port to gain
               BOOLEAN rs;               // access to the LCD pins.
               BOOLEAN rw;               // The bits are allocated from
               BOOLEAN unused;           // low order up.  ENABLE will
               int     data : 4;         // be pin B0.
            } lcd;
    
    
    #if defined use_portb_lcd
       #locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
       #define set_tris_lcd(x) set_tris_b(x)
    #else
       #locate lcd = getenv("sfr:PORTD")    // This puts the entire structure over the port
       #define set_tris_lcd(x) set_tris_d(x)
    #endif
    
    
    #define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines
    #define lcd_line_two 0x40    // LCD RAM address for the second line
    
    
    BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
                                 // These bytes need to be sent to the LCD
                                 // to start it up.
    
    
                                 // The following are used for setting
                                 // the I/O port direction register.
    
    struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
    struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in
    
    
    
    BYTE lcd_read_byte() {
          BYTE low,high;
          set_tris_lcd(LCD_READ);
          lcd.rw = 1;
          delay_cycles(1);
          lcd.enable = 1;
          delay_cycles(1);
          high = lcd.data;
          lcd.enable = 0;
          delay_cycles(1);
          lcd.enable = 1;
          delay_us(1);
          low = lcd.data;
          lcd.enable = 0;
          set_tris_lcd(LCD_WRITE);
          return( (high<<4) | low);
    }
    
    
    void lcd_send_nibble( BYTE n ) {
          lcd.data = n;
          delay_cycles(1);
          lcd.enable = 1;
          delay_us(2);
          lcd.enable = 0;
    }
    
    
    void lcd_send_byte( BYTE address, BYTE n ) {
    
          lcd.rs = 0;
          while ( bit_test(lcd_read_byte(),7) ) ;
          lcd.rs = address;
          delay_cycles(1);
          lcd.rw = 0;
          delay_cycles(1);
          lcd.enable = 0;
          lcd_send_nibble(n >> 4);
          lcd_send_nibble(n & 0xf);
    }
    
    
    void lcd_init() {
        BYTE i;
        set_tris_lcd(LCD_WRITE);
        lcd.rs = 0;
        lcd.rw = 0;
        lcd.enable = 0;
        delay_ms(15);
        for(i=1;i<=3;++i) {
           lcd_send_nibble(3);
           delay_ms(5);
        }
        lcd_send_nibble(2);
        for(i=0;i<=3;++i)
           lcd_send_byte(0,LCD_INIT_STRING[i]);
    }
    
    
    void lcd_gotoxy( BYTE x, BYTE y) {
       BYTE address;
    
       if(y!=1)
         address=lcd_line_two;
       else
         address=0;
       address+=x-1;
       lcd_send_byte(0,0x80|address);
    }
    
    void lcd_putc( char c) {
       switch (c) {
         case '\f'   : lcd_send_byte(0,1);
                       delay_ms(2);
                                               break;
         case '\n'   : lcd_gotoxy(1,2);        break;
         case '\b'   : lcd_send_byte(0,0x10);  break;
         default     : lcd_send_byte(1,c);     break;
       }
    }
    
    char lcd_getc( BYTE x, BYTE y) {
       char value;
    
        lcd_gotoxy(x,y);
        while ( bit_test(lcd_read_byte(),7) ); // wait until busy flag is low
        lcd.rs=1;
        value = lcd_read_byte();
        lcd.rs=0;
        return(value);
    }
    Si no me equivoco pone que se debe conectar al PortB, mi conexión física es la siguiente:
    E -> RB7
    RS -> RB6
    R/W -> RB5

    DB4 -> RB3
    DB5 -> RB2
    DB6 -> RB1
    DB7 -> RB0

    Aunque de momento no es tan importante el conexionado físico, por que por el momento no compila.
    Última edición por mimeta; 29/10/2011 a las 17:52

  4. #4
    Usuario Avatar de PicTrance
    Ubicación
    Puebla, México
    Mensajes
    298
    Gracias
    339
    Agradecido 142 veces en 78 posts
    Hola,

    el problema es la librería, ¿ya leíste esta parte de la librería?

    Código:
    // As defined in the following structure the pin connection is as follows:
    //     D0  enable
    //     D1  rs
    //     D2  rw
    //     D4  D4
    //     D5  D5
    //     D6  D6
    //     D7  D7
    ////   LCD pins D0-D3 are not used and PIC D3 is not used.
    
    // Un-comment the following define to use port B 
    // #define use_portb_lcd TRUE

    allí esta la solución

    saludos
    Si el proyecto tiene mal olor es de Química, Si echa humo negro es de Mecánica, Si es verde o se retuerce es de Bioingenieria Y si no funciona es de Electrónica.. ... no es mia la frase, pero me gusto. Que la corriente te lo premie sino que te lo queme visita mi canal en youtube
    Si le das click Aquí te doy 10 pesos ┌П┐(•_-)┌П┐

  5. #5
    Usuario
    Mensajes
    761
    Gracias
    434
    Agradecido 685 veces en 334 posts
    Aunque de momento no es tan importante el conexionado físico, por que por el momento no compila.
    Código:
    #if defined use_portb_lcd
       #locate lcd = getenv("sfr:PORTB")    // This puts the entire structure over the port
       #define set_tris_lcd(x) set_tris_b(x)
    #else
       #locate lcd = getenv("sfr:PORTD")    // This puts the entire structure over the port
       #define set_tris_lcd(x) set_tris_d(x)
    #endif
    Hola Mimeta,

    Acá hay una referencia ademas del puerto B, también al puerto D, pero el PIC16F628 solo tiene puertos A y B.

    Saludos.

  6. #6
    Usuario
    Mensajes
    28
    Gracias
    0
    Agradecido 4 veces en 3 posts
    Hola muy buenas
    No sabía que tendría que modificar la librería que incluye el CCS, pensaba que sería una biblioteca generalizada...

    No tengo ni idea que partes debería de modificar o eliminar.

  7. #7
    Usuario
    Mensajes
    761
    Gracias
    434
    Agradecido 685 veces en 334 posts
    No tengo ni idea que partes debería de modificar o eliminar.
    La verdad Mimeta, yo estoy más perdido que tú. Lo que recuerdo son las estructuras de las sentencias condicionales IF - ELSE - ENDIF, que son similares en los diversos lenguajes de programación.

    Esperemos que alguien mas pueda ayudarte.

    Saludos.

  8. #8
    Usuario Avatar de PicTrance
    Ubicación
    Puebla, México
    Mensajes
    298
    Gracias
    339
    Agradecido 142 veces en 78 posts
    Hola!

    Emmmm.. como veo que no pueden(ni leer lo que les dije ) pos ya les ayudo,

    oye mimeta solo descomenta esta parte del codigo.


    Código:
    //#define use_portb_lcd TRUE
    y ya!!!!!!!!!!!!!!

    con eso puedes usar el portb del pic para el lcd

    Saludos!!

    nota: esa libreria ya esta vieja, hay una en la que te deja elejir que pin del pic
    quieres para cada pin del lcd
    Última edición por PicTrance; 29/10/2011 a las 21:01
    Si el proyecto tiene mal olor es de Química, Si echa humo negro es de Mecánica, Si es verde o se retuerce es de Bioingenieria Y si no funciona es de Electrónica.. ... no es mia la frase, pero me gusto. Que la corriente te lo premie sino que te lo queme visita mi canal en youtube
    Si le das click Aquí te doy 10 pesos ┌П┐(•_-)┌П┐

  9. #9
    Usuario Avatar de PicTrance
    Ubicación
    Puebla, México
    Mensajes
    298
    Gracias
    339
    Agradecido 142 veces en 78 posts
    otra cosa con tu conexion asi como la tienes nunca va a funcionar

    debes hacerlo así:

    Código:
    //     B0 enable
    //     B1  rs
    //     B2  rw
    //     B4  D4
    //     B5  D5
    //     B6  D6
     //   B7  D7
    okas eso seria todo de mi parte.

    Saludos.


    Nota: hay que aprender a leer ingles, jajajajaja los regaño como si yo supiera mucho inglish
    Si el proyecto tiene mal olor es de Química, Si echa humo negro es de Mecánica, Si es verde o se retuerce es de Bioingenieria Y si no funciona es de Electrónica.. ... no es mia la frase, pero me gusto. Que la corriente te lo premie sino que te lo queme visita mi canal en youtube
    Si le das click Aquí te doy 10 pesos ┌П┐(•_-)┌П┐

  10. #10
    Usuario
    Mensajes
    28
    Gracias
    0
    Agradecido 4 veces en 3 posts
    Cita Iniciado por PicTrance Ver mensaje
    nota: esa libreria ya esta vieja, hay una en la que te deja elejir que pin del pic
    quieres para cada pin del lcd
    Sabes por donde está, por que agradecería no tener que desoldar la placa que hice

    Cita Iniciado por PicTrance Ver mensaje
    Emmmm.. como veo que no pueden(ni leer lo que les dije ) pos ya les ayudo
    Disculpa es que mi dominio del ingles es cuanto menos nefasto y aun me asusta un poco, por lo novato que soy, el tema de las librerías, mis códigos se basan en cosas muy simples...


    [EDIT]: Tenía algo de tiempo y he decidido no esperarme y desoldar y soldar los pines de la forma:
    - RB0: E
    - RB1: RS
    - RB2: RW
    - RB4: D4
    - RB5: D5
    - RB6: D6
    - RB7: D7
    He compilado y quemado el código en el PIC16F628A con la pequeña modificación...
    Aparentemente el Hardware a funcionado correctamente, pero en vez de mostrar en el LCD "prueba" no muestra nada, he ajustado el contraste para ver los caracteres y únicamente se pueden observar los 16 primeros huecos oscuros y nada más...

    Alguna idea?
    Última edición por mimeta; 29/10/2011 a las 23:38

Página 1 de 2 12 ÚltimoÚltimo

Temas similares

  1. [C18] Manejo LCD 16x2 Alfanumerico
    Por Yesbond en el foro Electrónica Digital
    Respuestas: 81
    Último mensaje: 29/12/2012, 06:02
  2. [C18] Manejo LCD 16x2 Alfanumerico
    Por Yesbond en el foro Electrónica Digital
    Respuestas: 10
    Último mensaje: 03/10/2012, 15:40
  3. Puertos Microcontrolador (PIC16F628A)
    Por Maxjmp en el foro Electrónica Digital
    Respuestas: 3
    Último mensaje: 04/11/2011, 03:30
  4. [C18] Manejo LCD 16x2 Alfanumerico
    Por Yesbond en el foro Electrónica Digital
    Respuestas: 2
    Último mensaje: 25/10/2010, 02:40

Los visitantes encuentran esta página buscando por:

lcd

16f628A

libreria lcd ccs

PIC16F628A

ccs lcd 16x2

lcd 16f628a ccs

16f628a lcd ccs

#define lcd_data_port getenv(sfr:portd)

lcd con 16f628a

lcd pic 16f628a ccs

lcd en ccs

lcd con pic 16f628a

libreria lcd 16x2 ccs

LIBRERIA LCD 16X2

lcd pic16f628a

these definitions only need to be modified for baseline pics

como soldar una lcd 16x2

pic16f628a y lcd

libreria lcd 16x2 en pic ccs

programa en c lcd 16 x 2

lcd 16x2 humo

lcd con pic16f628a

PIC 16F628A

16f628

codigo para pic 16f628a para display 16 x 2

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37