TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: batman123 en 21 de Septiembre de 2005, 16:15:00

Título: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 21 de Septiembre de 2005, 16:15:00
QUIERO SABER SI ALGUIEN  ME PUEDE SUMISTRA EL CODIGO DE UNA CERRADURA ELECTRONICA QUE GRAVE UNA CLAVE DE 4 DIGITOS EN LA EPROM DEL PIC , TAMBIEN QUE LA CLAVE SE PUEDA CAMBIAR ,  
EL PROGRMA MANEJA UN TECLAFlashDO MATRIXIAL 4*4
1  LCD DE 16 CARACTERES Y DOS LINEAS.


ESTARE AGRADECIDO POR  CUALQUIER AYUDA.

FlashSIN EMBARGO MAS ABAJO ENCONTRARAN EL CODIGO DE MI PROGRAMA TOTALMENTE COMPLETO Y FUNCIONALFlash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 21 de Septiembre de 2005, 23:13:00
Hola:

Que pena pero no quiero molestar ni mucho menos parecer grocero con lo que voy a decir....

Si esperas que te den haciendo las cosas pues creo que te va a tocar esperar sentado, por que mejor no empiezas con algun codigo base y de alli partimos...
y si las cosas no mismo se dan "INTENTANDOLO" pues alli con gusto te paso un codigo... Sonrisa Gigante
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 29 de Septiembre de 2005, 16:21:00
QUE PENA .. TIENES TODA la razon

miren este es el codigo pero quiero reducirlo un poco mas para que me quepa en la memoria de un Flash16f84A Flashy  asi poder hacerle unas mejoras..

bueno este es el codigo

DEFINE LCD_DREG PORTB       " Setea el puertos de datos del LCD por el puerto B
DEFINE LCD_DBIT 0           " Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTB      " Setea el port LCD Register Select
DEFINE LCD_RSBIT 4          " Setea el bit LCD Register Select
DEFINE LCD_EREG PORTA       " Setea el port LCD Enable
DEFINE LCD_EBIT 0           " Setea el bit LCD Enable
DEFINE LCD_BITS 4           " Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2          " Setea el numero de lineas en el LCD
         
 
    a       var word        " definicion de variables
    tecla   var word
    n1      var byte
    n2      var byte
    n3      var byte
    n4      var byte
    eprom1  var byte
       
     
    n1="1"                  " asigno valor a las variables
    n2="5"                  " el valor es equivalente en asccII
    n3="9"
    n4="7"
 
           
    eprom1="0"
   
    PAUSE  100                                " inicio el programa
    read  0,eprom1
    if eprom1 = 255 then gravar_clave
    goto publicidad
   
    gravar_clave
    WRITe 0, n1
    WRITe 1, n2
    WRITe 2, n3
    WRITe 3, n4
 
    LCDOUT $FE,1," CLAVE GRAVADA "
    PAUSE 1500
    GOTO publicidad
   
    publicidad:                              " CICLO INICAL DEL LCD MUESTRA
    pause 500                                " MENSAJE DE BIENVENIDA
    LCDOUT $FE,1," EDGAR SANTIAGO "            
    pause 500                                " aqui hay que poner una rutina
    OPTION_REG=0
    TRISB = %11111110                             "Activamos Pull-up      
    IF portb= $7e  then goto clave
    LCDOUT $FE,$C0,"   Electronica "        
    pause 500                                " LEE EL TECLADO A VER SI ES "*"
                                            " SI NO ES CONTINUA MOSTRANDO MENSAJE
    OPTION_REG=0
    TRISB = %11111110                              "Activamos Pull-up
    if portb=$7e then goto clave
    LCDOUT $FE,1,"            "
    goto publicidad
   
   
    teclado:
   
    TRISB = %11111110
    low portb.0
    if portb = $EE  then uno
    if portb = $DE  then cuatro
    if portb = $BE  then ciete
    if portb = $7E  then asterisco
       
    TRISB = %11111101
    low portb.1
    if portb = $ED  then dos
    if portb = $DD  then cinco
    if portb = $BD  then ocho
    if portb = $7D  then cero
       
    TRISB = %11111011
    low portb.2
    if portb = $EB  then tres
    if portb = $DB  then seis
    if portb = $BB  then nueve
    if portb = $7B  then numeral
   
    goto teclado
   
    asterisco
    tecla="*"
    return
   
    ciete:
    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," Digite su Clave"
    pause 1000
    gosub teclado
    SWAP  tecla, n1
    LCDOUT $FE,$C5,"X"
    pause 500
    gosub teclado
    SWAP  tecla, n2
    LCDOUT $FE,$C6,"X"
    pause 500
    gosub teclado
    SWAP  tecla, n3
    LCDOUT $FE,$C7,"X"
    pause 500
    gosub teclado
    SWAP  tecla, n4
    LCDOUT $FE,$C8,"X"
    pause 500
     
    READ 0,EPROM1
    IF eprom1 = n1 then miro_dos
   
    incorrecto:
    LCDOUT $FE,1,"Clave Incorrecta"
    pause 500
    goto publicidad
 
    miro_dos
    READ 1, eprom1
    IF eprom1 = n2 then miro_tres
    goto incorrecto
 
    miro_tres
    READ 2, eprom1
    IF eprom1 = n3 then miro_cuatro
    goto incorrecto
 
    miro_cuatro
    READ 3, eprom1
    IF eprom1 = n4 then goto menu
    goto incorrecto
   
   
   
  menu
  LCDOUT $FE,1,"   Selecione "
  pause 1000
  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,"TECLA INCORRECTA "
  LCDOUT $FE,1,"TECLA INCORRECTA "
  pause 700
  goto menu
 
  abrir:
  high porta.3
  LCDOUT $FE,1,"   Bienvenido  "
  pause 3000
  low porta.3
  goto publicidad
 
  nueva_clave
    LCDOUT $FE,1," Digite su Nueva"
    LCDOUT $FE,$C0,"Clave:"
    pause 500
    gosub teclado
    SWAP  tecla, n1
    LCDOUT $FE,$C7,"X"
    pause 500
    gosub teclado
    SWAP  tecla, n2
    LCDOUT $FE,$C8,"X"
    pause 500
    gosub teclado
    SWAP  tecla, n3
    LCDOUT $FE,$C9,"X"
    pause 500
    gosub teclado
    SWAP  tecla, n4
    LCDOUT $FE,$C9+1,"X"
    pause 500
    goto gravar_clave
