TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: darck_khronos en 01 de Octubre de 2009, 23:41:46

Título: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 01 de Octubre de 2009, 23:41:46
Tengo un pequeño problemita quiero usar el Flex_lcd.h y direccionar todo al puerto A mas que al compilar me da Error

Código: C
  1. #include <18f2550.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock= 4000000)        
  4. #include <flex_lcd.h>
  5. #include <kbd_lib.c>
  6. #define use_portb_kbd TRUE  
  7. #define LCD_DB4   PIN_A4
  8. #define LCD_DB5   PIN_A5
  9. #define LCD_DB6   PIN_A6
  10. #define LCD_DB7   PIN_A7
  11. #define LCD_RS    PIN_A1
  12. #define LCD_RW    PIN_A2
  13. #define LCD_E     PIN_A0      
  14.  
  15. void main() {
  16.    char k;
  17.    int  x;
  18.          
  19.    lcd_init();
  20.    kbd_init();
  21.    port_b_pullups(TRUE);
  22.  
  23.    lcd_putc("\fListo...\n");
  24.                                    
  25.    while (TRUE) {
  26.       k=kbd_getc();
  27.       x=k-48;                             //Conversión numérica
  28.       if(k!=0){
  29.         if(k=='*')  
  30.           lcd_putc('\f');
  31.         else
  32.            lcd_putc(k);             //Imprime carácter
  33.            delay_ms(500);
  34.            printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
  35.            delay_ms(500);
  36.            printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
  37.            delay_ms(500);
  38.            printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
  39.            delay_ms(500);
  40.            lcd_putc("\fListo...\n");
  41.       }
  42.    }
  43. }
intente hacer esta simulacion con la lcd.c ya configurada para usar un teclado matricial de 4x4 pero al conectar la lcd y el teclado en el puerto b nadamas no me manda señales la Lcd de que reciba algun dato
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: MLO__ en 02 de Octubre de 2009, 00:29:31
Hola.

El PORTA no es de 8 bits.
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Suky en 02 de Octubre de 2009, 01:13:54
 :z) Aparte quieres usar el pin RA6 y tenes definido un cristal externo "XT" Como vas hacer  :shock:  :D


Saludos!
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 02 de Octubre de 2009, 10:50:39
ya cambie el codigo pero aun asi me sale lo siguiente
Codigo Pic modificado
Código: C
  1. #include <18f2550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay(clock= 4000000)

Respuesta Mplab
Código: [Seleccionar]
Executing: "C:\Program files\Picc\CCSC.exe" +FH "Master.c" +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 43(13,20): Undefined identifier   LCD_DB4
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 44(13,20): Undefined identifier   LCD_DB5
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 45(13,20): Undefined identifier   LCD_DB6
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 46(13,20): Undefined identifier   LCD_DB7
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 49(14,19): Undefined identifier   LCD_E
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 51(13,18): Undefined identifier   LCD_E
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 73(13,18): Undefined identifier   LCD_E
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 76(18,25): Undefined identifier   LCD_DB4
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 77(18,25): Undefined identifier   LCD_DB5
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 78(18,25): Undefined identifier   LCD_DB6
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 79(18,25): Undefined identifier   LCD_DB7
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 81(12,17): Undefined identifier   LCD_E
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 96(13,19): Undefined identifier   LCD_RW
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 111(12,18): Undefined identifier   LCD_RS
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 120(16,22): Undefined identifier   LCD_RS
*** Error 51 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 121(1,5): A numeric expression must appear here
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 127(12,18): Undefined identifier   LCD_RW
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 131(12,17): Undefined identifier   LCD_E
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 142(12,18): Undefined identifier   LCD_RS
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 145(12,18): Undefined identifier   LCD_RW
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 148(12,17): Undefined identifier   LCD_E
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 227(13,19): Undefined identifier   LCD_RS
*** Error 12 "C:\Program Files\PICC\drivers\flex_lcd.h" Line 229(12,18): Undefined identifier   LCD_RS
      23 Errors,  0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Fri Oct 02 08:50:08 2009

Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: MGLSOFT en 02 de Octubre de 2009, 11:13:13
Tengo un pequeño problemita quiero usar el Flex_lcd.h y direccionar todo al puerto A mas que al compilar me da Error

