PIC 16f84a Problema extraño (programacion), proyecto alarma

PA0 probablemente este flotando y el uC lo toma como 1

conecta el push-button del puerto A0 de esta manera (por el momento sin led)



quiza sea necesaria una subrutina de debounce
 
voy a probar el lunes, tengo el circuito en el trabajo. Pero sabes que mi viejo me dijo lo mismo!. les cuento ademas que uso los 5 volts del usb. que como sabran anda en 4.85 v en realidad. pero me fije en el datasheet y no le afecta.
 
Tuve un error de interpretación de tu programa, fijate que se enciende cada led de zona de PORTB si los bits de PORTA correspondientes están en 0, y no en 1 como habia dicho antes. Igualmente no cambia nada porque en la imagen de tu circuito los interruptores de zona son normalmente cerrados y darian un 1 en el PORTA.

los leds de las zonas debian quedarse "titilando" hasta que yo prima reset.
¿A que te referís?, ¿cuando arranca el programa? ¿o cuando una zona se activa (se lee un 0 en el bit de PORTA correspondiente)?, ¿o ambos?

no debian resetearse solos.

A ver... lo que querés decir es que cuando un sensor NC de zona detecta algo (manda un 0 al pin de PORTA correspondiente, RA3 por decir uno) lo que querés es que cuando deja de detectar (RA3 vuelve a 1) igual siga el led titilando. ¿Es eso lo que querés?

incluso, si yo doy un 0 al RA1 titilaria el RB1 para siempre (hasta que oprima RA0) aunque se vuelva 1 el RA1. y ha esto sumarsele alguna otra zona que yo de a encender. Por eso existe el ciclo comienzo (para que retenga las luces) y el ciclo boteo ( para que me mande todo a cero)

Parece que si, que queres mantener el led de zona titilando cuando se activo la misma, no importa que pase despues, hasta que se presione el boton de reset.

Bueno, el programa no hace eso. El pseudo-código que tenés hasta ahora sería:

Código:
comienzo
  apaga leds de zonas de PORTB

booteo
  ¿se presiono boton de reset?
  por el si: va a comienzo
  por el no:
    enciende cada led de zona de PORTB si los bits de PORTA correspondientes están en 0
    espera
    apaga leds de zonas de PORTB
    espera
    va a booteo

pero precisás algo como

Código:
comienzo
  apaga leds de zonas de PORTB
  pone a 0 variable de retención

booteo
  ¿se presiono boton de reset?
  por el si: va a comienzo
  por el no:
    lee PORTA
    si algun bit de PORTA se puso en 0, escribe 1 en el bit correspondiente en la variable de retención
    enciende cada led de zona de PORTB si los bits de variable de retensión correspondientes están en 1
    espera
    apaga leds de zonas de PORTB
    espera
    va a booteo

¿Se entiende la modificación?, como el único momento en que se pone a 0 la variable de retención es al inicio o cuando se presiona reset, cuando se detecte que se activo una zona el led siempre quedará titilando hasta que se de el reset, porque encender el bit correspondiente de PORTB no depende de lo que haya en PORTA (que sería un pulso), sino de lo que hay escrito en la variable de retención.
 
mabauti dijo:
PA0 probablemente este flotando y el uC lo toma como 1

conecta el push-button del puerto A0 de esta manera (por el momento sin led)



quiza sea necesaria una subrutina de debounce

¿No crees que la resistencia va en el positivo? Ya que el negativo sin resistencias indica 0 al pulsar el botón, lo tienes al revés.
 
no, lo que se esta haciendo ahi es una referencia a 0 volts... por que? es debido a que cuando pulsamos el boton generamos la diferencia de potencial sobre la resistencia, y son los bornes de esta la que tiene los 5 volts (ya que pasa toda la corriente a traves de esta).

¿No crees que la resistencia va en el positivo?
si la resistencia va en el postivo siempre estariamos diciendo 0 volts.

