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

Temas similares

26/07/2010 #1


problema con programacion para EEPROM interna PIC 16F628A
buenas, pues no se donde dejar este tema, decido dejarlo aqui...
hoy he estado programando un cerrojo con calve en la memoria EEPROM y poder cambiar la clave (y que no se borre cuando se resetea el PIC)
les paso el codigo, para que vean como es, y si habria algun fallo..
esta en basic:

Código PHP:
'****************************************************************
'
*  Name    CERRADURA ELECTRONICA.BAS                         *
'*  Author  : Mulinee..46                                       *
'
*  Notice  Copyright (c2010 Mulinee..46                    *
'*          : All Rights Reserved                               *
'
*  Date    27/07/2010                                        *
'*  Version : 1.0                                               *
'
*  Notes   :                                                   *
'*          :                                                   *
'
****************************************************************
cmcon 7                       ;cambiar a modo digital todo el puerto A
NUMERO 
VAR BYTE                 ;variable numero para almacenar la tecla pulsada
VAR BYTE                      ;variable r para hacer repeticiones
BIP 
VAR PORTA.0                 ;el portA.0 Bip (conectar chicharra activa)
LEDVERDE VAR PORTA.1            ;el portA.1 se llamara LEDVERDE
LEDROJO 
VAR PORTA.3             ;el portA.3 se llamara LEDROJO
LEDAMARILLO 
VAR PORTA.4         ;el portA.4 se llamara LEDAMARILLO
LEDBLOQUEADO 
var PORTA.5        ;el portA.5 se llamara LEDBLOQUEADO
DOOR 
var PORTA.2                ;el portA.2 conectar rele para la cerradura
var PORTB.0                   ;nombres para los pines de las filas
VAR PORTB.1
VAR PORTB.2
VAR PORTB.3
UNO 
VAR PORTB.4                 ;nombres para los pines de las columnas
DOS 
VAR PORTB.5
TRES 
VAR PORTB.6
CUATRO 
VAR PORTB.7
SETPRIME 
VAR BYTE              ;variable para almacenar la 1era clave
SETSEGUN 
VAR BYTE              ;variable para almacenar la 2da clave
SETERCER 
VAR BYTE              ;variable para almacenar la 3ra clave
SETCUART 
VAR BYTE              ;variable para almacenar la 4ta clave
INICIANDO
:                     ;programa del led para saber si esta funcionando
FOR 1 TO 2
high LEDVERDE 
HIGH BIP
PAUSE 1000
LOW LEDVERDE 
LOW BIP
PAUSE 150
NEXT
;******************GUARDA LA CLAVE DE FABRICA**********************
EEPROM 0.[1,2,3,4]               ;cargar la memoria EEPROM desde la direccion 0 en adelante
;******************************************************************
RESET:
FOR 
1 TO 3
HIGH LEDAMARILLO 
HIGH BIP
PAUSE 50
LOW LEDAMARILLO 
LOW BIP
PAUSE 50
IF (CUATRO=0) AND (UNO=0THEN RESET   ;corresponden a las teclas 7 y C
NEXT
READ 0
,SETPRIME               ;leer el dato de la EEPROM 0 y guardar en setprime
READ 1
,SETSEGUN               ;leer el dato de la EEPROM 1 y guardar en setsegun
read 2
,SETERCER               ;leer el dato de la EEPROM 2 y guardar en setercer
read 3
,SETCUART               ;leer el dato de la EEPROM 3 y guardar en setcuart
goto TECLAUNO                 ;ir a comparar claves
GRABAUNO
:                     ;programa para cambiar clave
GOSUB PTECLA 
HIGH LEDROJO HIGH LEDVERDE   ;espera a que suelte las teclas
GOSUB BARRIDO 
GOSUB PTECLA  ;ir a barrido y retorna a un antirrebote
HIGH LEDROJO 
HIGH LEDVERDE  ;mantener encendido el LED
WRITE 0
,NUMERO                ;guardar en la EEPROM 0 el valor de numero
GRABADOS
:                     ;programa para cambiar clave
gosub BARRIDO 
GOSUB PTECLA  ;ir a barrido y retorna a un antirrebote
high LEDROJO 
HIGH LEDVERDE  ;mantener encendido el LED
WRITE 1
,NUMERO                ;guardar en la EEPROM 1 el valor de numero
GRABATRES
:                    ;programa para cambiar clave
gosub BARRIDO 
GOSUB PTECLA  ;ir a barrido y retorna a un antirrebote
high LEDVERDE 
HIGH LEDROJO  ;mantener encendido el LED
write 3
,NUMERO                ;guardar en la EEPROM 3 el valor de numero
GRABACUATRO
:                  ;programa para cambiar clave
high LEDROJO 
HIGH LEDVERDE  ;mantener encendido el LED
write 4
,NUMERO                ;guardar en la EEPROM 4 el valor de numero
goto RESET                    ;ir a reset para cargar el nuevo valor en las variables
BARRIDO
:
low A                         ;sensar la fila A
if UNO =     0 THEN NUMERO : RETURN   ;tecla pulsada retorne cargada con 1
IF DOS =     0 THEN NUMERO : RETURN   ;tecla pulsada retorne cargada con 2
IF TRES =    0 THEN NUMERO : RETURN   ;tecla pulsada retorne cargada con 3
IF CUATRO 0 THEN NUMERO 10 : RETURN   ;tecla pulsada retorne cargada con 10
HIGH A
LOW B                         
;sensar la fila B
IF UNO =     0 THEN NUMERO : RETURN   ;tecla pulsada retorne cargada con 4
if DOS =     0 then NUMERO : return   ;tecla pulsada retorne cargada con 5
IF TRES =    0 then NUMERO : return   ;tecla pulsada retorne cargada con 6
if CUATRO 0 then NUMERO 11 : return   ;tecla pulsada retorna cargada con 11
high B 
low C                        
;sensar la fila C
if UNO =     0 then NUMERO : return   ;tecla pulsada retorne cargada con 7
if DOS =     0 THEN NUMERO : RETURN   ;tecla pulsada retorne cargada con 8
if TRES =    0 then NUMERO : return   ;tecla pulsada retorne cargada con 9
if CUATRO 0 Then NUMERO 12 : return   ;tecla pulsada retorne cargada con 12
high C
low D                       
;sensar la fila D
If UNO =    0 then NUMERO 14 : return   ;tecla pulsada retorne cargada con 14
if DOS =     0 then NUMERO : return   ;tecla pulsada retorne cargada con 0
if TRES =   0 then NUMERO 15 : return   ;tecla pulsada retorne cargada con 15
if CUATRO 0 then NUMERO 13 : return   ;tecla pulsada retorne cargada con 13
high D
pause 10
GOTO BARRIDO
;*********************PROGRAMA ANTIRREBOTE DE TECLAS****************
PTECLA:
high LEDVERDE high BIP ;genera sonido cada vez que se pulsa tecla
pause 100                
;duracion 100 milisegundos
low LEDVERDE 
low BIP   ;apagar sonido y led
ESPACIO
:                 ;programa antirrebote de teclas
if UNO =    0 then ESPACIO   ;si la tecla sigue pulsada ir   espacio
IF DOS =    0 then ESPACIO   ;si la tecla sigue pulsada ir a espacio
IF TRES =   0 THEN ESPACIO   ;si la tecla sigue pulsada ir a espacio 
IF CUATRO 0 then ESPACIO   ;si la tecla sigue pulsada ir a espacio
pause 25
return                       ;retorna si suelta las teclas
;******************************************************************
;**********************
COMPARACION DE CLAVES***********************
TECLAUNO:
GOSUB BARRIDO             ;ir a barrido y retornar con un valor
GOSUB PTECLA              
;envia a un programa antirrebote para soltar tecla
if NUMERO SETPRIME then TECLADOS   ;si el numero es igual a SETPRIME ir a TECLADOS
goto FALSO                ;caso contrario ir a lazo falso
TECLADOS
:
gosub BARRIDO             ;ir a barrido y retornar con un valor
GOSUB PTECLA              
;envia a un programa antirrebote para soltar tecla
if NUMERO SETSEGUN THEN TECLATRES   ;si el numero es igual a SETSEGUN ir a TECLATRES
goto FALSO1               ;caso contrario ir a lazo falso
TECLATRES
:
GOSUB BARRIDO             ;ir a barrido y retornar con un valor
GOSUB PTECLA              
;envia a un programa antirrebote para soltar tecla
if NUMERO SETERCER THEN TECLACUATRO   ;si el numero es igual a SETERCER ir a TECLACUATRO
goto FALSO2               ;caso contrario ir a lazo falso
TECLACUATRO
:
GOSUB BARRIDO             ;ir a barrido y retornar con un valor
GOSUB PTECLA              
;envia a un programa antirrebote para soltar tecla
if NUMERO SETCUART THEN OPENGE   ;si el numero es igual a SETCUART conectar rele
GOTO FALSO3               ;caso contrario ir a lazo falso
OPENGE
:
FOR 
1 to 2            ;2 pitos indica clave correcta
pause 100 
high LEDAMARILLO 
high BIP HIGH LEDVERDE
pause 100
low LEDAMARILLO 
LOW LEDVERDE LOW BIP
next
high DOOR                
;se conecta rele (abrir puerta)
PAUSE 1500               ;esperar 1,5 segundos
low DOOR                 
;desconectar rele
HIGH A 
HIGH B HIGH C LOW D   ;sensar solo la fila D
IF CUATRO 0 THEN GRABAUNO   ;corresponde a la tecla D para ir a GRABAR
GOTO TECLAUNO                 ;ir nuevamente a comparar las claves
;******************************************************************
;****************
LAZOS FALSOS TECLAS ERRONEAS**********************
FALSO:
gosub BARRIDO GOSUB PTECLA   ;estas teclas no comparan ninguna
FALSO1
:                        ;clave solo espera que termine de
GOSUB BARRIDO 
GOSUB PTECLA   ;pulsar las 4 teclas y no hacer nada
FALSO2
:
GOSUB BARRIDO GOSUB PTECLA 
FALSO3
:
for 
1 to 15                ;30 pitos indica calve incorrecta
pause 150
high LEDROJO 
HIGH BIP
pause 150
low LEDROJO 
LOW BIP
high A 
HIGH B HIGH D LOW C   ;sensar solo la fila C
if (CUATRO 0) AND (UNO 0then RESET   ;corresponden a las teclas 7 y C para resetear
next
PANICO
:
high LEDBLOQUEADO
pause 500
low LEDBLOQUEADO
pause 500
HIGH A 
HIGH B HIGH D LOW C   ;sensar solo la fila C
IF (CUATRO 0) AND (UNO 0THEN RESET   ;corresponden a las teclas 7 y C para resetear
GOTO PANICO                        ;queda en este lazo para siempre
;******************************************************************
end 
si hay que cambiar algo, diganmelo porfavor, gracias..

ahora presento seguidamente donde esta el problema:

Código PHP:
;******************GUARDA LA CLAVE DE FABRICA**********************
EEPROM 0.[1,2,3,4]             ;cargar la memoria EEPROM desde la direccion 0 en adelante
;****************************************************************** 
utilizo el MicroCode Studio + PBP244, y me da el error con eso , y me dice lo siguiente:

"
warning line 46: bad token "."
error line 46: expected '['. (CERRADURA ELECTRONICA CON CLAVE EN MEMORIA EEPROM Y CAMBIO DE CLAVE.bas)
"


es la primera vez que hago una programacion asi, y por lo que he visto, en lo demas no da falla.. mañana acabare de hacer el diagrama y lo subo, y me dicen tambien si esta bien...

si necesitan mas informacion, solo diganmelo
saludos
26/07/2010 #2

Avatar de ByAxel

Respuesta: problema con programacion para EEPROM interna PIC 16F628A
Hazle caso al compilador, ahí te dice que punto "." es incorrecto, debes de escribir coma ","...
La sintaxis es EEPROM {Location,}[Constant{,Constant...}]... en el manual o help dice lo mismo.

Saludos
27/07/2010 #3


Respuesta: problema con programacion para EEPROM interna PIC 16F628A
vale ok, entonces me tendria que quedar asi?
Código PHP:
;******************GUARDA LA CLAVE DE FABRICA**********************
EEPROM 0,[1,2,3,4] ;cargar la memoria EEPROM desde la direccion 0 en adelante
;****************************************************************** 
buen.. almenos asi no me da el error este..
gracias Carlos Alexis

ya he hecho el circuito pero.. no entiendo porque pasa esto..
a ver.. teoricamente tendria que estar desactivados los puertos b.0, b.1, b.2, b.3, y cuando le doy al pulsador, estos se activan..
porque aqui no?
estan mal conectados?
hay algun error en el codigo?
diguanme algo porfavor
saludos
Imágenes Adjuntas
Tipo de Archivo: gif Pulsadores2.GIF (198,3 KB (Kilobytes), 61 visitas)
27/07/2010 #4

Avatar de ByAxel

Respuesta: problema con programacion para EEPROM interna PIC 16F628A
Bueno, en ningún lado del código veo que usas los TRISx de los puertos y según el esquema del teclado debería ser TRISB = %11110000.
Desplazando un cero entre los pines 0, 1, 2, 3 y leyendo en busca de un cero en los pines 4, 5, 6, 7, obtendrías la tecla pulsada. Lo veo bien pero hace falta configurar el TRISx.
Pero una duda; las resistencias están a Pull-up o Pull-Down?, no se nota bien en el esquema ya que todos los pines del puerto B están a "1", creo que eso del TRISx es lo que te falta.

Saludos.
27/07/2010 #5


Respuesta: problema con programacion para EEPROM interna PIC 16F628A
vale, ya me va.. hay algun mas que otro error pero .. da igual, tiene solucion

ok, ahora mirare lo que dices carlos, pero antes he conseguido que funcionara sin la configuracion TRISBx
27/07/2010 #6

Avatar de ByAxel

Respuesta: problema con programacion para EEPROM interna PIC 16F628A
Que bien, por mi parte prefiero estar seguro de lo que hago... ya sabes no se confía cuando usan frases como "Tal vez, es posible, pero antes funcionaba así!!" jeje...
En fin, cada compilador tiene sus cosas... por cierto has probado activar los Pull-Up del PORTB en modo entrada?, de esa forma te ahorras resistencias.

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