Flash

BUENO ESPERO SUGERENCIAS....
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 29 de Septiembre de 2005, 20:32:00
Hola:

Esta haciendo este programa lo que deveria o tiene algun error...? ocupa mas memoria de la que soporta el micro?
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 30 de Septiembre de 2005, 12:07:00
no el programa funciona perfectamente,

es que quiero agrgarle otras cositas como por ejemplo clave de 5 digitos y otrso mensajes. pero creo que la rutina para leer el teclado me esta generando mucho codigo es por eso que quiero me den sugerencias  de como minimizar este codigo
aclaro el teclado es matricial 4  x 4

Flash agradezco opiniones...:Flash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 30 de Septiembre de 2005, 12:31:00
Hola:
Perdon pero te importaria mucho poner el esquema de tu circuito aqui...! Veo que el teclado y el LCD los conectas al puerrto B... y no se como es que no te da problemas ya que para las dos cosas necesitarias como minimo 14 pines ya que estas trabajando a 4 bits el lcd....! y el teclado utiliza 8 pines...! El codigo es totalmente hecho por ti o lo sacaste de algun libro...?
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: morfeus en 02 de Octubre de 2005, 13:42:00
Hola,

Que pic utilizaste para hacer las pruebas?.

morfeus
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 06 de Octubre de 2005, 18:19:00
Escrito originalmente por morfeus
Hola,

Que pic utilizaste para hacer las pruebas?.

morfeus


Chicautilizo el pic 16f84A pero quiero ver si puedo reducir a un mas el codigo para
agregarle aun mas funcionalidad al proyecto. pues por estos lados se me ha echo imposible conseguirme un pic 16f628 y asi poder jugar con esos 2k de memoria

jajajajajaja....aajajajaja..

Flash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 06 de Octubre de 2005, 18:26:00
Escrito originalmente por LordLafebre
Hola:
Perdon pero te importaria mucho poner el esquema de tu circuito aqui...! Veo que el teclado y el LCD los conectas al puerrto B... y no se como es que no te da problemas ya que para las dos cosas necesitarias como minimo 14 pines ya que estas trabajando a 4 bits el lcd....! y el teclado utiliza 8 pines...! El codigo es totalmente hecho por ti o lo sacaste de algun libro...?


