Mostrando entradas con la etiqueta ICprog. Mostrar todas las entradas
Mostrando entradas con la etiqueta ICprog. Mostrar todas las entradas

viernes, 8 de enero de 2010

Cerradura electrónica con LCD y teclado 3x4 usando PIC 16F628A

Muy buenas a todos y todas los fanáticos de los microcontroladores!!!

Aquí les dejo un vídeo de una cerradura electrónica con el microcontrolador PIC 16f628A una pantalla LCD 16x2 y un teclado 4x4. También el esquema y el código en Pic Basic Pro (pbp).



Componentes necesarios:

Lista de componentes para una cerradura electrónica controlada por PIC,

  • Microcontrolador PIC 16F628A

  • Pantalla LCD 16x2

  • Teclado 4x4

  • 3 Resistencias 4K7 (4700Ohm)

  • Rele (Lo podemos sustituir por un Led para hacer pruebas)

  • Programador Micro JDM 16f628 y 16f84

🛠️ Componentes necesarios
PIC16F628A-I/P
PIC16F628A-I/P PIC16F628A-I/P .
LCD1602 16x2 HD44780 para Arduino
Pantalla LCD 16x2 HD44780 para Arduino" LCD1602 16x2 HD44780 para Arduino.
Módulo de relé de 1 canal
Módulo de relé de 1 canal Módulo de relé de 1 canal 5V.
Módulo de teclado de matriz 3x4
Módulo de teclado de matriz 3x4 Módulo de teclado de matriz 3x4.
Cables Dupont hembra hembra
Cables Dupont h/h Kit de 40pin 10cm 2,54mm 1pin hembra a hembra .

Esquema en Proteus para 16F628A y LCD 16x02:


Como no tenía reles a mano he puesto un led en su lugar, pero a efectos es lo mismo poniendo un transistor podremos controlar cargas mayores.


En la siguiente imagen tenemos el mapa de los pines del microcontrolador PIC 16F628A:

Después de una pequeña revisión, me he dado cuenta que si se ponemos RS en el pin A4 no funciona la simulación, pero solo en la simulación. De todas maneras he cambiado la foto del esquema y el código para que todo funcione correctamente.

Solucionado el problema, os dejo los archivos para Proteus y los archivos de PBP en la sección de descargas de este blog.


Funciones del programa:

  • Bienvenida: Muestra un mensaje de bienvenida en la pantalla.

  • Inicio:

  • Menú: tenemos dos opciones:
    • Abrir puerta: Función "Abrir".
    • Cambiar clave: Función "Nueva_clave".

  • Teclado: Lee las pulsaciones del teclado.

  • Clave: Imprime en la pantalla dígito a dígito.

  • Grabar_clave Almacena los dígitos en la memoria EEPROM

  • Nueva_clave Imprime en pantalla los dígitos llamando a la función "Grabar_clave" con la nueva clave.


Y este es el código para la programación en PBP:



; Cerradura  Electrónica con teclado 3x4,Lcd 16x2,
; y clave de 4 dígitos que queda grabada aun cuando el Pic
; deje de tener corriente.
; utiliza el microcontrolador 16f628a prescidiendo del cristal de cuarzo
; externo y usando el reloj interno

@ DEVICE PIC16F628A, WDT_OFF
@ DEVICE PIC16F628A, PWRT_ON
@ DEVICE PIC16F628A, BOD_ON
@ DEVICE PIC16F628A, PROTECT_OFF
@ DEVICE PIC16F628A, CPD_OFF
@ DEVICE PIC16F628A, MCLR_OFF
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT
@ DEVICE PIC16F628A, LVP_OFF

DEFINE LCD_DREG PORTA  ; Puerto de datos LCD
DEFINE LCD_DBIT 0      ; datos LCD comenzando en BIT 0 o 4 "estos deben estar consecutivos"
DEFINE LCD_EREG PORTB  ; cambiamos Enable del portb.3
DEFINE LCD_EBIT 7      ; al portb.7
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 7



; Definicion de variables
a var word
tecla var word
n1 var byte
n2 var byte
n3 var byte
n4 var byte
eprom1 var byte

