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

Temas similares

03/06/2013 #361
Moderador

Avatar de D@rkbytes

josexremix65 dijo: Ver Mensaje
Si pudieran darme una pista de como usar ambos por el portC se los agradecería muchisimo.
El teclado matricial utiliza resistencias pull-up, y cómo el puerto C no tiene, hay que ponerlas externas.
Por eso es mejor usar el teclado en el puerto B, que si tiene, y así se evita ponerlas externamente.

Adjunto un ejemplo utilizando la pantalla y el teclado por el puerto C.
Las librerías lcd.c y kbd.c ya están modificadas para trabajar por el puerto C,
y vienen dentro de la carpeta del proyecto, usa éstas, y nota que en el código se hace referencia a ellas de forma diferente.

Saludos.
04/06/2013 #362


SOS GROSO sabelo Funciona perfecto, aquí puedo dar positivos? jaja
05/06/2013 #363


Problema teclado 4x4
Buenas, tengo un problema con la simulacion de teclado en proteus, me funciona bien pero a veces deja de funcionar sin razon aparente, puse las resistencias externas y uso el teclado por el puerto D, tanto pantalla como teclado. Adjunto envio HEX y codigo en CCS, queria saber si a ustedes tambien les da ese error. OJO habilitada RB0INT asi que ponganlo a vcc.

Para la ID 3 la clave es 1234. Alguien que lo simule porfavor y me diga si el error es de la aplicacion o del proteus.
Archivos Adjuntos
Tipo de Archivo: txt CLAVES.txt (8,6 KB (Kilobytes), 255 visitas)
Tipo de Archivo: rar HEX.rar (4,2 KB (Kilobytes), 235 visitas)
05/06/2013 #364


Hola josexremix65

Pero. . . Qué dices de los que te menciona D@rkbytes en su menaje #370 ??

Creo que sería conveniente que adjuntaras el archivo que se genera con tu simulador para circuitos electrónicos.
Comprímelo con WinZip o WinRar y Adjúntalo aquí.

saludos
a sus ordenes
20/06/2013 #365


Teclado matricial 4x4 y LCD
Estoy en el montaje de un proyecto de teclado matricial 4x4, que debe mostrar en un LCD las teclas pulsadas de manera secuencial; es decir, si marco 1,3 A, #, 2, se deben mostrar en el LCD esas teclas consecutivamente, no tengo activada una rutina que cuando llegue al final de la primera linea, pase a la segunda linea, eso lo realizare una vez solvente la situacion que planteo en el siguiente parrafo. El montaje en el Proteus funciona correctamente, cada número que marco se ve en el LCD.

El asunto que presenta problemas está cuando realizo el montaje en el Protoboard y ejecuto el programa. Aqui únicamente muestra el primer número que marco y luego se queda colgado; es decir, no muestra en el LCD ninguna de las sub-secuentes teclas que pulso. Adicionalmente, ninguna de las cuatro teclas de la última fila se muestran en el LCD.

EL PIC que utilizo es el PIC 16F870, el teclado es el matricial de 4x4 y el LCD es el 1602A, que es compatible con el LM016L, el XT es de 4Mhz.

He realizado las pruebas de los componentes de manera individual y funcionan bien, esto con la finalidad de comprobar que los componentes estan bien. Me he fijado al momento de compilar el programa y el FOSC es XT Oscilator, WDTE esta Disable.

Anexo el .HEX y el .DSN del proyecto. Agradezco cualquier ayuda al respecto.
P.D.: Anexe las otras librerias que estoy utilizando y una foto del proyecto
Imágenes Adjuntas
Tipo de Archivo: jpg Teclado 4x4 -LCD.jpg (130,9 KB (Kilobytes), 139 visitas)
Archivos Adjuntos
Tipo de Archivo: rar Teclado 4x4.rar (18,4 KB (Kilobytes), 298 visitas)
Tipo de Archivo: rar MPASM Suite.rar (8,9 KB (Kilobytes), 110 visitas)
20/06/2013 #366
Moderador

Avatar de D@rkbytes

agcopa dijo: Ver Mensaje
El asunto que presenta problemas está cuando realizo el montaje en el Protoboard y ejecuto el programa. Aqui únicamente muestra el primer número que marco y luego se queda colgado; es decir, no muestra en el LCD ninguna de las sub-secuentes teclas que pulso. Adicionalmente, ninguna de las cuatro teclas de la última fila se muestran en el LCD.