hoy no tengo tiempo de subir el esquema porque estoy en un ciber cafe pero tan pronto pueda lo subo el, EL PROYECTO ES TOTALMENTE FUNCIOBNALS SI YA LO COMPILASTE TE PUEDES DAR CUENTA QUE NO TIENE ERRORES Y ES TOTALMENTE HECHO POR MI , SOY TECNICO EN ELECTRONICA, ASI QUE SI ME PUEDES AYUDAR  FERFECTO.

ADEMAS COMO TE PUEDES DAR CUENTA ME QUEDAN PUERTOS PARA TRABAJAR
SIN PROBLEMA.

EL TRUCO ES TRABAJAR CON ENABLE DEL LCD PUES CUANDO TU EJECUTAS UNA ORDEN  PARA CONTROLAR EL LCD EL PBP LO QUE HACE  ES ACTIVARLO Y CUANDO TERMINA DE EJECUTAR EL COMANDO LO DESACTIVA Y PUEDES SEGUIR TRABAJANDO CON LOS MISMOS PUERTOS SIN AFECTAR LAS SEÑALES QUE LE LLEGAN AL LCD.

ESPERO ME ENTIENDAS SUERTE Y PULSO....

FlashESPERO ME AYUDES A REDUCIR EL CODIGO Y A HACERLO AUN MAS FUNCIONAL  PORQUE LO QUIERO CON UNA CLAVE DE 6 NUMEROS PARA QUE SEA INVIOLABLE.RollEyes

Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: morfeus en 06 de Octubre de 2005, 19:40:00
Hola batman123,

Pues animate a subir el esquema y entre todos de seguro podemos ayudarte a disminuir el código del programa.

saludos

morfeus
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 06 de Octubre de 2005, 23:05:00
Hola:

Bueno si utilizas el enable entonces bien...

Para la rutina del teclado ensaya esta de la pagina de Bruce Reynolds y cuentame como te va...! OK?

Por lo del pic tambien puedes conseguirte un 16F627 ó 16F648....!

http://www.rentron.com/serkey16.htm
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 08 de Octubre de 2005, 17:59:00
creo que esa rutina la del  link

solo sirve para leer una tecla pero el preblema es para saber cual
toca crear una tabla para comparar el valor que es leido y luejo saber que tecla se oprimio practicamente lo que yo hago.

Fumadoro me corrigen si me equivoco.Flash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: morfeus en 08 de Octubre de 2005, 18:56:00
Hola batman123,

Creo que es como tu dices, habria que hacer los ensayos.


morfeus
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 11 de Octubre de 2005, 17:27:00
Escrito originalmente por morfeus
Hola batman123,

Creo que es como tu dices, habria que hacer los ensayos.


morfeus


BUENO COMO NO VEO SUGERENCIAS ME TOCO HACER EL CODIGO PARA UN 16F628
AHORA EL CODIGO ME QUEDARA UN POCO MAS ROBUSTO Y MAS FUNCIONAL TODAVIA PORQUE ME SOBRAN  5 PUERTOS DE LOS CUALES UTILIZARE..
1. PARA  SENSOR DEL RELE
1. PARA EL RELE DE LA CERRADURA
1. PARA ACTIVAR UNA ALARMA CUANDO SE INTRODUSCA 3 VESES LA CONTRASEÑA MALFlash
Y QUEDAN TODAVIA 2 PUERTOS NO SE QUE HACER CON ELLOS...Sonrisa Gigante
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 11 de Octubre de 2005, 22:37:00
Hola:

batman123 intentaste con el codigo del link que te puse....?

Con respecto al 16F628 tienes que configurar lo fusibles para que tengas acceso a todos los pines, y si mal no recuerdo uno es solo de entrada y otro es colector abierto....  ya lo hiciste...? sino lo tienes te puedo pasar el codigo para los FUSES...!
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 12 de Octubre de 2005, 19:22:00
Escrito originalmente por LordLafebre
Hola:

batman123 intentaste con el codigo del link que te puse....?

Con respecto al 16F628 tienes que configurar lo fusibles para que tengas acceso a todos los pines, y si mal no recuerdo uno es solo de entrada y otro es colector abierto....  ya lo hiciste...? sino lo tienes te puedo pasar el codigo para los FUSES...!


MIRA ME INTERESA EL CODIGO DE LOS FUSIBLES..
NO LO HE INTENTADO TODAVIA PERO YA ESTOY MODIFICANDO EL CODIGO
EN EL SIMULADOR ME FUNCIONA A LA PERFECCION PERO FALTA COMPROBARLO PORQUE NO TENGO A LA MANO EL PIC DEPRONTO LA OTRA SEMANA  FlashMORFEUS FlashME LO ESTA AYUDANDO A CONSEGUIR...