; Definiendo puertos
LA    var portb.0 ; Linea A
LB    var portb.1 ; Linea B
LC    var portb.2 ; Linea C
LD    var portb.3 ; Linea D
Funo  var portb.4 ; Columna 1
Fdos  var portb.5 ; Columna 2
Ftres var portb.6 ; Columna 3
rele  var porta.6 ; Rele

n1 = "1" ; asigno valor a las variables
n2 = "1" ; el valor es equivalente en ascII
n3 = "1" ; esta sera la combinación predefinida
n4 = "1" ; recuerda cambiarla!!

eprom1 = "0"

PAUSE 100 ; Inicio del programa
read 0, eprom1
if eprom1 = 255 then Grabar_clave
  goto Bienvenida

Grabar_clave:

  WRITe 0, n1
  WRITe 1, n2
  WRITe 2, n3
  WRITe 3, n4

  LCDOUT $FE,1, $FE, 2 , " CLAVE GRABADA "
  PAUSE 1500
  GOTO Bienvenida

Bienvenida:
  pause 500 ; Mensaje de Bienvenida
  LCDOUT $FE,1, $FE, 2, " Infotronikblog"
  LCDOUT $FE, $C0, "  Presenta: "

Inicio:
  pause 500
  LOW LA
  LOW LB
  HIGH LC
  LOW lD  ; Activamos la linea del asterisco
  IF fUNO = 0 then goto Clave
  pause 500 ; LEE EL TECLADO A VER SI ES "*" SI NO ES CONTINUA MOSTRANDO MENSAJE
goto Inicio

; Función para leer el teclado
Teclado:

  low la
  if funo  = 0 then uno
  if fdos  = 0 then dos
  if ftres = 0 then tres

  high la
  low  lb
  if funo  = 0 then cuatro
  if fdos  = 0 then cinco
  if ftres = 0 then seis

  high lb
  low  lc
  if funo  = 0 then siete
  if fdos  = 0 then ocho
  if ftres = 0 then nueve

  high lc
  low ld
  if funo  = 0 then asterisco
  if fdos  = 0 then cero
  if ftres = 0 then numeral
  high ld
  pause 10
goto Teclado

asterisco:
  tecla ="*"
  return

siete:
  tecla = "7"
  return

cuatro:
  tecla = "4"
  return

uno:
  tecla = "1"
  return

dos:
  tecla = "2"
  return

cinco:
  tecla = "5"
  return

ocho:
  tecla = "8"
  return

cero:
  tecla = "0"
  return

tres:
  tecla = "3"
  return

seis:
  tecla = "6"
  return

nueve:
  tecla = "9"
  return

numeral:
  tecla = "#"
  return

Clave:
  LCDOUT $FE,1, $FE,2, "Escribe la Clave"
  pause 1000
  gosub Teclado
  SWAP tecla, n1

  LCDOUT $FE, $C5, "*"
  pause 500
  gosub Teclado
  SWAP tecla, n2
  
  LCDOUT $FE, $C6, "*"
  pause 500
  gosub Teclado
  SWAP tecla, n3
  
  LCDOUT $FE, $C7, "*"
  pause 500
  gosub Teclado
  SWAP tecla, n4

  LCDOUT $FE, $C8, "*"
  pause 500

  READ 0,EPROM1
  IF eprom1 = n1 then miro_dos

Error:
  LCDOUT $FE, 1, $FE, 2, "Clave Incorrecta"
  pause 500
goto Bienvenida

miro_dos:
  READ 1, eprom1
  IF eprom1 = n2 then miro_tres
goto error

miro_tres:
  READ 2, eprom1
  IF eprom1 = n3 then miro_cuatro
goto error

miro_cuatro:
  READ 3, eprom1
  IF eprom1 = n4 then goto menu
goto error


menu:
  LCDOUT $FE, 1, "  Elige una "
  LCDOUT $FE, $C0, "  Opcion: "

  pause 1500

  LCDOUT $FE, 1, "1 Abrir Puerta"
  pause 300

  LCDOUT $FE, $C0, "2 Cambiar Clave"
  gosub Teclado

  if tecla = "1" THEN goto Abrir
  if tecla = "2" then goto Nueva_clave
  if tecla != "1" and tecla!= "2" then LCDOUT $FE,1, $FE,2, "TECLA INCORRECTA" ; Si pulsamos una 

  LCDOUT $FE, 1, $FE, 2, "TECLA INCORRECTA "  ;que no es ni 1 ni 2 muestra tecla incorrecta
  pause 700
