Autor Tema: Problema con el pic16F84A y cerradura electronica  (Leído 10601 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado difer1125

  • PIC10
  • *
  • Mensajes: 16
Problema con el pic16F84A y cerradura electronica
« en: 10 de Mayo de 2008, 15:25:02 »
Amigos tengo un problema y necesito solucionarlo lo mas pronto posible con la ayuda de ustedes, ya que es un proyectico de la u.

Estoy realizando un proyecto sencillo de una cerradura electroinica que consulte en esta pagina http://jap.hu/electronic/combination_lock.html me iagino que alguno de ustedes ya la conoce. este es el esquema.

Ya lo he montado, el problema surge con el pìc, grabo el .hex con el winpic y todo ok. pero cuando lo manto en el circuito no hace absolutamente nada, nisiquiera pita, me parece super raro, probe con otro quemador de pics y igual, todo ok pero el el montaje nada de nada, este es el codigo fuente,

;**********************************************************************
; *
; Filename: cl2.asm *
; Date: *
; File Version: Combination lock rewritten *
; *
; Author: el@jap.hu *
; http://jap.hu/electronic/ *
;**********************************************************************
;NOTES
;
; the rewritten combination lock has the following changes:
;
; - no multiplexer is needed (the old version used a generic devboard)
; - no row diodes needed (rows are never driven HIGH)
; - low power consumption due to keyboard wake-up
; - stores the code in the internal EEPROM
; - user defined codelength and pulse output
; - user adjustable running frequency
; - improved code changing function with a "change" indicator LED
;
; PIC ports used:
;
; PA0-3 outputs: row select pulldown outputs (tristate or driven LOW)
; PB1 output: code change indicator LED
; PB2 output: output pulse to control a relay
; PB3 output: piezo beeper output
; PB4-PB7 inputs: column inputs with internal pullup
;
;**********************************************************************
;HISTORY
;
; 020-20010929 rewrite started
; 021-20011022 udelay calibrated to 100 usec (4, 10 MHz)
; 022-20011022 scan, input and compare functions work
; 023-20011022 code change function works
;
;**********************************************************************
list p=16f84a
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

#include <p16F84a.inc>

mhz EQU D'10' ; processor frequency in MHz
pulsewidth EQU D'150'; delay in 20ms steps (150=3 sec)
clen EQU 4 ; length of code

; EEPROM contents
ORG 0x2100
de "123456" ; default code (clen chars are used)
; which is stored in EEPROM

; RAM registers
ram_start EQU 0x0c
dcnt0 EQU ram_start+1 ; delay counter 0
dcnt1 EQU ram_start+2 ; delay counter 1
dcnt2 EQU ram_start+3 ; delay counter 2
beepcnt EQU ram_start+4 ; beep cycle counter
keycode EQU ram_start+5
rowcnt EQU ram_start+6
colcnt EQU ram_start+7
colstatus EQU ram_start+8


cod EQU ram_start+9 ; actual code
cod_end EQU cod+clen

readlen EQU cod_end
readbuf EQU cod_end+1
readbuf_end EQU readbuf+clen

tmptr EQU readbuf_end ; pointer for comparing and copying readbuf
tmbyte EQU readbuf_end+1; temp storage for comparing and copying

vectors ORG 0
goto main
nop
nop
nop
retfie

keytable ;determine pressed key's real code from scancode
movf keycode, W
addwf PCL, F
dt 0x60
dt "123a"
dt "456b"
dt "789c"
dt "*0#d"

eep_read ; read EEPROM contents to RAM from cod to cod_end-1
movlw cod
movwf FSR
clrf EEADR

eep_0 ;bcf INTCON, GIE
bsf STATUS, RP0
bsf EECON1, RD
bcf STATUS, RP0
;bsf INTCON, GIE
movf EEDATA, W
movwf INDF

incf FSR, F
incf EEADR, F

movlw cod_end
subwf FSR, W
bnz eep_0
return

eep_write ; save RAM contents to EEPROM from cod to cod_end-1
movlw cod
movwf FSR
clrf EEADR

eep_1 movf INDF, W
movwf EEDATA
;bcf INTCON, GIE
bsf STATUS, RP0
bcf EECON1, EEIF
bsf EECON1, WREN
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1, WR

; wait for write completition
eep_2 bcf STATUS, RP0
;bsf INTCON, GIE
nop
nop
;bcf INTCON, GIE
bsf STATUS, RP0
btfss EECON1, EEIF
goto eep_2
bcf STATUS, RP0
;bsf INTCON, GIE

incf FSR, F
incf EEADR, F

movlw cod_end
subwf FSR, W
bnz eep_1
return

udelay ; delay W * 100 usec
movwf dcnt0

udelay0 movlw 8 * mhz
movwf dcnt1

udelay1 decfsz dcnt1, F
goto udelay1

decfsz dcnt0, F
goto udelay0

return

beep movwf beepcnt
beep0 bsf PORTB, 3 ; beepctl bit
movlw 3
call udelay
bcf PORTB, 3 ; beepctl bit
movlw 3
call udelay
decfsz beepcnt, F
goto beep0
return

keyscan ; scan the keyboard
clrf keycode
movlw 4
movwf rowcnt

movlw 0xfe
tris PORTA ; select row 0

rowscan movlw 0xa0
call udelay
swapf PORTB, W
movwf colstatus

movlw 4
movwf colcnt

colscan incf keycode, F
rrf colstatus, F
btfss STATUS, C
goto keytable ; a key was found

decfsz colcnt, F
goto colscan

bsf STATUS, C

bsf STATUS, RP0
rlf TRISA, F ; select next row
bcf STATUS, RP0

decfsz rowcnt, F
goto rowscan
retlw 0 ; no key was found

main ; program starts here
clrf PORTA
clrw
tris PORTA ; porta all output
clrf PORTB
movlw 0xf0 ; pb4-7 inputs
tris PORTB
bsf STATUS, RP0 ; bank 1
bcf OPTION_REG, NOT_RBPU ;internal pullups on port B enabled
bcf STATUS, RP0 ;bank 0

warm movlw 0xf0
call beep
call eep_read ; read code from eeprom to ram at cod

loop clrf PORTB ; clear output

call read ; read code from keyboard into readbuf
movlw cod
call compbuf ; compare code in readbuf with code at cod
bnz loop ; the code is different

; the code matches, check which enter (#*) was pressed

movlw '*'
subwf keycode, W ; * changes code
bz codechange

pulseout ; # operates output
movlw 0x04 ; RB2 is output
movwf PORTB

movlw pulsewidth
movwf dcnt2

out0 movlw d'200'
call udelay
decfsz dcnt2, F
goto out0

goto loop

codechange movlw 2 ; * changes code
movwf PORTB ; indicate changing the code
call read ; read new code into readbuf

movlw cod
call copybuf ; copy new code into cod

call read ; read new code twice
movlw cod ; and check if the new code is confirmed
call compbuf ; wrong code entry, restart with the original code
bnz warm

; new code is comfirmed twice, store into eeprom
call eep_write
goto loop

read clrf readlen

readloop ; wait until no key is pressed
clrw
tris PORTA ; porta all LOW
movf PORTB, W
andlw 0xf0 ; keymask
xorlw 0xf0
btfss STATUS, Z
goto readloop

movlw 0xf0 ; wait 24 ms
call udelay ; (debounce)

; no key pressed, go to sleep
movf PORTB, W
movlw 1<<RBIE ; enable RB port change wake-up
movwf INTCON
sleep

key_pressed
call keyscan
andlw 0xff
movwf keycode
bz readloop

movlw 0xf0 ; wait 24 ms
call udelay ; (debounce)

; check if the buffer is full
movlw clen
subwf readlen, W
bnz read_notfull

; buffer is full, can return if an enter key (*#) is pressed

; check for ENTER
call read_chkenter
bnz read_notenter

; enter is pressed, return
movlw 0x40
call beep
movf keycode, W
return

read_notenter
; buffer is full, but more characters entered
; shift the buffer
movlw readbuf+1
movwf FSR

read_shift movf INDF, W
decf FSR, F
movwf INDF
incf FSR, F
incf FSR, F
movlw readbuf_end
subwf FSR, W
bnz read_shift

decf readlen, F

read_notfull call read_chkenter ; if the buffer is not full and an
bz read ; enter key (*#) is pressed, clear buffer

movlw 0x40
call beep

movlw readbuf
addwf readlen, W
movwf FSR
movf keycode, W
movwf INDF
incf readlen, F
goto readloop

read_chkenter ; check if a * or # is pressed which indicates
; the end of entry
movlw '#'
subwf keycode, W
btfsc STATUS, Z
return ; Z=1, enter
movlw '*'
subwf keycode, W
return

compbuf ; compare read buffer to a code in RAM at W

movwf tmptr ; compare pointer
clrf readlen ; compare index starts from 0

comp0 movlw readbuf
addwf readlen, W
movwf FSR
movf INDF, W
movwf tmbyte ; the read byte which is compared

movf tmptr, W
addwf readlen, W
movwf FSR
movf INDF, W ; the byte readbuf is compared to
subwf tmbyte, W
btfss STATUS, Z
return ; Z=0: the code is different

incf readlen, F
movlw clen
subwf readlen, W
bnz comp0 ; compare next character
; Z=1: the code is the same

return

copybuf ; copy readbuf to RAM at W
movwf tmptr ; copy pointer
clrf readlen ; copy index starts from 0

copy0 movlw readbuf
addwf readlen, W
movwf FSR
movf INDF, W
movwf tmbyte ; the read byte which is copied

movf tmptr, W
addwf readlen, W
movwf FSR
movf tmbyte, W ; the byte from readbuf
movwf INDF

incf readlen, F
movlw clen
subwf readlen, W
bnz copy0 ; copy next character

return

end



creo que el programa funciona bien ya que lo simule en proteus y trabaja de maravilla. no se si sera que el pic esta malo,pero entonces porque si graba y lo leo desde el winpic, lo verifico y todo ok, pero nada.

una duda el pin de MCLR puede ir directamente a VDD o seria mejor conectar una resistencia, y otra cosa en mi montaje puse un cristal de 4 Mhz pero el codigo dice que es para 10Mhz no se si sera ese el problema, conseguire uno de 10 haber que pasa, pero imagino que con 4 deberia al menos dar una señal de vida.

Espero me puedan ayudar es con el PIC16F84A 


 

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #1 en: 10 de Mayo de 2008, 22:53:32 »
Saludos difer!  :-)
Bienvenido al foro!  :-/

Bueno si te funcionó perfecto en proteus yo diría que no hay que dudar tanto del software sino del hardware...
Verifica bien tu circuito...
Ahora bien, lo que dices del oscilador sí que es importante... recuerda que lo programaste con el fuse "HS", o sea que debe ser por lo menos de 10MHz el cristal...
Lo que puedes hacer si no tienes de 10 sino de 4 es cambiar la configuración de los fuses, en vez de HS y 10 coloca XT y mhz EQU D'4'... y listo, puedes usar el de 4MHz, de todos modos no creo que en tu proyecto el tiempo sea tan crítico.
En cuanto a lo que dices del reset, en este hilo puedes conseguir suficiente información.

De todos modos ya seguro algún otro experto te dará más ayuda...
Ok, nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado difer1125

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #2 en: 11 de Mayo de 2008, 18:09:03 »
amigo una pregunta, el que el pic grabe coorectamente quiere decir que funciona o hay posibilidades de que este malo, ya que cuandio lo testeo no marca ningun voltaje de salida en ninguno de los pines para esto. hay alguna forma de verificar si esta malo?.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #3 en: 11 de Mayo de 2008, 19:56:57 »
Allá por el año 2003 este fue mi primer acercamiento real a los PICs...

Yo monté el circuito y el programa que posteaste, y me funcionó de lujo. Luego lo modifiqué a gusto y lo transformé en una alarma...
Si cambiás a 4mhz, asegurate de cambiar el fuse correctamente como te lo indico firepic...
A 4mhz tmb debería funcionar(creo haberlo probado y todo). Lo único que cambia es el sonido del buzzer y el tiempo de respuesta del teclado(y accionamiento del relay).

Saludos!


"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #4 en: 12 de Mayo de 2008, 11:34:53 »
Saludos!  :-)
Bueno difer lo que yo hago generalmente para probar que el pic no tiene problemas es insertar al inicio del código una línea que ponga a +5 uno de los pines libres... bsf, portX,X... y en ese pin conectas mediante una resistencia un led con cátodo a tierra... grabas el pic, y pruebas que todo esté bien conectado... entonces, si se enciende el led, el problema no es el pic... si no se enciende... puedes empezar a dudar de tu microcontrolador  :D
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado difer1125

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #5 en: 12 de Mayo de 2008, 14:24:44 »
amigo me podrias pasar un ejemplo para poner prender el led, es que yo no programo, y asi poder probar al pic. otra cosa entonces a vdd y mclr pongo +5v y a vcc -5v, luego por uno de los pines pongo el led al positivo y luego a tierra, y asi compruebo si el pic esta bueno.

prodrias pasarme el codigo para hacer la prueba.

Gracias.

Desconectado difer1125

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #6 en: 12 de Mayo de 2008, 14:29:00 »
Allá por el año 2003 este fue mi primer acercamiento real a los PICs...

Yo monté el circuito y el programa que posteaste, y me funcionó de lujo. Luego lo modifiqué a gusto y lo transformé en una alarma...
Si cambiás a 4mhz, asegurate de cambiar el fuse correctamente como te lo indico firepic...
A 4mhz tmb debería funcionar(creo haberlo probado y todo). Lo único que cambia es el sonido del buzzer y el tiempo de respuesta del teclado(y accionamiento del relay).

Saludos!


Amigo aun tienes aquellas modificaciones por ahi, para yo implementarlas en mi proyecto despues de solucionar el problema que os he comentado




Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #7 en: 12 de Mayo de 2008, 14:57:09 »
Saludos difer!  :-)

amigo me podrias pasar un ejemplo para poner prender el led, es que yo no programo

Mira si no sabes programar, es buen momento para que comiences a aprender! Porque... cómo puedes trabajar con microcontroladores si no sabes cómo programarlos?  :shock:  No puedes depender siempre de otros! Así que esfuérzate e inténtalo, que no es tan difícil... ánimo pues! En este foro conseguirás todo lo necesario para aprender, y si tienes dudas estamos para ayudarte!

De todos modos, para que pruebes tu pic... por aquí tengo un programa que siempre uso cuando tengo dudas sobre el pic... de hecho lo llamo "testpic"  :D
Esta compilado en basic, el código es este:

Código: [Seleccionar]
        led Var PORTB.3
        porta=0
        portb=0

loop: high    led
        pause   500
        low     led
        pause   500
        goto    loop
        END

Entonces conecta el led en el portb.3, que es el pin 9 de tu pic16f84A...a través de una resistencia de 470 ohms puede ser... recuerda colocar el cátodo del lado de la tierra...

Como verás el programa lo que hace es encender y apagar el led cada segundo (dura 500ms encendido y otros tantos más apagado)... eso lo hace indefinidamente...
Te adjunto el .hex para que lo grabes en el pic... trata de hacer esta prueba con el pic aparte, no donde tienes los demás componentes de tu proyecto...

otra cosa entonces a vdd y mclr pongo +5v y a vcc -5v, luego por uno de los pines pongo el led al positivo y luego a tierra, y asi compruebo si el pic esta bueno.

No sé qué es ese Vcc del que hablas, y mucho menos esos -5V  :shock:
La alimentación del pic es: Vdd=+5V, Vss=GND (cero voltios)
El MCLR lo puedes colocar a través de una resistencia de 10k a +5V...

Ok has la prueba y nos cuentas.
Nos leemos!  :mrgreen:

« Última modificación: 12 de Mayo de 2008, 14:59:49 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado difer1125

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #8 en: 13 de Mayo de 2008, 13:31:33 »
bueno firepic, primero que nada agradecerte por el programa para testear mi pic y voy a seguir tu consejo, aprendere a desarrollar mis propios programas, se que aqui encontrare todo lo necesario para hacerlo.

Bueno al grano, graba el programa TESTPIC con mi TE20 2.0 en el pic, luo conecte todo como dijiste, al pin 9 conecte una resistencia 470ohm y el led con el catodo a tierra, luego a VDD=5v MLCR=5v con resistecia de 10k y VSS=0v y la verdad el pic no hizo absolutamente nada, con el tester medi los voltajes para asegurarme de los 5v y perfecto, pero por el pin 9 marcaba 0v osea que el led nunca prendio.

Luego con el tester medi los voltajes en cada uno de los pines con respecto a GND y el pin 15 y 16 marcaban 3 y 2v respectivamente, pero debe haber algo fallando en ese pic porque asi no es como deberia ser. Ahora mi pregunta, si es por el pin 9 de mi 16F84A por donde tengo que conectar el led?, imagino que si pero por si las dudas lo pregunto.

Bueno ahora en la tarde probare otro pic que compre y les comento. pero antes quisiera confirmar lo anterior y dar por OUT el pic.

Gracias

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #9 en: 13 de Mayo de 2008, 14:02:20 »
Saludos difer!  :-)
Confirmado, es el pin 9.
Antes de que des por "out" el pic... te pregunto... ese programa que usas para grabar el pic...bueno no lo conozco, pero lo que quiero saber es: con qué opciones de configuración lo estás grabando? Eso también puede incidir en que funcione o no el programa...
Ok nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado difer1125

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #10 en: 13 de Mayo de 2008, 14:23:06 »
pues amigo yo uso el winpic800 con el programador TE20, y la configuracion alguien me comento que no tenia que preocuparme par eso con el codigo que poste arriba, ya que en la parte superio lleva esto:

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

