Duda en programa de pic 16f628a

muy buenas amigos, por aqui yo otra vez consultandoles a ustedes que son expertos jeje..

recientemente me ha dado por hacer un circuito que lleva un pic el 16F628A, el circuito es para un proyecto del cual no quiero hablarles por el momento, pues quiero (de llegar a culminarlo) que sea un aporte para el foro, yo ya les digo de un solo, no se nada de pic ni de programacion pero me estoy libro un libro al respecto. bueno voy al grano, son dos preguntas las que tengo que ya tope, no me da por el momento la cabeza, a lo mejor para ustedes sea facil y hasta se rian un poco.

resulta que en mi circuito yo quiero encender una secuencia de leds, pero la secuencia debe estar condicionada, o algo asi.

hay un sensor al puerto A0 que es un switch, si el sensor esta en estado logico "0" debera encenderse el led1, si esta en estado logico "1" debera apagarse el led1 y al mismo tiempo que entrara en estado logico "1" el sensor, debera pasar a la secuencia.

mis problemas son dos..!!

1- al poner en marcha el circuito, el sensor cambio sus estados logicos mediante el swith pero le led1 no cambia, si al poner el circuito en marcha el sensor esta en estado logico "1" el led se mantiene apagado, y no enciende aunque yo cambie el estado logico del sensor.
por el contrario si pongo a andar el circuito estando en estado logico "0" el led1 se mantiene encendido y ya no se apaga, aunque se cambie el estado logico del sensor,

2- el programa de secuencia corre al nomas poner a andar el circuito, cuando lo que yo quiero es que corra unos 5 segundos despues que el sensor entro en estado logico "1"

les adjunto imagen del circuito, el hex y el circuito en proteus v8

les agradeceria si alguien pudiera darme una mano...!!!

1514978_618626761533635_171287901_n.jpg


Código:
cmcon = 7                     ;convierte todo el puerto a en digital
sensor  var porta.0  ;etiqueta del puerto
led1    var portb.4  ;etiqueta del puerto
led2    var portb.3  ;etiqueta del puerto
led3    var portb.2  ;etiqueta del puerto
led4    var portb.1  ;etiqueta del puerto
led5    var portb.0  ;etiqueta del puerto


if sensor = 0 then
    HIGH led1
    ELSE 
    LOW LED1 
    endif
        
programa:
sequencia var byte       
   for sequencia = 1 to 10
   high led2
   pause 500
   low led2
   pause 500
   high led3
   pause 500
   low led3
   pause 500
   high led4
   pause 500
   low led4
   pause 500
   high led5
   pause 500
   low led5
   pause 500
   next
   pause2000
   GOTO programa
   end
...
 

Adjuntos

  • archivos.zip
    21.6 KB · Visitas: 6
Última edición:
Buenas noches

Creo que el error lo cometes con la forma de conectar el PuertoA,0

Pongas como pongas el interrupor, el PuertoA,0 siempre estará a "1".

Tendrías que poner el interruptor de forma que ponga a masa el PuertoA,0.

En serie con los Led tienes que poner las Resistensias limitadoras.

La Resistencia de 47K no cumple ninguna función

El Puerto A lo tienes que programar como entrada y activar las Resistencias de Pull Up.

Sal U2
 
Última edición:
El esquema está bien, no requiere Pull-Up, además este PIC no tiene eso en el PORTA.

Si me simula.
Inicia simulación con RA0 en 1, el LED1 se mantiene apagado.
Inicia simulación con RA0 en 0, el LED1 se mantiene encendido.
Deberia ser al revez?

Dos cosas.
- Si buscas que el LED1 se apague o prenda en plena simulación al accionar el interruptor entonces el bucle debe de estar por encima del IF.
- Se que es simulación pero mejor coloca resistencias a cada LED; en la simulación funcionan bien las de 100 Ohm.

Saludos.
 
pues como lo veo a cada pulso del swich debera cambiar el led, segun lo que explicas asi como un secuenciador o me equivoco

estas en lo correcto, si el sensor esta en estado logico "0" debe encerder el led1 que esta en "potb.4" si esta en estado logico "1" debera apagarlo. pero no lo hace, no lo apaga cuando entra en estado logico "1"

y despuyes tengo que al apagarse el led1 debe seguir la secuencia de apagado y encendido de los otros led, pero la secuencia se corre al nomas hechar a andar el circuito.

sigo batallando pero es dificil para mi pues es mi primer programa, empiezo desde cero, pero se que en unos cuantos dias lo habre resuelto, gracias por sus comentarios.!
 
Te recomiendo que si estas comenzando con los pic's y quieres realmente aprender sobre su funcionamiento y comenzar a hacer algunos programas basicos, comiences con el 16f84 y con lenguaje Assembler, puedes encontar muchisimo material, para empezar, los datasheet's de microchip y los application notes, videotutoriales por ejemplo aqui y aqui, y tutoriales en general como estos
 
@chepao, si el if sensor = 0 then no esta dentro del bucle, nunca va a realizar lo que buscas... como antes indique.
Coloca el label programa arriba del IF, funciona pero demora ya que tiene que realizar la secuencia que dura 40 segundos :eek: + los 2s al final del For... va, el PIC pierde mucho tiempo sin hacer nada

Si buscas que sea inmediato el cambio necesitas interrupciones ya sea por los pulsos o generando el tiempo de demora, en éste último caso ya no necesitas agregar Pause... analízalo!

Saludos.
 
Atrás
Arriba