goto menu

Abrir:
  high rele
  LCDOUT $FE, 1, $FE, 2, "   Bienvenido "
  pause 3000
  low rele
goto Bienvenida


Nueva_clave:
  LCDOUT $FE,1, $FE,2, "Escribe tu nueva"
  LCDOUT $FE, $C0, "Clave:"
  pause 500
  gosub Teclado
  SWAP tecla, n1
  LCDOUT $FE, $C8, "*"
  pause 500
  gosub Teclado
  SWAP tecla, n2
  LCDOUT $FE, $C9, "*"
  pause 500
  gosub Teclado
  SWAP tecla, n3
  LCDOUT $FE, $C9+1, "*"
  pause 500
  gosub Teclado
  SWAP tecla, n4
  LCDOUT $FE, $C9+2, "*"
  pause 500
goto Grabar_clave

*NOTA: En la simulación la clave esta cambiada a 2580 *

Otros enlaces sobre información o proyectos con microcontroladores PIC:


Saludos!!!


viernes, 20 de noviembre de 2009

Migración del PIC 16F84A al 16F628A: Diferencias y ventajas

Muy Buenas a todos y todas amantes de los chips!!!

He estado probando durante unos 6 meses el microcontrolador 16F84A y ha sido un autentico quebradero de cabeza.

Buscando diferentes soluciones, después de leer algún que otro manual, pasarme al microcontrolador 16F628A.

En mi opinión personal, (Un principiante en esto de los microcontroladores) ha tenido más ventajas que inconvenientes.

Diferencias entre 16F84A y 16F628A

Característica PIC16F84 PIC16F628 Diferencia
Año de lanzamiento 1993 2003 10 años más moderno
Memoria Flash 1 KB 3.5 KB +250% capacidad
RAM 68 bytes 224 bytes +229% capacidad
EEPROM 64 bytes 128 bytes +100% capacidad
Pines I/O 13 16 3 pines adicionales
Oscilador interno No Sí (4 MHz) Reduce componentes externos
Comunicaciones Ninguno USART, SPI, I2C Protocolos integrados
Precio (referencia) Alto (obsoleto) Bajo (económico) Mejor relación costo-beneficio
Consumo energético Alto Bajo (nanoWatt technology) Más eficiente

Como se puede ver en la tabla solo por el hecho de tener un reloj interno a 4 MHZ que aunque parece que no es muy preciso, para la mayoría de las practicas sera más que suficiente

Y si necesitamos más velocidad, podemos conseguir hasta 20Mhz con un cristal externo.

También el hecho de tener 2Kb de memoria interna, casi los mismos pines I/O que con el microcontrolador 16F84A y ser más barato (de 1€ a 2€ más barato).


Para mi el cambio del modelo 16F84a al 16F628a ha sido más que satisfactorio y animo al que este empezando a optar por este último modelo de microcontrolador.

Programación

Uno de los motivos principales por el que el 16F628A es el sucesor directo del 16F84A es la programación. En este sentido son totalmente intercambiables al compartir los pines de programación.

FUNCIÓN PIN PIC16F84A PIN PIC16F628A
Vpp/MCLR 4 4
Vdd 14 14
Vss 5 5
Data (RB7) 13 13
Clock (RB6) 12 12

Puedes contrastar la información con los datasheets oficiales de Microchip:
- PIC16F84A: DS31004A (Sección 1, Tabla 1-1)
- PIC16F628A: DS40044F (Sección 3, Tabla 3-2)


Otra de las ventajas es que los cambios en la programación son mínimos, por si tienes hechos algunos programas para el 16f84A la migración al 16F628A sera casi instantánea.

Aquí os dejo el datasheet 16F628A para que le echéis un vistazo.

También os dejo el articulo de la web talkingelectronics (EN) con mucha información sobre estos dos microcontroladores.


Otros artículos sobre programación con microcontroladores MicroChip que os pueden interesar:


Saludos a todos y todas!!!