y segun me cuentan esta linea configura automaticamente el programa con el que se va a quemar un pic.

Lo que no se es si con el programa que tu me pasaste tengo que configurar algo en especial.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #11 en: 13 de Mayo de 2008, 14:27:46 »
Bueno ese programa yo lo hice para un oscilador de 4Mhz, que es el que dijiste que tenías...
Entonces no sería _HS_OSC, sino _XT_OSC
Revisa ese detalle y ve qué tal...
Nos leemos!  :mrgreen:
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado difer1125

  • PIC10
  • *
  • Mensajes: 16
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #12 en: 13 de Mayo de 2008, 15:06:26 »
amigo pues creo que esta bien HS_OSC ya que yo cambie el oscilador de 4Mhz que tenia anteriormente por uno de 10mhz, pero aun asi siguio sin funkar. Pero con el programa que tu me pasaste tengo que ponerle oscilador para probarlo, o no es necesario?, ya que yo lo probe sin oscilador.

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #13 en: 13 de Mayo de 2008, 15:17:58 »
Bueno sin oscilador no te va a hacer ni pio...  :D
Tienes que colocarle oscilador, claro!
Bueno si tienes un cristal de 10MHz si es HS, pero entonces déjame cambiarte el código para que corresponda a 10MHz...
Al rato te mando el nuevo .hex....
Simplemente hay que incluir al inicio del codigo que coloqué antes esta instrucción:
define osc 10
« Última modificación: 13 de Mayo de 2008, 15:22:28 por firepic »
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web

Desconectado firepic

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1130
    • JC Servicios
Re: Problema con el pic16F84A y cerradura electronica
« Respuesta #14 en: 13 de Mayo de 2008, 15:25:32 »
Ok ahí te va el archivo .hex para que lo cargues en el pic y vuelvas a probar... eso sí, colocándole tu cristal de 10MHz entre los pines 15 y 16... y de esos pines debes colocar dos condensadores de 22pF... de cada pin por medio del condensador a tierra.
Dale pues, nos leemos!
"Por la presunción solo se ocasiona una lucha, pero con los que consultan juntos hay sabiduría" (Proverbios 13:10).
Visita Mi Sitio Web


 

anything