Código: C
  1. #include <18f2550.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock= 4000000)        
  4. #include <flex_lcd.h>
  5. #include <kbd_lib.c>
  6. #define use_portb_kbd TRUE  
  7. #define LCD_DB4   PIN_A4
  8. #define LCD_DB5   PIN_A5
  9. #define LCD_DB6   PIN_A6
  10. #define LCD_DB7   PIN_A7
  11. #define LCD_RS    PIN_A1
  12. #define LCD_RW    PIN_A2
  13. #define LCD_E     PIN_A0      
  14.  
  15. void main() {
  16.    char k;
  17.    int  x;
  18.          
  19.    lcd_init();
  20.    kbd_init();
  21.    port_b_pullups(TRUE);
  22.  
  23.    lcd_putc("\fListo...\n");
  24.                                    
  25.    while (TRUE) {
  26.       k=kbd_getc();
  27.       x=k-48;                             //Conversión numérica
  28.       if(k!=0){
  29.         if(k=='*')  
  30.           lcd_putc('\f');
  31.         else
  32.            lcd_putc(k);             //Imprime carácter
  33.            delay_ms(500);
  34.            printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
  35.            delay_ms(500);
  36.            printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
  37.            delay_ms(500);
  38.            printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
  39.            delay_ms(500);
  40.            lcd_putc("\fListo...\n");
  41.       }
  42.    }
  43. }
intente hacer esta simulacion con la lcd.c ya configurada para usar un teclado matricial de 4x4 pero al conectar la lcd y el teclado en el puerto b nadamas no me manda señales la Lcd de que reciba algun dato

El problema es que el define de la libreria debe ir despues de definir los pines a utilizar, por eso el compilador no los encuentra, aunque el programa si los tenga...

Deberia quedar asi:

Código: C
  1. #include <18f2550.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock= 4000000)        
  4.  
  5. #define use_portb_kbd TRUE  
  6. #define LCD_DB4   PIN_A4
  7. #define LCD_DB5   PIN_A5
  8. #define LCD_DB6   PIN_A6
  9. #define LCD_DB7   PIN_A7
  10. #define LCD_RS    PIN_A1
  11. #define LCD_RW    PIN_A2
  12. #define LCD_E     PIN_A0      
  13.  
  14. #include <flex_lcd.h>
  15. #include <kbd_lib.c>
  16.  
  17. void main() {
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: MLO__ en 02 de Octubre de 2009, 11:30:32
Hola.

Pues ahi el error (los errores) es porque no has definido los pines con los que va a trabajar la LCD  ;-)

La idea es que los definas en los pines que quieras que trabaje la LCD y que existan en el PIC.

Saludos
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Cryn en 02 de Octubre de 2009, 11:43:01
es por el orden, hiciste esto cualesquiera sean los pines elegidos:

include <flex_lcd.h>
#include <kbd_lib.c>
#define use_portb_kbd TRUE  
#define LCD_DB4   PIN_A4
#define LCD_DB5   PIN_A5
#define LCD_DB6   PIN_A6
#define LCD_DB7   PIN_A7
#define LCD_RS    PIN_A1
#define LCD_RW    PIN_A2
#define LCD_E     PIN_A0

y debe ser:

#define LCD_DB4   PIN_A4
#define LCD_DB5   PIN_A5
#define LCD_DB6   PIN_A6
#define LCD_DB7   PIN_A7
#define LCD_RS    PIN_A1
#define LCD_RW    PIN_A2
#define LCD_E     PIN_A0
include <flex_lcd.h>  //después de los defines, porque esos defines se usaran en la lib
#define use_portb_kbd TRUE  //lo mismo acá este, define seguramente se usará en la lib kbd,
                                        //y debe estar definido antes de incluir la libreria
#include <kbd_lib.c>



edit: uuy ya me ganaron :D
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 02 de Octubre de 2009, 12:34:58
es por el orden, hiciste esto cualesquiera sean los pines elegidos:

include <flex_lcd.h>
#include <kbd_lib.c>
#define use_portb_kbd TRUE  
#define LCD_DB4   PIN_A4
#define LCD_DB5   PIN_A5
#define LCD_DB6   PIN_A6
#define LCD_DB7   PIN_A7
#define LCD_RS    PIN_A1
#define LCD_RW    PIN_A2
#define LCD_E     PIN_A0

y debe ser:

#define LCD_DB4   PIN_A4
#define LCD_DB5   PIN_A5
#define LCD_DB6   PIN_A6
#define LCD_DB7   PIN_A7
#define LCD_RS    PIN_A1
#define LCD_RW    PIN_A2
#define LCD_E     PIN_A0
include <flex_lcd.h>  //después de los defines, porque esos defines se usaran en la lib
#define use_portb_kbd TRUE  //lo mismo acá este, define seguramente se usará en la lib kbd,
                                        //y debe estar definido antes de incluir la libreria
#include <kbd_lib.c>



edit: uuy ya me ganaron :D


ya hice el cambio que marcas y ya compila el detalle es que aun no me muestra nada