si la resistencia va en el negativo siempre estariamos diciendo 0 volts.
la resistencia no nos dice si son 0 volts en realidad otra forma de verlo es.... que tensión le quedara mas cerca al pic para llegar!? (nunca considerar esto para dos resistencias, ya que hay division de tension)

nuevamente gracias por tu interes!.
 
Hay una etiqueta de código.
Ejemplo:
Código:
-------------------------------------
COMO QUEDO EL PROGRAMA ORIGINAL
-------------------------------------



list p=16F84A
#include <p16F84a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC

j equ h'1F'
k equ h'1E'
h equ h'1C'
i equ h'1B'
f equ h'1A'
e equ h'10'
TIEMPO equ h'09'
org 0


;****************************************************

;Definiendo A

bsf STATUS,5
movlw b'1111111'
movwf PORTA
bcf STATUS,5


;Definiendo B

bsf STATUS,5
movlw b'00000000'
movwf PORTB
bcf STATUS,5


;****************************************************
; Puerto A
; 0-Reset 1-Zona1 2-Zona2 3-Zona3 4-Zona4
;
; Puerto B
; 0-Encendido 1-Zona1 2-Zona2 3-Zona3 4-Zona4;
;
;****************************************************

movlw d'70'
movwf TIEMPO

;****************************************************
;
; TIEMPO DE ON/OFF EN LUZ
;
; para simular poner en 1
; para practica poner en 70
;
;****************************************************


mloop movlw b'00000001'
movwf PORTB

movlw b'00000000'
movwf h
movwf j
movwf k
movwf i
movwf f
movwf e


jloop movfw PORTA
movwf k

btfsc k,0
goto mloop

xorlw b'00011111'
iorwf h,f

movfw h
movwf PORTB


;***** Bucle *****
movfw TIEMPO
movwf j
aloop movwf e
bloop decfsz e,f
goto bloop
decfsz j,f
goto aloop
;*****


movlw b'00000001'
movwf PORTB


;***** Bucle *****
movfw TIEMPO
movwf j
zloop movwf e
xloop decfsz e,f
goto xloop
decfsz j,f
goto zloop
;*****

goto jloop


end





-----------------------------------------------------------
SEGUNDO PROGRAMA *** hace lo mismo
-----------------------------------------------------------



list p=16F84A
#include <p16F84a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _RC_OSC

j equ h'1F'
k equ h'1E'
h equ h'1C'
e equ h'10'
TIEMPO equ h'09'


org 0


;****************************************************

;Definiendo A

bsf STATUS,5
movlw b'1111111'
movwf PORTA
bcf STATUS,5


;Definiendo B

bsf STATUS,5
movlw b'00000000'
movwf PORTB
bcf STATUS,5


;****************************************************
; Puerto A
; 0-Reset 1-Zona1 2-Zona2 3-Zona3 4-Zona4
;
; Puerto B
; 0-Encendido 1-Zona1 2-Zona2 3-Zona3 4-Zona4;
;
;****************************************************

movlw d'1'
movwf TIEMPO

;****************************************************
;
; TIEMPO DE ON/OFF EN LUZ
;
; para simular poner en 1
; para practica poner en 70
;
;****************************************************


mloop movlw b'00000001'
movwf PORTB
movwf h




jloop movfw PORTA
movwf k

btfsc k,0
goto mloop

btfss k,1
bsf h,1

btfss k,2
bsf h,2

btfss k,3
bsf h,3

btfss k,4
bsf h,4

movfw h
movwf PORTB


;***** Bucle *****
movfw TIEMPO
movwf j
aloop movwf e
bloop decfsz e,f
goto bloop
decfsz j,f
goto aloop
;*****


movlw b'00000001'
movwf PORTB


;***** Bucle *****
movfw TIEMPO
movwf j
zloop movwf e
xloop decfsz e,f
goto xloop
decfsz j,f
goto zloop
;*****

goto jloop


end
Solamente tenés que apretar el botón que dice "código", copiar y pegar el codigo, y despues apretas denuevo el botón.
Lo digo por el que no quería copiar el código por no alargar el post.
 
Atrás
Arriba