CUALQUIER COSA ME AVISAS

MI CORREO ES edgar_santiagos@hotmail.com enviame los archivos alli

Flashcuando tenga terminado el codigo lo posteo de nuevo Fumador
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: morfeus en 12 de Octubre de 2005, 21:37:00
Hola,

A ver, yo he trabajado con el pic16f628 y lo de los fusibles no lo he necesitado solo he configurado Power-Uptimer, MCLR Pinf unction este es para habilitar la interrupcion de dicho pin y por ultimo el Brown-out reset.

Para configurarlo como salidas o entradas se hace igual que en 16f84 (solo hay que deshabilitar las entradas A/D del 16f628).

Si hay algo que desconozco por favor me avisan ya que estos detalles es bueno tenerlos en cuenta.

Saludos

morfeusRebotadoRebotado
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 12 de Octubre de 2005, 22:59:00
Hola:

batman123 aqui te pongo la configuracion para los fusibles al lado de cada instruccion te detalla que hace cada una:

@ DEVICE pic16f628, INTRC_OSC_NOCLKOUT "Reloj interno solo
@ DEVICE pic16f628, WDT_OFF " Watchdog Timer desconectado
@ DEVICE pic16f628, PWRT_ON " Power-On Timer conectado
@ DEVICE pic16f628, BOD_ON " Brown-Out Detect conectado
@ DEVICE pic16f628, MCLR_OFF " Master Clear Externo desconectado
@ DEVICE pic16f628, LVP_OFF " Low-Voltage Programming desconectado
@ DEVICE pic16f628, CPD_OFF " Data Memory Code Protect desconectado

y como te decia, tendrias que leer el data del micro porque no recuerdo bien cual es el pin que funciona solo como entrada pero creo que es la del MCLR, y la otra que es colector abierto, no recuerdo bien, pero puedes probarlo, yo lo he utilizado para que trabaje con el oscilador interno y sin reset y va bien.... SUERTE...!!! Sonrisa Gigante
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 14 de Octubre de 2005, 10:08:00
[cita title=Escrito originalmente por LordLafebre]Hola:

batman123 aqui te pongo la configuracion para los fusibles al lado de cada instruccion te detalla que hace cada una:

MUCHAS GRACIAS POR LA CONFIGURACION
EN EL DIA DE HOY ESTARE MEJORANDO EL CODIGO....
YA CASI ESTA LISTO SOLO FALTA PROBAR DIRECTAMENTE EN EL PIC YA QUE SIMULADO  ME CORRE A LA PERFECCION...

Flash SUERTE......RebotadoRebotado
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 14 de Octubre de 2005, 19:34:00


listo ya he mirado pero el problema es que cuando yo llamo a la rutina del teclado
nesecito que el programa regrese a la pila donde salto y con el codigo de tu teclado  solamente envia un dato al LCD Y YA no regresa a ningun lado.

despues sigo con el post me tengo que ir urgente...
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 14 de Octubre de 2005, 21:11:00
hola:

pues si quieres que regrese alinea sseguida de donde lo enviaste a la subrrutina que lee el teclado hazlo asi por ejemplo:

ProgramaPrincipal:
-
-
-
     GOSUB TECLADO
-
-
goto ProgramaPrincipal

TECLADO:
-
-
     "rutina para el teclado"
-
-
return

Eso es lo que entendido que quieres hace...!luego de que termine con la subrrutina teclado regresa a la linea siguiente de donde le enviaste a saltar que seria despues de GOSUB TECLADO...
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 15 de Octubre de 2005, 11:49:00

voy a probar lo que tu dices y a ver que pasa pero toca el proximo martes porque

mañana domingo estoy de cumpleaños y me pienzo desordenar un poco con mi esposa y mi familia.
 
  la otra semana te cuento como me fue con el codigo..

TE CUENTO QUE TAMBIEN POSTEARE EL CODIGO PARA EL PIC16F628 QUE ME HA QUEDO SUPER   BACANO.

RebotadoTIENE LAS SIGUIENTES CARACTERISTICAS:
* PARA ENTRAR EN EL PROGRAMA PRESIONAR *
* CLAVE PERSONAL DE 5 DIGITOS INCLUYENDO * # A B C D
 PARA UN PROMEDIO DE PROVALIDADES DE 150.000  INVIOLABLE VERDAD:::::::
