TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: JosepTerol en 04 de Junio de 2014, 05:22:24
-
Muy buenas a todos
Este sistema lo quiero implementar en una maqueta, el funcionamiento es muy sencillo pero no carezco de suficientes conocimientos para realizarlo adecuadamente.
La idea es que mediante un pulsador me parpadee un led durante 5 segundos a una frecuencia de 0.5Hz (2 parpadeos por segundo).
El primer inconveniente que encuentro es que esto tiene que ir a una exposición y alimentado a pilas, con lo que nadie lo desconectara por la noche.
Sería necesario adaptar la pic a un estado de mínimo consumo cuando no recibe señal, creo que se le llama durmiente.
Voy muy perdido con el tema de pic, ya que a lo máximo que llego es a Arduino pero por un tema de coste de estas placas se me dispara.
He pensado utilizar la PIC 10F200, que creo que es la más económica que existe.
Si alguien tiene algún programilla similar os lo agradezco
-
Normalmente aqui no hacemos trabajos, mas bien ayudamos a hacerlos, sin embargo comprendo que si solo quieres hacer un trabajillo para tu hija no te vas a poner a aprender. Por tanto si lo que quieres es el esquema y el programa, te lo pongo yo mañana o este fin de semana.
Lo que si tendras que tener es para grabar el PIC y algunos conocimientos para montar el circuito, no muchos ya que son un par de resistencias un PIC y un LED y las tres pilas.
-
Agradecido.
Las pruebas las he realizado con arduino y funciona perfectamente, si alguien le puede interesar puedo colgar el programa y conexionado.
estoy intentando hacer algo con PIC, pero por falta de conocimientos y en este caso de tiempo, ya que el fin de curso esta a la vuelta de la esquina, me será imposible.
No entiendo como es tan sensicllo cualquier programa con Arduino y Pinguino y programar un fincionamiento directo en una pic es tan complejo.
Espero que algún dia alguien pueda realizar un convensor, creo que nos abrirá muchas puertas a los que no tenemos conocimientos
-
Para nada es complicado, programar en Arduino se parece mucho a hacerlo en ccs
mira este post, es con un pic diferente, pero la base es lo mismo
http://www.todopic.com.ar/foros/index.php?topic=4530.0 (http://www.todopic.com.ar/foros/index.php?topic=4530.0)
por cierto, para los moderadores... Podríais colocar una chincheta al post al que hago mención ya que creo que es de gran utilidad
-
Para nada es complicado, programar en Arduino se parece mucho a hacerlo en ccs
mira este post, es con un pic diferente, pero la base es lo mismo
http://www.todopic.com.ar/foros/index.php?topic=4530.0
Si cierto es lenguaje C tanto en uno como en otro.
por cierto, para los moderadores... Podríais colocar una chincheta al post al que hago mención ya que creo que es de gran utilidad
Ya esta con chincheta en el foro de C en los cursos, creo.
He pensado utilizar la PIC 10F200, que creo que es la más económica que existe.
No me extraña que sea barato, no tiene de nada :D :D ni vector de interrupciones, ni registro TRIS, ni registro OPTION, por no tener ni siquiera tiene las instrucciones RETURN ni RETFIE hay que arreglarse con RETLW :lol: :lol: Pero todas las incomodidades que tiene lo suple en el precio, es un buen PIC para hacer cosas de muy bajo coste (0,31$, precio Microchip), la verdad que nunca lo habia programado y me volvi un poco loco, espero que funcione bien.
; **** Encabezado ****
list p=10F200
#include P10F200.inc
__CONFIG 0FFB ;__CONFIG _CP_OFF & _WDT_OFF & _MCLR_ON
CBLOCK 0X10 ;definimos donde empiezan los registros de RAM
PDel0
PDel1
CONTADOR
ENDC
#DEFINE PULSADOR GPIO,1 ;definimos los pines a usar
#DEFINE LED GPIO,0 ;los puedes cambiar si quieres
ORG 0x00 ;cuando haya interrupcion tambien vendra aqui, ya que este PIC no tiene
GOTO INICIO ;vector de interrupciones.
INICIO
MOVLW 0X3F ;para configurar la interrupcion por cambio de estado
OPTION ;se usa la instruccion "OPTION", ya que el registro OPTION no existe fisicamente
MOVLW 0X7E
MOVWF OSCCAL
MOVLW 0X02 ;configuramos GPIO,1 como entrada, para pulsador
TRIS GPIO ;se usa la instruccion "TRIS" ya que el registro TRIS no esta implementado fisicamente
BTFSC STATUS,GPWUF ;chequeamos el bit STATUS,GPWUF, este flag indica que hubo un cambio en GP0, GP1 o GP3
GOTO ISR ;si el FLAG esta a 1, haremos la secuencia de encendido y apagado del LED
DORMIR
SLEEP ;aqui estara hasta que una pulsacion lo despierte
GOTO DORMIR
;***********En el ISR no se hacen copias de respaldo de registros, porque solo hay este programa, no hace nada mas***************
;***********Realmente no es una interrupcion, o si, ya no lo se, pero no se puede volver con un RETFIE, no existe****************
;***********Tampoco tiene la instruccion "RETURN" solo tiene "RETLW", MPLAB si pones RETURN lo sustutiye por RETLW***************
ISR
BCF STATUS,GPWUF ;borramos flag de "interrupcion" por cambio de estado
BTFSC PULSADOR ;esperamos hasta que se suelte el pulsador
GOTO ISR
ISR_1
BSF LED ;encendemos el led
CALL DEMORA ;llamamos retardo de 500mS
BCF LED ;apagamos led
CALL DEMORA ;llamamos retardo de 500mS
INCF CONTADOR,1 ;para contar 5 veces esta secuencia
MOVLW .5 ;cambiando este numero se cambia el numero de veces que realiza la secuencia
SUBWF CONTADOR,0
BTFSS STATUS,Z ;comprobamos que llego a 5, STATUS,Z=FLAG 0
GOTO ISR_1 ;no llego a 5, repite secuencia
CLRF CONTADOR
GOTO INICIO ;llego a 5, acaba secuencia, no se puede poner un RETFIE
;porque no existe y se pierde el programa, tampoco existe RETURN, SOLO RETLW
DEMORA
movlw .239 ; 1 set numero de repeticion (B)
movwf PDel0 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
RETLW ; 2+2 Fin.
END
Cuando se presiona el pulsador, sale de SLEEP y al soltarlo realiza la secuencia.
Esta hecho con el esquema adjunto, la resistencia de 330 si ves que alumbra poco bajasela un poco, pero no mucho si no cascara el LED.
Si quieres puedes ponerle otro LED (arreglariamos el programa) y se podrian hacer unos juegos de luces mas vistosos.