Código: C
  1. #include <18f2550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay(clock= 4000000)        
  4. #define LCD_DB4   PIN_A3
  5. #define LCD_DB5   PIN_A4
  6. #define LCD_DB6   PIN_A5
  7. #define LCD_DB7   PIN_A6
  8. #define LCD_RS    PIN_A1
  9. #define LCD_RW    PIN_A2
  10. #define LCD_E     PIN_A0
  11. #include <flex_lcd.h>
  12. #define use_portb_kbd TRUE
  13.                          
  14. #include <kbd_lib.c>    
  15.  
  16. void main() {
  17.    char k;
  18.    int  x;
  19.          
  20.    lcd_init();
  21.    kbd_init();
  22.    port_b_pullups(TRUE);
  23.  
  24.    lcd_putc("\fListo...\n");
  25.                                    
  26.    while (TRUE) {
  27.       k=kbd_getc();
  28.       x=k-48;                             //Conversión numérica
  29.       if(k!=0){
  30.         if(k=='*')  
  31.           lcd_putc('\f');
  32.         else
  33.            lcd_putc(k);             //Imprime carácter
  34.            delay_ms(500);
  35.            printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
  36.            delay_ms(500);
  37.            printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
  38.            delay_ms(500);
  39.            printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
  40.            delay_ms(500);
  41.            lcd_putc("\fListo...\n");
  42.       }
  43.    }
  44. }
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Nocturno en 02 de Octubre de 2009, 12:40:11
¿No será que RA4 es colector abierto y necesita pullup?
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Cryn en 02 de Octubre de 2009, 13:02:49
y si es pull-up tb funciona con lógica inversa, cierto?
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Nocturno en 02 de Octubre de 2009, 13:07:09
No, si le envías un 1 sale un 1 a través de la pullup, y si le envías un 0 sale un 0 a través del pin.
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 02 de Octubre de 2009, 17:41:23
Esto es lo que quiero realizar

(http://img180.imageshack.us/img180/998/51463526.png)
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Nocturno en 02 de Octubre de 2009, 18:05:23
Pero ahí no tienes conectados los pines del puerto A, sino los del B.
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: MGLSOFT en 02 de Octubre de 2009, 18:29:34
Yes!!
Yes!!! :D :D :D :D
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Suky en 02 de Octubre de 2009, 21:01:39
Que paso ahí!  :shock: No entiendo naa!  :D
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 02 de Octubre de 2009, 22:03:25
Que paso ahí!  :shock: No entiendo naa!  :D
ya realize un cambio al puerto b mas que con un teclado de 3x4 si me muestra lo que sucede pero con el de 4x4 nadamas no ahorita subo el codigo para que vean
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: Suky en 02 de Octubre de 2009, 22:06:44
Que paso ahí!  :shock: No entiendo naa!  :D
ya realize un cambio al puerto b mas que con un teclado de 3x4 si me muestra lo que sucede pero con el de 4x4 nadamas no ahorita subo el codigo para que vean

:z) Que quisiste explicar?
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: MLO__ en 03 de Octubre de 2009, 01:25:31
 :D :D :D

Creo que esto es lo que buscas.

Código: C#
  1. #include <16F876.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP
  3. #use delay(clock= 4000000)        
  4.  
  5. #include <lcd.c>
  6. #include <kbd.c>
  7.        
  8.  
  9. void main() {
  10.    char k;
  11.    int  x;
  12.          
  13.    lcd_init();
  14.    kbd_init();
  15.    port_b_pullups(TRUE);
  16.  
  17.    lcd_putc("\fListo...\n");
  18.                                    
  19.    while (TRUE) {
  20.       k=kbd_getc();
  21.       x=k-48;                             //Conversión numérica
  22.       if(k!=0){
  23.         if(k=='*')  
  24.           lcd_putc('\f');
  25.         else
  26.            lcd_putc(k);             //Imprime carácter
  27.            delay_ms(500);
  28.            printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
  29.            delay_ms(500);
  30.            printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII
  31.            delay_ms(500);
  32.            printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
  33.            delay_ms(500);
  34.            lcd_putc("\fListo...\n");
  35.       }
  36.    }
  37. }