* SI DIJITAS 3 VESES LA CLAVE MAL SE BLOQUEA  EL SISTEMA
* SOLO SE PUEDE DESBLOQUEAR CON UNA CLAVE ESPECIAL PARA EVITAR INTRUSOS
* UNA SALIDA PARA ACTIVAR EL RELE DE LA CERRADURA ELECTRICA
* UNA SALIDA PARA ACTIVAR EL RELE DE ALARMA CUANDO SE BLOQUE EL SISTEMA
* UNA BUENA PUBLICIDAD DEL AUTOR OSEA YO.. Y ESPERO QUE NO LA CAMBIEN JEJEJEJEJE.
* UN MENU PARA SELECIONAR SI QUIERO ABRIR LA PUERTA O CAMBIAR LA CLAVE ACTUAL
* CONFIRMACION PARA CUANDO INTRODUCES LA CLAVE  NUEVA PARA EVITAR EQUIVOCACIONES Y LUEGO SE NOS OLVIDE LA CLAVE..
BUENO  ESO ES TODO
Flash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 20 de Octubre de 2005, 12:06:00

si alguien le interesa este proyecto aqui esta el esquema


http://miarroba.com/foros/ver.php?foroid=348538&temaid=3740693
--------------------------------------------------------------------------------


claro que sin los pulsadores ni las resistencias full-uf  en PToA1 y PToA2es que ese esquema es para otro proyecto pero la forma de conectar el teclado y el lcd es el mismo...Sonrisa Gigante

espero les sea de gran utilidad y pronto subire el codigo para el pic 16f628..

Rebotadosuerte....................Rebotado
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 20 de Octubre de 2005, 12:19:00
Felicidades...!!!

Que bien que ya lo acabaste y lo hisiste solo...! Rebotado

Y lo de las resistencias de Pull-up deben ser por el proyecto de morfeus.... verdad...?
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 20 de Octubre de 2005, 14:30:00
si lo de las resistencias en el puerto A si son por lo del proyecto de morfeus..

en el 16f628 me quedo una chimba...

mañana o mas tarde lo subo para que lo mires..Flash

Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: electronando en 24 de Octubre de 2005, 22:56:00
Sonrisa Gigantejaja que suerte justo me preguntaba cuando me pongo hacer el proyectito de la cerradura con clave y aparecio batman , me ahorrastes cerebro batman y bueno me gusto la forma como tratas tu codigo bueno pude llegar a no sobrepasar los 1k de codigdel 84 con el teclado de 4*4 (key calc del proteus ) y con 5 digitos de clave le queria poner seis pero no me daba la memoria del chip ni la mia pero se podria hacer algo con la rutina data creo pues eso lo grava al inicio de el grabado y de repente u contador para llenar la eeprom del pic bueno la idea ya esta puesta aunque espero comprendas mi codigo y creo que si pues simule el que modifique del tuyo y funciona en proteus y deberia de funcionar si lo implemento ya luego te cuento pero te dejo el codigo para que lo mastiques Sonrisa Gigante




DEFINE LCD_DREG PORTB " Setea el puertos de datos del LCD por el puerto B
DEFINE LCD_DBIT 0 " Setea el bit de comienzo de datos (0 o 4) si el bus es de 4-bit
DEFINE LCD_RSREG PORTA " Setea el port LCD Register Select
DEFINE LCD_RSBIT 1 " Setea el bit LCD Register Select
DEFINE LCD_EREG PORTA " Setea el port LCD Enable
DEFINE LCD_EBIT 0 " Setea el bit LCD Enable
DEFINE LCD_BITS 4 " Setea el tamaño del bus LCD (4 o 8 bits)
DEFINE LCD_LINES 2 " Setea el numero de lineas en el LCD


a var word " definicion de variables
tecla var word
n1 var byte
n2 var byte
n3 var byte
n4 var byte
n5 var byte
eprom1 var byte
i var byte
R VAR BYTE
 n var byte
 j var byte
 M var byte
 FILA_0 VAR BYTE
 FILA_1 VAR BYTE
 FILA_2 VAR BYTE
 FILA_3 VAR BYTE
 
n1 = "1" " asigno valor a las variables
n2 = "5" " el valor es equivalente en asccII
n3 = "9"
n4 = "7"
n5 = "/"

eprom1 = "0"

pause 100 " inicio el programa
read 0, eprom1
If eprom1 = 255 Then gravar_clave
GoTo publicidad