EL PIC que utilizo es el PIC 16F870, el teclado es el matricial de 4x4 y el LCD es el 1602A, que es compatible con el LM016L, el XT es de 4Mhz.
Prueba ahora con los cambios realizados, pero monta todo tal cual y está en el esquema.
Verás que ya funciona físicamente.

Nota:
Algunas de esas librerías necesitan modificaciones para que funcionen.

Saludos.
Imágenes Adjuntas
Tipo de Archivo: jpg 16F870 Teclado 4x4 SCH.jpg (112,6 KB (Kilobytes), 147 visitas)
Archivos Adjuntos
Tipo de Archivo: zip 16F870 Teclado 4x4.zip (26,0 KB (Kilobytes), 208 visitas)
21/06/2013 #367


Teclado matricial 4x4 y LCD
Gracias...

Voy a montar el esquema enviado y te aviso.

Tú indicas que algunas de las librerías deben ser modificadas. El sistema completo que me envías yo lo probé en Proteus y funciona tal cual están las librerías que me anexaste, yo la revise y son las originales del libro.

Pregunto: Debo modificarlas según lo que indicas para que funcionen en el Protoboard?? por ejemplo colocar los Macros Bank0 y Bank1 para adecuar el Status Register y acondicionar las selecciones de los bancos dentro de cada una de las librerías??

Te pregunto porque yo ejecute la simulación en Proteus y tal cual esta; es decir, tal cual lo que me envías, funciono.
21/06/2013 #368
Moderador

Avatar de D@rkbytes

agcopa dijo: Ver Mensaje
Gracias...

Voy a montar el esquema enviado y te aviso.

Tú indicas que algunas de las librerías deben ser modificadas. El sistema completo que me envías yo lo probé en Proteus y funciona tal cual están las librerías que me anexaste, yo la revise y son las originales del libro.

Pregunto: Debo modificarlas según lo que indicas para que funcionen en el Protoboard?? por ejemplo colocar los Macros Bank0 y Bank1 para adecuar el Status Register y acondicionar las selecciones de los bancos dentro de cada una de las librerías??

Te pregunto porque yo ejecute la simulación en Proteus y tal cual esta; es decir, tal cual lo que me envías, funciono.
El proyecto que subí ya tiene los cambios necesarios en las librerías para que funcione físicamente.
Si lo deseas puedes agregar los macros para el cambio de banco, eso se usa por comodidad.
Lo que debes tener en cuenta, es que cada vez que realices algún cambio, hagas pruebas.
Porque muchas veces por estar modificando un programa éste deja de funcionar si no se hace bien.

Saludos.
25/06/2013 #369


Teclado matricial 4x4 y LCD
Revise con todo el detalle la información que me envía, y me di cuenta de algo muy importante que no estaba tomando en consideración al momento de realizar la compilación en el MPLAB, el asunto relacionado a cierto bit de configuración, el _LVP_OFF

Los bits de configuración pueden ser programados (puestos a 0) o dejados sin programar (quedan a 1), con objeto de seleccionar varias configuraciones del microcontrolador: tipo de oscilador, protección o no del programa, uso ó no del watchdog, etc.

Por lo que es especialmente importante cargar correctamente esos bits durante la programación para conseguir que el microcontrolador pueda funcionar de la manera correcta.

En el caso que comento:

LVP: Low Voltage In-Circuit Serial Programming Enable bit

1 = RB3/PGM pin has PGM function, low voltage programming enabled
0 = RB3 is digital I/O, HV on MCLR must be used for programming

Si, el LVP está configurado a “1”, entonces RB3 está configurado para low-voltage programming y se debe tener un pull-down en el PIN, mientras que el programa este funcionando en el circuito. En el caso en que LVP es “0” RB3 se libera para funciones de entrada y salida normales.

Adicionalmente, encontré en la web este artículo que me pareció interesante y toca este tema en la programación de 16F87x.

http://www.piclist.com/techref/micro...877/hvprog.htm

Gracias por el apoyo recibido en este tema, incluí la línea de configuración dentro de mi código y funciona perfectamente.
25/08/2013 #370


LCD y Teclado matricial 4x4 en puerto d
Buenas, tengo problemas con utilizar el teclado en el puerto d, y el display si me funciona (estoy utilizando el pic18f4550), trate de modificar la librería del kbd.c y de ponerle resistencias al puerto d como han a aconsejado en temas anteriores, pero debo de estarme pasando algún paso o tengo algún error que no me he dado cuenta. El teclado en la simulación en el proteus solo se mantiene activas sus terminales pero no reacciona al presionar los botones.

