Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

06/10/2012 #341


Buena la ayuda!
Saludos, tenia el mismo problema cuando migre del pic16f877 al pic18f4550, sin embargo, modificando y creando una copia del kbd.c logre poder poner a funcionar mi lcd con el teclado y funciona perfectamente.
Gracias por la ayuda!
08/10/2012 #342


apagar led en 30 segundos por medio de teclado
hola, que tal, estoy realizando un programa el cual cuando se tenga un 1 en el puerto E0 se encienda un led en puerto C0, y se tengan 30 segundos para apagarlo por medio de un teclado matricial al presionar '*', sino encendera todo el puerto C al terminar el tiempo, ademas de que muestra la cuenta en forma regresiva de los segundos y lo muestre en un LCD, bueno he realizado el programa pero no consigo que cuando yo presiono el '*' se detenga y apague el led. Espero y me puedan ayudar. dejo el codigo del circuito.

Código:
#include <16F887.h>
#fuses XT,NOWDT,NOPROTECT,PUT

#use delay(clock=4M)

#define use_portb_lcd TRUE
#include <lcd.c>
#include <kbd.c>

#use fast_io(C)
#use fast_io(E)

#byte portc = 0x07
#byte porte = 0x09

#bit BT1 = 0x09.0

int t,n,a=1,d=29;


void inicializar(void)
{
   setup_adc_ports(NO_ANALOGS);
   set_tris_e(0b11111111);
   set_tris_c(0b00000000);
   output_c(0x00);
   lcd_init();
   kbd_init();
}

void main(void)
{
   inicio:
   inicializar();
   for(;;)
   {
      if(BT1==1)
      {
         lcd_gotoxy(1,1);
         printf(lcd_putc,"ACTIVADO");
         output_c(0x1);
         do
         {
            t=kbd_getc(); 
            n=t-48;
            if(t!=0)
            {
               if(t=='*')
               {
                  output_C(0x00);
                  goto inicio;
               }
            }
            lcd_gotoxy(1,2);
            printf(lcd_putc,"Tiempo Desc: %d\r",d);
            delay_ms(1000);
            a++;
            d--;
         }
         while(a<=30);
         output_C(0xFF);
      }
   }
}
11/10/2012 #343


como ejecutar kbd durante 1 minuto
hola que tal, esta vez tengo una duda espero y me puedan ayudar, necesito ejecutar durante un minuto el kbd en ccs y si despues de no presionar nada realizar otra activadad, lo cual puede ser desde el encendio de un led, eso es lo menos imporatante sino que el kbd este activo nadamas 1 minuto. espero y me puedan ayudar.
23/10/2012 #344


Disculpen si retorno esto nuevamente, estoy haciendo un contador en bcd del 0 - 99 con compuertas ya que no puedo usar pic sin embargo tengo que acoplarle un teclado matricial 3x4 si alguien me ayuda que componente deberia agregarle?
23/10/2012 #345


Hola JonNArevalo

El teclado matricial 3x4 para qué en un contador BCD 0-99 ??
Cual es objetivo de ese teclado en el contador ??
Podrías dar más información ??

Qué simulador para circuitos electrónicos utilizas ??
Puedes dejarnos ver el contador BCD de 0-99??

saludos
a sus ordenes
17/12/2012 #346


como hacer esto leyendo y escribiendo en la memoria eeprom del pic 877A??

---------- Actualizado después de 32 minutos ----------

alguien me podria ayudar a hacer lo mismo pero leyendo y escribiendo en la memoria eeprom
xfavooor
no tengo idea de como leer y guardar los numero que yo ingreso
01/02/2013 #347


tengo el mimso problema quiero guardar en la eeprom

creo que el link abajo nos puede ayudar
http://picmania.garcia-cuervo.net/picc4.php#EENINTFUNC
20/03/2013 #348


conectar lcd y teclado a pic16f887
Hola a todos

Agradezco mucho que hubiesen abierto esta pregunta.

Lo que sucede es que estoy intentando utilizar un teclado 4x3 y un lcd de 16x2, el lcd lo estoy conectando al puerto d y el teclado al puertob. El lcd funciona excelente pero el teclado no. adjunto el codigo y la simulacion en proteus.
estoy utilizando un pic16f887 y en pic c.

Espero sus respuestas
Muchas gracias por la atencion
foroelectronica.rar
20/03/2013 #349
Moderador

Avatar de D@rkbytes

Separa el LCD del teclado modificando la librería LCD.C, y la pones dentro de la carpeta de tu proyecto.
Así podrías trabajar el teclado por el puerto B, y la pantalla por el puerto C u otro puerto.

Mencionas que usarás un PIC16F887, pero en la simulación usas un PIC16F876
20/03/2013 #350


Que pena adjunte la simulacion que no era. En el archivo lcd.c lo dejé tal cual para que trabaje por defecto en el puertod, mientras que en el archivo kbd.c para poder trabajar por el puertob "descomente" la siguiente linea
#define use_portb_kbd TRUE