gravar_clave:
WRITe 0, n1
WRITe 1, n2
WRITe 2, n3
WRITe 3, n4
write 4, n5
LCDOUT $FE,1," CLAVE GRAVADA "
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
"GOTO publicidad

publicidad: " CICLO INICAL DEL LCD MUESTRA
GoSub tiempo_05 " MENSAJE DE BIENVENIDA
LCDOUT $FE,1," ACCESO à NANDO"
GoSub tiempo_05 " aqui hay que poner una rutina
OPTION_REG = 0
TRISB = %11111110 "Activamos Pull-up
IF portb= $7e then goto clave
LCDOUT $FE,$C0,"   Electronica "
GoSub tiempo_05 " LEE EL TECLADO A VER SI ES "*"
" SI NO ES CONTINUA MOSTRANDO MENSAJE
OPTION_REG = 0
TRISB = %11111110 "Activamos Pull-up
if portb=$7e then goto clave
LCDOUT $FE,1," "
GoTo publicidad



   
teclado:
COLUMNA_0:
R = 0
TRISB = %11111110
 portb 0# = 0
 GoTo PREGUNTA

COLUMNA_1:
R = R + 1

TRISB = %11111101
 portb 0.1 = 0
 GoTo PREGUNTA
COLUMNA_2:
R = R + 1
TRISB = %11111011
 portb 0.2 = 0
 GoTo PREGUNTA
COLUMNA_3:
R = R + 1
TRISB = %11110111
 portb 0.3 = 0
 GoTo PREGUNTA
GoTo teclado

suelta:
if (portb&%11110000)=$f0 then visualiza
GoTo suelta

visualiza:
lookup j, ["741C8520963=/*-+"], tecla
Return



clave:
LCDOUT $FE,1," Digite su Clave"
GoSub tiempo_05
GoSub tiempo_05
GoSub teclado
SWAP tecla, n1
i = 0
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n2
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n3
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n4
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n5
GoSub lcd_sal
GoSub tiempo_05

read 0, eprom1
If eprom1 = n1 Then miro_dos

incorrecto:
LCDOUT $FE,1,"Clave Incorrecta"
GoSub tiempo_05
GoTo publicidad

miro_dos:
read 1, eprom1
If eprom1 = n2 Then miro_tres
GoTo incorrecto

miro_tres:
read 2, eprom1
If eprom1 = n3 Then miro_cuatro
GoTo incorrecto

miro_cuatro:
read 3, eprom1
If eprom1 = n4 Then miro_cinco
GoTo incorrecto

miro_cinco:
read 4, eprom1
If eprom1 = n5 Then menu



menu:
LCDOUT $FE,1," Selecione "
GoSub tiempo_05
GoSub tiempo_05
LCDOUT $FE,1,"1_Abrir Puerta"
GoSub tiempo_05
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,"TECLA INCORRECTA "
LCDOUT $FE,1,"TECLA INCORRECTA "
GoSub tiempo_05
GoSub tiempo_05
GoTo menu

abrir:
high porta.3
LCDOUT $FE,1," Bienvenido "
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
GoSub tiempo_05
low porta.3
GoTo publicidad

nueva_clave
LCDOUT $FE,1," Digite su Nueva"
LCDOUT $FE,$C0,"Clave:"
GoSub tiempo_05
i = 2
GoSub teclado
SWAP tecla, n1
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n2
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n3
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n4
GoSub lcd_sal
GoSub tiempo_05
GoSub teclado
SWAP tecla, n5
GoSub lcd_sal
GoSub tiempo_05


GoTo gravar_clave

tiempo_05:
pause 500
Return
lcd_sal:
 LCDOUT $FE,$C5+i,"X"
 i = i + 1
 Return
 
 
PREGUNTA:
 M = 4 * R
 FILA_0=($E0 +(portb&%00001111))
 FILA_1=($D0 +(portb&%00001111))
 FILA_2=($B0 +(portb&%00001111))
 FILA_3=($70 +(portb&%00001111))
If portb = FILA_0 Then j = M
M = M + 1
If portb = FILA_1 Then j = M
M = M + 1
If portb = FILA_2 Then j = M
M = M + 1
If portb = FILA_3 Then j = M
if (portb&%11110000)<>$f0 then suelta
If R = 0 Then COLUMNA_1
If R = 1 Then COLUMNA_2
If R = 2 Then COLUMNA_3
GoTo teclado
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 25 de Octubre de 2005, 10:55:00
MUY BUEN APORTE ELECTRONANDO