Les agradeciera mucho su ayuda y me expliquen cual es el error y como hacerlo funcionar.

Les adjunto la simulación, librerías y el main (Compilador CCS)

Gracias
Archivos Adjuntos
Tipo de Archivo: rar Teclado.rar (41,0 KB (Kilobytes), 243 visitas)
25/08/2013 #371
Moderador

Avatar de D@rkbytes

GPZ23 dijo: Ver Mensaje
Buenas, tengo problemas con utilizar el teclado en el puerto d, y el display si me funciona (estoy utilizando el pic18f4550), trate de modificar la librería del kbd.c y de ponerle resistencias al puerto d como han a aconsejado en temas anteriores, pero debo de estarme pasando algún paso o tengo algún error que no me he dado cuenta. El teclado en la simulación en el proteus solo se mantiene activas sus terminales pero no reacciona al presionar los botones.

Les agradeciera mucho su ayuda y me expliquen cual es el error y como hacerlo funcionar.

Les adjunto la simulación, librerías y el main (Compilador CCS)

Gracias
Para trabajar el teclado y la pantalla por el puerto D no tienes que realizar modificaciones a las librerías.

Prueba usando esta parte del programa...
Código:
   while(TRUE){
      k=kbd_getc();
      if(k != 0){
      printf(lcd_putc,"\fTecla=%c",k);
      delay_ms(50);
      }
   }
Saludos.
25/08/2013 #372


Muchas gracias por responder y por tu tiempo, si funcionó.

Gracias, tus aportaciones son excelentes
30/08/2013 #373


Estimado D@rkbytes

Cual puede ser la razón por lo que ocurre lo siguiente:

Hay veces que al iniciar el sistema (PIC – LCD – Teclado 4x4); es decir, energizar el circuito, y enviar al LCD un mensaje de inicio, el cual consiste en:

Muestra_Mensaje_Tres
call LCD_Borra ; Borra la pantalla, memoria DDRAM, cursor a inicio linea 1
call LCD_Linea1 ; Cursor a principio de la linea 1
movlw MensajeTeclee4 ; Apuntador de mensaje "**** X.Y.Z **** "
call LCD_Mensaje ; Escribe en display el mensaje "**** X.Y.Z. ****"
call LCD_Linea2 ; Cursor al principio de la Línea 2.
movlw MensajeTeclee5 ; Apuntador de mensaje "LAB. DIGITALES"
call LCD_Mensaje ; Escribe en display el mensaje " LAB. DIGITALES"
call Retardo_2s ; durante XX seg. quedara el mensaje en el display
call LCD_Borra ; Borra la pantalla, memoria DDRAM, cursor a inicio linea 1
call LCD_Linea1 ; Cursor a principio de la linea 1
return

únicamente se muestra el mensaje de LCD_Linea1 y el LCD_Linea 2 no se muestra.

Que estoy haciendo para solventaar lo indicado anteriormente:

Pulso el botón de reset del PIC por un segundo aproximadamente y entonces se muestran los dos mensajes. Esto ocurre de manera no constante, hay veces que si ocurre como hay veces que no.

Que pienso que puede ocurrir:

Pudiese ser que la señal de habilitación y desabilitación del ENABLE en LCD dure muy corto tiempo.

Como tengo escrita esa rutina:
movwf LCD_BusDatos ; PORTB <= WREG Envía el dato al módulo LCD #ENVIA EL DATO#
bsf LCD_PinEnable ; PORTA RA2=1 (E) Activa el LCD mediante un pequeño pulso
bcf LCD_PinEnable ; PORTA RA2=0 (E) Desactiva el LCD.

Cual pienso podría ser la solución:

bsf LCD_PinEnable ; PORTA RA2=1 (E) Activa el LCD mediante un pequeño pulso
movwf LCD_BusDatos ; PORTB <= WREG Envía el dato al módulo LCD #ENVIA EL DATO#
bcf LCD_PinEnable ; PORTA RA2=0 (E) Desactiva el LCD.
call Retardo_5ms ; retardo de 5 ms.

Entendiendo que el ciclo de escritura de DATA al LCD incluye el flanco de bajada de la señal de ENABLE, que entiendo es cuando se pasa la información al bus de datos.

Piensas que esto pudiera apuntar a la solución?

Probé la rutina siguiente:

movf LCD_Dato,W ; WREG <=LCD_Dato(ALTO Y BAJO) Recupera el dato a enviar. #ENVIA EL DATO#
bsf LCD_PinEnable ; PORTA RA2=1 (E) Activa el LCD mediante un pequeño pulso
movwf LCD_BusDatos ; PORTB <= WREG Envía el dato al módulo LCD #ENVIA EL DATO#
bcf LCD_PinEnable ; PORTA RA2=0 (E) Desactiva el LCD.
call Retardo_50micros ; Retardo que asegure la escritura en el LCD de un comando o dato

funciona perfectamente... Se elimino lo que te comentaba anteriormente.

Saludos y gracias nuevamente.
14/09/2013 #374


Buenos días
Quería realizar una consulta en relación a cierto carácter que se presenta en el LCD 16x2 cuando recibe del Hiperterminal un <CR><LF>

Para mayor detalle anexo el link del video en donde se puede observar detalladamente cual es el carácter al que hago referencia:

También pueden ubicar el video escribiendo:
Proyecto RFID Control de Acceso, Video Comunicacion Serial PIC-PC, PIC 16F870 ASM

El carácter también se puede observar en el archivo adjunto CARACTER LCD 16x2

En el video se ve que el carácter se presenta en el LCD cuando presiono la tecla enter en el teclado a través del Hiperterminal, entiendo que esta acción envía dos comandos consecutivos el <CR><LF>, que son colocar el curso al principio de la segunda línea, con el salto de línea.

Como logre solventar que este carácter no se presentara ?

En la ventana de Propiedades del Hiperterminal, en la configuración de las propiedades de esa conexión, en la parte correspondiente a ASCII SENDING, desmarque la opción: SEND LINE ENDS WITH LINE FEEDS y ahora se ve en el Hiperteminal que hace el <CR> pero no el <LF> ya que el curso se posiciona nuevamente al inicio de la misma línea; es decir, no hace el salto de línea. Con esto ya no se presenta ese carácter.

Ver Hyperterminal en el archivo adjunto.

Hasta aquí todo va funcionando bien....

El tema se presenta ahora cuando no utilizo el Hiperterminal y estoy realizando el código del sistema en Visual Basic 10, en donde envió el comando vbCrLf y aqui se presenta nuevamente el carácter en el LCD, he probado con vbCr únicamente y también se presenta el carácter.

Como hago en VB10 para que eso no ocurra, es decir; como simular en VB10 lo que hice en el Hiperterminal con tan solo desmarcar la opción SEND LINE ENDS WITH LINE FEEDS y el carácter no se presente en el LCD

Pueden observar el resultado de la comunicacion trabajando perfectamente con el Hiperterminal, en el siguiente enlace:

http://www.youtube.com/watch?feature...&v=LpoEMuU_Tnw
Imágenes Adjuntas
Tipo de Archivo: jpg Caracter LCD 16x2.JPG (4,3 KB (Kilobytes), 20 visitas)
Tipo de Archivo: jpg Hyperterminal.JPG (23,3 KB (Kilobytes), 9 visitas)
30/10/2013 #375

Avatar de mendek

Buenas tardes, bueno pues otro problema, esta vez con imprimir algo en la LCD conectada al puerto B junto con un teclado matricial, lo que tengo es lo siguiente:
Código:
   #include <16f887.h>
   #device adc=10
   #use delay(clock=20M)
   #fuses HS, NOWDT
   
   #include <lcd.c>        // Se incluye el driver de la pantalla LCD
   #include <kbd.c>        // Se incluye el driver del teclado matricial
   #include <stdlib.h>     // Se incluye para generar número aleatorio
   
   #define LCD_ENABLE_PIN  PIN_B0                                    
   #define LCD_RS_PIN      PIN_B1                                   
   #define LCD_RW_PIN      PIN_B2                                    
   #define LCD_DATA4       PIN_B4                                   
   #define LCD_DATA5       PIN_B5                                 
   #define LCD_DATA6       PIN_B6                             
   #define LCD_DATA7       PIN_B7 
   
   #use fast_io(a)         // Modo de gestión del puerto A
   #use fast_io(b)         // Modo de gestión del puerto B
   #use fast_io(c)         // Modo de gestión del puerto C
   
   #bit adif=0x0C.6        // Bandera de fin de conversión A/D
   #bit tmr1if=0x0C.0      // Bandera de desbordamiento del TMR1