Lo raro es que el lcd funciona, pero el teclado no.
Adjunto esta vez los archivos correctos
foroelectronica.rar
21/03/2013 #351
Moderador

Avatar de D@rkbytes

aier dijo: Ver Mensaje
el archivo lcd.c lo dejé tal cual para que trabaje por defecto en el puerto d, mientras que en el archivo kbd.c para poder trabajar por el puerto b "descomente" la siguiente linea
#define use_portb_kbd TRUE

Lo raro es que el lcd funciona, pero el teclado no.
Después de realizar algunas modificaciones al programa y al diseño, ya lo tengo funcionando.
Al parecer existe un bug con la instrucción port_b_pullups(true); al trabajar con el PIC16F887.
No activa las resistencias pull-up en el puerto B
Como no había usado esa instrucción del PCWHD Compiler con este PIC, no lo había notado.

Adjunto el proyecto con las modificaciones realizadas para activar las resistencias pull-up en el puerto B,
y trabajando con el oscilador interno a 8MHz.

Saludos.
Archivos Adjuntos
Tipo de Archivo: rar teclado 3x4 reparado.rar (10,4 KB (Kilobytes), 243 visitas)
21/03/2013 #352


D@rkbytes dijo: Ver Mensaje
Después de realizar algunas modificaciones al programa y al diseño, ya lo tengo funcionando.
Al parecer existe un bug con la instrucción port_b_pullups(true); al trabajar con el PIC16F887.
No activa las resistencias pull-up en el puerto B
Como no había usado esa instrucción del PCWHD Compiler con este PIC, no lo había notado.

Adjunto el proyecto con las modificaciones realizadas para activar las resistencias pull-up en el puerto B,
y trabajando con el oscilador interno a 8MHz.

Saludos.
jajaja D@rkbytes muchas muchas gracias, no se imagina lo mucho que me sirve esto, hace rato me estaba quebrando la cabeza solucionar esto, porque con otros pics me daba pero con el 16f887 no funcionaba.

Aprecio mucho el tiempo que te tomastes. Dios te pague

Pero??? Cuentame, como te distes cuenta de ese problema?
21/03/2013 #353
Moderador

Avatar de D@rkbytes

aier dijo: Ver Mensaje
Pero??? Cuéntame, como te diste cuenta de ese problema?
Simple, los teclados matriciales necesitan resistencias pull-up en las líneas de entrada para trabajar.
En el programa estaba la instrucción para habilitarlas por el puerto B, pero tal función no se cumplía.
A simple vista sobre la simulación el puerto B permanecía con los pines como entradas flotantes.
Y cuando se declara usar pull-ups, mantienen un estado alto.
Así qué, determiné que la instrucción port_x_pullups(x) no estaba funcionando.
Entonces la sustituí por el bit 7 (RBPU) del registro OPTION_REG, que es el que hace esa función.
Solamente así pude activar las resistencias pull-up en el puerto B.

Saludos.
27/03/2013 #354


D@rkbytes gracias por el tiempo que dedicastes a esto, ese problema al igual pasaba con el pic16f1937. le debo una
12/05/2013 #355


Problema con teclado 4x3 en ccs y proteus
Hola, e tenido problemas para simular un teclado 4x3 en el proteus (keypad phone) pues e estado investigando en varias paginas como por ejemplo que quite la instruccion de las resistenciasv pullup internas del pic y las ponga físicamente en el proteus, pero nada, muchos dicen que la librería del ccs esta mal, pero la verdad nose, e tratado de simularlo con el pic 16f887 y 16f877A pero no da resultado, a la hora de simularlo los pines del keypad están de color gris y pues no sucede nada, quisieran que me ayuden por favor.

Les adjuntare mi programa y el circuito del proteus.
Archivos Adjuntos
Tipo de Archivo: rar Teclado1.rar (40,6 KB (Kilobytes), 69 visitas)
13/05/2013 #356
Moderador

Avatar de D@rkbytes

mario1577 dijo: Ver Mensaje
Hola, e tenido problemas para simular un teclado 4x3 en el proteus (keypad phone) pues e estado investigando en varias paginas como por ejemplo que quite la instruccion de las resistenciasv pullup internas del pic y las ponga físicamente en el proteus, pero nada, muchos dicen que la librería del ccs esta mal, pero la verdad nose, e tratado de simularlo con el pic 16f887 y 16f877A pero no da resultado, a la hora de simularlo los pines del keypad están de color gris y pues no sucede nada, quisieran que me ayuden por favor.
El problema que tienes en tu diseño, es que usas resistencias limitadoras, en vez de resistencias pull-up.
Pero con las resistencias pull-up del puerto B, debe funcionar sin problemas.
Ahora, por lo que no funciona tu programa, es porque la definición de usar el puerto B para el teclado,
se hace en la librería KBD.C, no en el código fuente, y también tienes otros problemas en el código.