YA LO PROBE Y FUNCIONA A LAS MIL MARAVILLAS ADEMAS

TRATARE DE ENTENDER EL CODIGO  PORQUE HAY RUTINAS QUE NO ENTIENDO..PERO TE QUEDO BACANO..

FlashSUERTE.....Flash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: electronando en 25 de Octubre de 2005, 16:02:00
si bueno fue el sexto intento luego de varios fallidos y te pase solo el codigo pues se que lo entenderas solo aplique algunas nociones de matrices , y mira te recomiendo que mejor te compres un 16f628 y luego me cuentas pues no etratado con ese pic y tiene varias cosillas el oscilador interno la calibracion cosillas asi bueno suerte con el proyecto Rebotado
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 30 de Octubre de 2005, 13:41:00
EN ESTOS DIAS SUBO EL CODIGO PARA UN 16F628 ..

PERO MUY BUEN APORTE  ELECTRONANDO

RollEyesSURTE..Flash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 08 de Noviembre de 2005, 09:31:00
Bueno lo prometido es deuda aqui les dejo el link para que descarguen el programa para el pic 16f628.

http://miarroba.com/foros/ver.php?foroid=348538&temaid=3821626

Que incluye varias mejoras..

1. contraseña de 5 numeros o letras.
2. activa rele para la cerradura por el puerto RA.3
3. Activa rele para alarma por el puerto RA.2
4. confirmacion de repetir clave al cambiarla
5. bloqueo del sistema al introducir 3 veses mal la contraseña
6. desbloqueo del sistema presionando a la vez la tecla (7 y A )del teclado matrixial.

Rebotadocualquier cosa no duden en preguntar..Rebotado

Suerte.....Flash
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: LordLafebre en 08 de Noviembre de 2005, 09:44:00
Hola:

Felicidades, muy buen trabajo...!!! Sonrisa Gigante
Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 11 de Noviembre de 2005, 20:28:00
FlashMUCHAS GRACIAS LORDFlash

Título: RE: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 27 de Enero de 2006, 17:08:00
ESTE MENSAJE ES PARA PODER TENER MI FORO EN PRIMERA PAGUINA ..