////////////////////////////////////////////////////////////////////////////////
   main(){
 
   int16 random;            // Número aleatorio, asegura el encendido aleatorio 
                           // de los LEDs en el dummy shot 
   char tecla;              // Valor de la tecla oprimida
   int16 numero[3];         // Arreglo de 4 variables para alojar los diferentes 
                           // datos numéricos
   int8 k;                 // Contador de teclas oprimidas
   
   delay_ms(300);          // Retardo de 300 ms para permitir que se establezca
                           // bien el voltaje de alimentación de la pantalla LCD
   lcd_init();             // Se inicializa la pantalla
   
   lcd_putc("   DUMMY SHOT   ");    // Se imprime el mensaje en la línea 1
   lcd_gotoxy(1,2);     // Se ubica el cursor al principio de la linea 2
   delay_ms(1000);       // Retardo para visualizar "   DUMMY SHOT   "
   lcd_putc("Random=");       // Se imprime el mensaje para la inserción de
                              // un número aleatorio
   port_b_pullups(true);   // Se hab. las res. elev. del puerto B
Como ven ya intenté declarar los pines por los cuales controlar la LCD (puerto B), pero no entiendo por que no imprime por ahí, sigue imprimiendo por el puerto D, espero me puedan aclarar esta duda por favor , desde ya gracias
31/10/2013 #376
Moderador

Avatar de D@rkbytes

mendek dijo: Ver Mensaje
Buenas tardes, bueno pues otro problema, esta vez con imprimir algo en la LCD conectada al puerto B junto con un teclado matricial.
No entiendo por que no imprime por ahí, sigue imprimiendo por el puerto D, espero me puedan aclarar esta duda por favor , desde ya gracias
En realidad es muy fácil cambiar de puerto.
Antes también estaba confundido sobre como hacerlo, pero pronto descubrí la forma.

Mira este pequeño ejemplo adjunto para que entiendas como se hace sin modificar la librería LCD.C.

Saludos.
Archivos Adjuntos
Tipo de Archivo: rar 16F887 LCD 16x2 Puerto B.rar (39,3 KB (Kilobytes), 142 visitas)
31/10/2013 #377

Avatar de mendek

Pues sigo sin poder lograrlo D@rkbytes, y de ante mano gracias por la ayuda que siempre me brindas , ya hice algo como en el código, pero nada, adjunto mi circuito haber si tú pudieras encontrar la falla, estuvimos con mi profesor y aunque el también es de los buenos, no pudimos
Archivos Adjuntos
Tipo de Archivo: rar Dummy Shot.rar (339,7 KB (Kilobytes), 36 visitas)
31/10/2013 #378
Moderador

Avatar de D@rkbytes

mendek dijo: Ver Mensaje
Pues sigo sin poder lograrlo D@rkbytes, y de ante mano gracias por la ayuda que siempre me brindas , ya hice algo como en el código, pero nada, adjunto mi circuito haber si tú pudieras encontrar la falla, estuvimos con mi profesor y aunque el también es de los buenos, no pudimos
Si hay alguna fallas en tu programa, y me supuse que tendrías problemas cuando quisieras usar el teclado por el puerto B.
Mira el motivo y la solución en el post #360
Y para que no se te haga complicado ver las funciones de ese programa, adjunto un ejemplo básico de uso, controlando la pantalla y el teclado matricial 3x4 por el puerto B.

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar 16F887 LCD 16x2 con Teclado 3x4 por el puerto B.rar (46,7 KB (Kilobytes), 142 visitas)
04/01/2014 #379


Hola,
Mi problema es que no logro activar las resistencias pull-up de las entradas del puerto B para el manejo de un teclado matricial con un pic16f883. Lo que trate fue adaptar el proyecto de un post muy anterior de D@rkbytes que esta en assembler y que funcionaba perfecto con un pic16f887.
Gracias por la ayuda que me pueda dar.
04/01/2014 #380
Moderador

Avatar de D@rkbytes

josegabrielbh dijo: Ver Mensaje
Hola,
Mi problema es que no logro activar las resistencias pull-up de las entradas del puerto B para el manejo de un teclado matricial con un pic16f883. Lo que trate fue adaptar el proyecto de un post muy anterior de D@rkbytes que esta en assembler y que funcionaba perfecto con un pic16f887.
Gracias por la ayuda que me pueda dar.
¿Podrías mencionar el número del post para saber de que programa se trata?
Si el programa lo estás escribiendo en ensamblador tienes que configurar el bit 7 del registro OPTION_REG en 0
Ese bit es el que activa las resistencias Pull-Up del puerto B.
bcf OPTION_REG,7
El registro OPTION_REG se encuentra en el banco 1

Si lo estás escribiendo en C, en el post #360 está la solución.

Si tienes otro problema o usas otro lenguaje de programación, es necesario que adjuntes código y esquema en un archivo comprimido para poder ayudarte.

Saludos.
¿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.