Éste sería tu programa corregido...
Código:
#include <16f887.h>
#fuses NOWDT,NOMCLR,NOLVP
#use delay(internal = 8000000) 
#include <lcd.c>   
#include "kbd.c"
#byte OPTION_REG = getenv("SFR:OPTION_REG")  // Referencia hacia el registro OPTION_REG
#bit  RBPU = OPTION_REG.7  // Referencia hacia el bit 7 de OPTION_REG (RBPU)

//#define use_porb_kbd TRUE      // Ésto se define en la librería kbd.c

void main()
{
  char k;
  int x;
  RBPU = 0;

  lcd_init();
  kbd_init();
  
  lcd_putc("\fPRESIONE TECLA\n");// Mensaje inicial 

   while(TRUE)
   {
      k = kbd_getc();   // faltaba agregar k =
      x= k - 48; // Conversion de ASCII a decimal
      
      if(k!=0)
      {
        if(k=='*')   // Se debe usar 'X' no "X" para comparar los caracteres
        lcd_putc("\fTecla=???");
        
        else
        printf(lcd_putc,"\fTecla=%u",x);
        
        delay_ms(1000);
        
      }
     
   }

}
Cómo verás, el tema de la activación de las resistencias pull-up en el PIC16F887, se trató unos posts atrás.
Y fue lo que añadí a tu programa, con eso ya debe funcionar, pero faltaría agregar algunos parámetros.
Por ejemplo, el ajuste del oscilador interno, para que trabaje a 8MHz de forma estable.
Sólo tendrías que agregar esto a tu programa en la parte del main...
setup_oscillator(OSC_8MHz|OSC_STATE_STABLE);

En la simulación elimina las resistencias, y conecta el teclado directamente.
Al montarlo físicamente si se pueden poner resistencias limitadoras.

Espero que con los cambios agregados, funcione tu programa.

Suerte.
13/05/2013 #357


gracias por responder, sigue sin funcionar lo mas raro de todo, los pines del lcd están de color gris, sera error de lo libreria lcd.c??

---------- Actualizado después de 31 minutos ----------

mmm no es eeror de la libreria, porque descargue un programa que aarreglaste enun anterior post y si funciona ese muy bien, no entiendo porque no funciona el mio si le agregaste las mismas cosas :s

---------- Actualizado después de 17 minutos ----------

Que raro ese programa que arreglaste en otro post lo copie y lo pegue en otro archivo nuevo que hice y ahora si no funciono, entonces el problema sera el compilador??
13/05/2013 #358
Moderador

Avatar de D@rkbytes

mario1577 dijo: Ver Mensaje
gracias por responder, sigue sin funcionar lo mas raro de todo, los pines del lcd están de color gris, sera error de lo libreria lcd.c??

---------- Actualizado después de 31 minutos ----------

mmm no es eeror de la libreria, porque descargue un programa que aarreglaste enun anterior post y si funciona ese muy bien, no entiendo porque no funciona el mio si le agregaste las mismas cosas :s

---------- Actualizado después de 17 minutos ----------

Que raro ese programa que arreglaste en otro post lo copie y lo pegue en otro archivo nuevo que hice y ahora si no funciono, entonces el problema sera el compilador??
D@rkbytes dijo: Ver Mensaje
por lo que no funciona tu programa, es porque la definición de usar el puerto B para el teclado,
se hace en la librería KBD.C, no en el código fuente.
¿Ya hiciste eso?

Existe una parte en la librería KBD.C que dice...
// Un-comment the following define to use port B (Descomente la siguiente definición para usar el puerto B)
// #define use_portb_kbd TRUE
<--- Quita las diagonales rojas para descomentar esta línea.
Si modificas esta librería desde el PCWHD Compiler, al compilar te saldrá un aviso.
Se te preguntará si quieres que la librería con los cambios, se guarde en la carpeta del programa.
Si aceptas, la librería modificada será copiada a la carpeta del programa principal.
Entonces ahora para poder usar esta librería, tienes que cambiar en tu programa la forma de incluirla.
En vez de escribir #include <kbd.c> ahora lo cambias por #include "kbd.c" y listo.
No omitas nada de lo que te mencione anteriormente.

Suerte.
13/05/2013 #359


Que descuidado soy no había leído eso, ya salio te agradezco mucho la ayuda, ya me tenia como loco este problema del teclado mucas gracias por todo (y)
03/06/2013 #360


Buenas, muchas gracias a todos por su tiempo.
No he podido avanzar porque no me lee el teclado matricial. El lcd funciona perfecto pero el teclado no, Planeo usarlo en el PortD el teclado y en el C el LCD.

Uso el CCS mas reciente.

Si pudieran darme una pista de como usar ambos por el portC se los agradeceria muchisimo.

Anexo envio codigo de la aplicacion y de la libreria KBD.

Me compila perfectamente, pero no me funciona.

Aqui anexo libreria KBD que estoy utilizando, muchas gracias
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.