FlashSUERTE Y FELIZ 2006Flash
Título: Re: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 07 de Junio de 2011, 20:51:27
BUENO QUE NOSTALGIA ME DA VER ESTE  POST,.......
PUES LA VIDA ME IMPIDIÓ DEDICARME A LA ELECTRÓNICA, HORA ME DEDICO A OTRAS COSAS Y  Y MI TRABAJO ABSORVE TODO MI TIEMPO  PERO ESPERO PROGRAMAR DE NUEVO ALGÚN DÍA....
Título: Re: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: Noelillo en 18 de Julio de 2011, 11:28:54
Código: [Seleccionar]
[code' Program to create telephone pad tone
' Oscillator must be set to 20MHz

DEVICE = 16F628a
        XTAL = 4
        ALL_DIGITAL = TRUE
        PORTB_PULLUPS = ON      ' Enable PORTB pull-ups

LCD_DTPIN = PORTb.4
LCD_RSPIN = PORTa.0
LCD_ENPIN = PORTa.2
LCD_INTERFACE = 4 ' 4-bit Interface
LCD_LINES = 2
LCD_TYPE = 0

' Define program variables
Dim Col         as  Byte            ' Keypad column
Dim Row         as  Byte            ' Keypad row
Dim Key         as  Byte            ' Key value
Dim Tone        as  Byte            ' Tone number
        dim XLCD        as  Byte
        dim YLCD        As  Byte
        dim Pitch       as  byte
        dim Clave       as  Byte
     
        dim Digitos     as  byte
       
        dim Posicion    as  byte
        dim Leer        as  byte
' Define program Symbol
        Symbol Altavoz  =     PORTa.1          ' Alias speaker pin
        Symbol Rele     =     porta.3
        symbol Led      =     porta.4
        'trisa=%11111111
           Delayms 50                      ' Estavilizacion LCD
 ' Comienza el programa ran-up       
 '********************1234567890123456       
        high    Led
        Print at 1,1,"Teclado / Clave "
        Print at 2,1,"IBERICA 2000/1.0"                         
        Delayms 2000
        low     led
        cls
 
         
Cero:        posicion = 0
             digitos = 0
             
Inicio:
'*********************************************************************************
'***  Lee EEprom para conprovar que la memoria
'***  no se a escrito nunca y pide clave nueva
'*********************************************************************************
       
        Leer = eread 0                  'LEE EL LA EEPROM LA POSICION CERO
        if Leer = $FF then Nueva        'COMPUEBA QUE VALE LA POSICION CERO
        goto vieja                      'SI VALE FF PIDE CLAVA NUEVA, SI NO VA A VIEJA
Nueva: 
        high    Led
 '********************1234567890123456
        Print at 1,1,"Leyendo Memoria "
        Print at 2,1," Codigo Activa  "   
        Delayms 2000
        cls
 '********************1234567890123456
        print at 1,1,"  Clave Nueva:  "
        print at 2,1,">              <"
        xlcd=2
        ylcd=2
Otra:                                   'SE GENERA UN BUCLE DE PARA INTRODUCIR 4 DIGITOS
        For digitos = 0 to 3
        Gosub Getkey
        Lookup Tone,["0123456789*0#"],Key'
        ewrite  Posicion,[key]          'GRABA EN LA EEPROM LAS TECLAS PULSADAS
        posicion = posicion +1          'INCREMENTA UNA POSICION EN LA EEPROM
        Print at Xlcd,ylcd, Key         'INPRIMA EL LA LCD LA TECLA PULSADA
        ylcd = ylcd +1                  'INCREMENTA CURSOR A LA DERECHA   
       
        Dtmfout Altavoz, [Tone]         'GENERA TONO DE GRABACION 
        Next                            'SALE DEL BUCLE
 '******************  1234567890123456       
        Print Cls, "CLAVE Grabada   "  '
        print at 2,1,"En Memoria EEPro"
        Dtmfout Altavoz, [12]
        Delayms 2000 
        cls
 Vieja:
        high    Led
 '******************  1234567890123456
        Print Cls, "  Teclea Clave"
        print at 2,1,">              <"
        xlcd = 2
        ylcd = 2
        Clave = 0
        Digitos  = 0
       ' Oprotunidad = 0
     
        Posicion = 0
Loop:   
        if  ylcd >= 17 then Inicio
        Gosub Getkey            ' Get a key from the keypad
        Leer = eread Posicion
        posicion = posicion + 1
        Lookup Tone,["0123456789*0#"],Key
        Print at Xlcd,ylcd,Key
        if  Leer = Key then Clave = Clave + 1
        ylcd = ylcd +1
        Dtmfout Altavoz, [Tone]
        if  ylcd = 6 then Compara
        Goto Loop                ' Do it forever
 Compara:
        if Clave = 4 Then Abre
 Cierra:
 '****************** 1234567890123456
        print cls , "Acceso Denegado"
        Dtmfout Altavoz, [3]
         Delayms 2000
         goto vieja
 Abre:  high Rele
        print Cls , "Acceso Permitido"
        For Pitch = 0 to 120
Sound Altavoz,[Pitch,1]
        Next
        Delayms 2000
        low Rele
        goto vieja   
' Subroutine to get a key from keypad
Getkey:
        Delayms 50                ' Debounce

Getkeyu:
        ' Wait for all keys up
        PORTB = 0                ' All output pins low
        TRISB = $f0              ' Bottom 4 pins out, top 4 pins in
        If (PORTB >> 4) <> $0F Then Getkeyu    ' If any keys down, loop

        Delayms 50                ' Debounce

Getkeyp:
        ' Wait for keypress
        For Col = 0 To 3        ' 4 columns in keypad
        PORTB = 0        ' All output pins low
        TRISB = (Dcd Col) ^ $FF ' Set one column pin to output
          Row = PORTB >> 4        ' Read row
          If Row <> $0F Then Gotkey       ' If any keydown, exit
        Next

        Goto Getkeyp            ' No keys down, go look again

' Change row and column to key number 0 - 15
Gotkey:
        Key = (Col * 3) + (Ncd (Row ^ $0F)) -1
        'Key = (Col * 3) + (Ncd (Row ^ $0F))
        ' Translate key to telephone keypad tone
        ' 10 = *
        ' 11 = #
        ' 12 = A
        ' 13 = B
        ' 14 = C
        ' 15 = D
        Lookup Key,[1,2,3,4,5,6,7,8,9,10,11,12],Tone
        Return                  ' Subroutine over

        End]
Título: Re: PROGRAMITA PARA PIC 16F884 EN PBP
Publicado por: batman123 en 15 de Marzo de 2012, 14:57:54
muy bien


con ganas de regresar