(http://img30.imageshack.us/img30/5118/lcdkbd.png)

Saludos
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 03 de Octubre de 2009, 13:31:04
Si mas que lo que quiero es que funcione con un teclado de 4x4 que es el que tengo
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: MLO__ en 03 de Octubre de 2009, 13:40:44
Hola.

Pues solo es añadir el escaneo de la otra columna no? y cambiar la matriz.

Saludos
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 03 de Octubre de 2009, 13:43:23
por lo mismo agrege la kdb_lib que descargue de Pic Mania pero al parecer entra en conflicto
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 10 de Octubre de 2009, 20:38:19
ya hice algunos cambios a mi codigo y aun asi no logro hacer que se muestre algo en la Lcd

Código: C
  1. #include <18f4550.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP     //ordenes para el programador
  3. #use delay (clock=8000000)         //Fosc=4Mhz
  4. #define use_portd_lcd TRUE
  5. //#define use_portb_kbd TRUE
  6. #include <kbd2.c>               //libreria manejo keypad
  7. #include <lcd.c>               //libreria manejo lcd 8bits  
  8. //#use fast_io(B)
  9. char KEY;
  10. void main(void)
  11. {  
  12.    lcd_init();            //inicializa lcd
  13.    lcd_putc("   Electronica");
  14.    set_tris_b(0x00);
  15.    delay_ms(1000);         //...inicial
  16.    do{
  17.    port_b_pullups(true);
  18.    KEY=kbd_getc();
  19.    lcd_gotoxy(1,2);
  20.    printf(lcd_putc,"tecla %c",KEY);
  21.    }while(1);
  22. }

(http://img17.imageshack.us/img17/1236/lcdul.jpg)
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: MLO__ en 10 de Octubre de 2009, 21:51:17
El port_b_pullup(true) colocalo antes del kbd_init(). Asegúrate también que el puerto al que estas asignando en la librería, sea el mismo al cual estas conectando la LCD.

Saludos
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 10 de Octubre de 2009, 22:04:03
ya lo puse y tampoco nada

dejo adjunto tanto el codigo como las librerias que descargue y use sin exito

kbd_lib
kbd2
lcdx
lcd2
kbd4x4
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 11 de Octubre de 2009, 13:54:29
Incluso usando interrupciones nadamas no hay muestra en mi lcd

Código: [Seleccionar]
#include <18f4550.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP     //ordenes para el programador
#use delay (clock=8000000)         //Fosc=4Mhz
#define use_portd_lcd TRUE
#include <lcd.c>               //libreria manejo lcd 8bits
#define use_portb_kbd TRUE
#include <kbdd.c>//kbd_lib
#use fast_io(b)
#use fast_io(d)

int tecla;

  #int_rb
  void control_rb() {
  tecla = kbd_getc();
  printf(lcd_putc,"fPulso %c",tecla); }

  void main() {
  lcd_init(); // Inicializa el LCD
  port_b_pullups(TRUE);
  kbd_init(); // Inicializa el teclado matricial
  enable_interrupts(int_rb); // Habilita interrupión cambio de estado RB4:7
  enable_interrupts(global); // Habilita interrupciones globalmente
  printf(lcd_putc,"f");
  sleep();
 }
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: jhozate en 11 de Octubre de 2009, 14:27:28
pss mira q acabo de probar yo con la libreria de que esta en la web de don diego y me funciona bien. te dejo el codigo
Código: [Seleccionar]
#INCLUDE "KBD_LIB.C"
#include "flex_lcd.c"


CHAR TECLA;
void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   port_b_pullups(true);
   SET_TRIS_D(0);
   lcd_init();
   kbd_init();

   
   PRINTF(LCD_PUTC,"HOLA");
   for(;;)
   {
      TECLA=KBD_GETC();
      if(TECLA!=0)
         {PRINTF(LCD_PUTC,"%C",TECLA);}
   
   }
   

}
Título: Re: Problema al Usar Flex_Lcd.h
Publicado por: darck_khronos en 11 de Octubre de 2009, 14:32:11
Ya modifique el codigo y con este si funciono ahora estoy haciendo un menu
Código: C
  1. #include <18f4550.h>
  2. #fuses XT,NOWDT,NOPROTECT,NOLVP     //ordenes para el programador
  3. #use delay (clock=8000000)         //Fosc=4Mhz
  4. #include <kbd_lib.c> //libreria manejo TECLADO 4X4
  5. #include <lcd_2.c> //libreria manejo lcd 4 bits
  6. #use fast_io(B)
  7. #use fast_io(D)
  8.  
  9. void main() {
  10.    char k;
  11.    int  x;
  12.          
  13.    lcd_init();
  14.    kbd_init();
  15.    port_b_pullups(TRUE);
  16.  
  17.    lcd_putc("\fListo...\n");
  18.                                    
  19.    while (TRUE) {
  20.       k=kbd_getc();
  21.       x=k-48;                             //Conversión numérica
  22.       if(k!=0){
  23.         if(k=='*')  
  24.           lcd_putc('\f');
  25.         else
  26.            lcd_putc(k);             //Imprime carácter
  27.            delay_ms(500);
  28.            printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
  29.          
  30.       }
  31.    }
  32. }