Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
hola a todos, por favor alguien sabe sí con un 16f84a ó un 16f628a puedo usar programación in circuit? y sí es así como lo hago?
ya lo he hecho con otros pics como por ejemplo el 16f877a y me funciona pero con estos no que sera lo que estoy haciendo mal, les agradezco su ayuda...
muchas gracias por ir orientandome ya poco a poco voy entendiendo logre aumentar el tiempo por 10 segundos puedo aumentar a 1 min aca dejo el codigo a 10 seg
Código:@ DEVICE PIC16F628A @ DEVICE INTRC_OSC_CLKOUT @ DEVICE WDT_OFF @ DEVICE PWRT_OFF @ DEVICE LVP_OFF @ DEVICE CPD_OFF @ DEVICE PROTECT_OFF DEFINE OSC 4 CMCON = 7 OPTION_REG = %10000101 MAS_SEGUNDO Var Byte ; Definir variable second MAS_TIEMPO VAR BYTE TIME1 VAR WORD LED_1 var PORTB.0 LED_2 VAR PORTB.1 TRISB = %00111110 TRISA = %11000000 PORTA = %00000000 PORTB = %00000000 ON INTERRUPT GOTO MI_INTERRUPCION INTCON = %10100000 DISABLE MI_INTERRUPCION: mas_tiempo=mas_tiempo+1 if mas_tiempo < 61 then endinterrupt mas_tiempo=0 toggle led_1 MAS_SEGUNDO=MAS_SEGUNDO+1 IF MAS_SEGUNDO>=10 THEN SEGUNDO=0 TOGGLE LED_2 ENDIF
hola reyvilla mira pude aumentar el tiempo de encendido por 10 seg luego se apaga por 10 seg y se repite el bucle como podria hacer el codigo para que enciende led_2 x 10 seg y se apaga por 5 seg y asi se repita el bucle voy entendiendo muchas gracias espero puedas seguir ayudandome
amigo mira probando y probando hago este codigo pero no se si estara bien creo que me estoy enredando cada vez mas y no quiero si practico y pruebo es para aprender pero quisiera saber en que fallo
este codigo lo que le indico es cuente x 10 seg cuando llegue a 10 seg prenda LED_2 por 5 seg luego se apague a los 15 seg osea:
0--10seg-->apagado led_2
10-15seg-->prendido led_2
15-25seg-->apagado led_2
25-30seg-->prendido led_2
pero no me hace eso, solo respeta los 10 seg al empezar el codigo, osea se prende LED_2 a los 10 seg luego se apaga a los 15 seg
0--10seg-->apagado led_2
10-15seg-->prendido led_2
15-20seg-->apagado led_2
20-25seg-->prendido led_2
como hacer para que me respete los 10 seg de apagado siempre
aca dejo el codigo que estoy haciendo en verdad agradesco su ayuda
Código:@ DEVICE PIC16F628A @ DEVICE INTRC_OSC_CLKOUT @ DEVICE WDT_OFF @ DEVICE PWRT_OFF @ DEVICE LVP_OFF @ DEVICE CPD_OFF @ DEVICE PROTECT_OFF DEFINE OSC 4 CMCON = 7 OPTION_REG = %10000101 Hour Var Byte Minuto Var Byte Segundo Var Byte MAS_TIEMPO VAR BYTE TIME1 VAR WORD LED_1 var PORTB.0 LED_2 VAR PORTB.1 TRISB = %00111110 TRISA = %11000000 PORTA = %00000000 PORTB = %00000000 ON INTERRUPT GOTO MI_INTERRUPCION INTCON = %10100000 INICIO: IF led_2=1 THEN for TIME1=1 to 1000 pause 5 next TIME1 low led_2 ENDIF GOTO INICIO DISABLE MI_INTERRUPCION: mas_tiempo=mas_tiempo+1 if mas_tiempo < 61 then endinterrupt mas_tiempo=0 toggle led_1 SEgundo=Segundo+1 IF SEgundo>=10 THEN SEgundo=0 high LED_2 ENDIF endinterrupt: INTCON.2=0 RESUME ENABLE END
quisiera que empiece por respetar el tiempo que quiero darle que sea 10 seg exactos que este apagado y 5 seg exactos que este prendido de verdad muchas gracias por tu apoyo
DEFINE HSER_RCSTA 90h 'Set receive register to receiver enabled
DEFINE HSER_TXSTA 26h ' Set transmit register to transmitter enable
DEFINE HSER_BAUD 9600 ' Set baud rate
x var byte
y var byte
trisb=$00
x=2
INTCON=%11000000 'Habilita interrupciones de registro PEIE
on interrupt goto lee_serie
PIE1.5 = 1
ciclo:
portb=x
goto ciclo
Disable
lee_serie
hserin [x]
hserout [x]
resume
enable
Hola que tal, alguien podria hecharme una manita con las interrupciones en la comunicacion en serie...
He estado leyendo acerca del tema y ando un poco confundido...
esto es lo que he logrado hasta ahorita
Yo se que no es necesario usar las interrupciones para este programita tan sencillo y que sin interrupciones se puede lograr lo que quiero, pero necesito aprender a usar las interrupciones ya que lo implementare en un programa un poco mas complejo.
salu2
Amigo Reyvilla agradesco tu paciencia en haberme ayudado ya entendi muy el codigo que me enviastes y me ayudo mucho
otra cosa amigo que ahora me esta saturando un poco si quisiera esos led trabajarlos cada uno con pulsadores se puede lograr me refiero a que el led1 prenda cuando prsiona el pulsador y se apague con el tiempo dado por el codigo
@ DEVICE PIC16F628A
@ DEVICE INTRC_OSC_CLKOUT
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE PROTECT_OFF
DEFINE OSC 4
CMCON = 7
TRISB = %00000000
TRISA = %11111000
PORTA = %00000000
PORTB = %00000000
TLED1 VAR word
MinutO var byte
Segundo Var Byte
MAS_TIEMPO VAR BYTE
INITIO VAR BYTE
FLAG0 VAR BIT
Juego VAR WORD
LED_1 var PORTB.0
LED_2 VAR PORTB.1
IntE VAR PORTB.7
BLuz1 VAR PortA.0
BLuz2 VAR PortA.1
BLuz3 VAR PortA.2
BOTON VAR PortA.7
OPTION_REG = %10000101
ON INTERRUPT GOTO MI_INTERRUPCION
INTCON = %10100000
FLAG0=0
INICIO:
IF BOTON THEN
toggle led_2;=1
flag0=1
ENDIF
while BOTON = 1
wend
GOTO INICIO
DISABLE
MI_INTERRUPCION:
INITIO = INITIO + 1
MAS_TIEMPO = MAS_TIEMPO + 1
IF INITIO = 3 THEN
INITIO = 0
TOGGLE INTE
ENDIF
IF MAS_TIEMPO => 61 THEN
MAS_TIEMPO = 0
TOGGLE LED_1
FLAG0=1
TLED1 = TLED1 + 1
IF LED_2 = 1 AND flag0=1 and TLED1 = 10 THEN
LED_2 = 0
TLED1 = 0
flag0=0
ENDIF
endif
INTCON = %10100000
Resume
Enable
IF LED_2 = 1 or flag0=1 and TLED1 = 10 THEN
LED_2 = 0
TLED1 = 0
flag0=0
ENDIF
endif
INTCON = %10100000
Resume
Enable
IF MAS_TIEMPO => 61 THEN
MAS_TIEMPO = 0
TOGGLE LED_1
if FLAG0=1 and led_2=1 then
TLED1 = TLED1 + 1
IF LED_2 = 1 or flag0=1 and TLED1 = 10 THEN
LED_2 = 0
TLED1 = 0
flag0=0
ENDIF
endif
endif
@ DEVICE PIC16F628
@ DEVICE INTRC_OSC_CLKOUT
@ DEVICE WDT_OFF
@ DEVICE PWRT_OFF
@ DEVICE LVP_OFF
@ DEVICE CPD_OFF
@ DEVICE PROTECT_OFF
DEFINE OSC 4
CMCON = 7
TRISB = %00000000
TRISA = %11111000
PORTA = %00000000
PORTB = %00000000
TLED1 VAR word
TLED2 VAR word
MinutO var byte
Segundo Var Byte
MAS_TIEMPO VAR BYTE
INITIO VAR BYTE
FLAG0 VAR BIT
FLAG1 VAR BIT
Juego VAR WORD
LED_1 var PORTB.0
LED_2 VAR PORTB.1
LED_3 VAR PORTB.2
IntE VAR PORTB.7
BLuz1 VAR PortA.0
BLuz2 VAR PortA.1
BLuz3 VAR PortA.2
BOTON VAR PortA.7
BOTON1 VAR PortA.6
OPTION_REG = %10000101
ON INTERRUPT GOTO MI_INTERRUPCION
INTCON = %10100000
FLAG0=0
FLAG1=0
INICIO:
IF BOTON THEN Salto1
IF BOTON1 THEN Salto2
salto1:
if BOTON THEN
toggle led_2
TOGGLE FLAG0
ENDIF
while BOTON = 1 :Wend
salto2:
if BOTON1 THEN
toggle led_3
TOGGLE FLAG1
ENDIF
while BOTON1 = 1 :Wend
GOTO INICIO
DISABLE
MI_INTERRUPCION:
MAS_TIEMPO = MAS_TIEMPO + 1
IF MAS_TIEMPO => 61 THEN
MAS_TIEMPO = 0
TOGGLE LED_1
if FLAG0=1 and led_2=1 then
TLED1 = TLED1 + 1
IF LED_2 = 1 or flag0=1 and TLED1 = 10 THEN
LED_2=0
if led_2=0 then
flag0=0
TLED1=0
IF LED_3 = 1 or flag1=1 and TLED2 = 10 THEN
LED_3=0
if led_3=0 then
flag1=0
TLED2=0
endif
endif
endif
endif
endif
endif
INTCON = %10100000
Resume
Enable
Me gustaría colocarle un teclado matricial de 3*4 y si la programación la tengo que modificarAmigos vamos con un proyecto interesante control de acceso son clave utilizando un teclado matrixal de 4x4,pic 16f84a y testigos de operatividad, al ingresar los cuatro digitos correctamente se energiza un rele durante tres segundos ubicado en el pin door del pic ,si la clave es incorrecta se emite tres activaciones en bip y led ubicados en el puerto A0 y A1 respectivamente, la activacion de cada tecla va acompañado de la visualizacion del led ubicado en pin 18 del pic 16f84a.
codigo fuente en pic basic proCódigo:@ device xt_osc ; oscilador externo XT define osc 4 ; especifica que se va a utilizar uno de 4 Mhz ;creacion de variables tecla var byte ;donde se guarada tecla pulsada repit var byte ;para hacer repeticiones ;configuracion de pines del pic 16f84a bip var porta.0 ;donde se conecta la chicharra led var porta.1 ;donde se conecta el led door var porta.2 ;donde se conecta rele para la puerta a var portb.0 ;pines de las filas b var portb.1 c var portb.2 d var portb.3 uno var portb.4 dos var portb.5 tres var portb.6 cuatro var portb.7 iniciando: ;incica funcionamiento del sistema high led:high bip pause 1000 low led:low bip goto teclauno ; comparar clave barrido: low a ;sensar fila a if uno=0 then tecla=1:return if dos=0 then tecla=2:return if tres=0 then tecla=3:return if cuatro=0 then tecla=10:return high a low b if uno=0 then tecla=4:return if dos=0 then tecla=5:return if tres=0 then tecla=6:return if cuatro=0 then tecla=11:return high b low c if uno=0 then tecla=7:return if dos =0 then tecla=8:return if tres=0 then tecla=9:return if cuatro=0 then tecla=12:return high c low d if uno=0 then tecla=14:return if dos=0 then tecla=0:return if tres=0 then tecla=15:return if cuatro=0 then tecla=13:return high d pause 10 goto barrido ;rutina antirrebote de teclas ptecla: high led:low bip pause 100 low led :low bip espacio: if uno=0 then espacio if dos=0 then espacio if tres=0 then espacio if cuatro=0 then espacio pause 25 return ;rutina para comparar claves teclauno: gosub barrido gosub ptecla if tecla=1then teclados goto falso teclados: gosub barrido:gosub ptecla if tecla=2 then teclatres goto falso1 teclatres: gosub barrido:gosub ptecla if tecla=3 then teclacuatro goto falso2 teclacuatro gosub barrido:gosub ptecla if tecla=4 then open goto falso3 open: for repit=1 to 2 pause 100 high led:high bip pause 100 low led:low bip next high door pause 3000 low door goto teclauno ;rutina teclas erroneas falso: gosub barrido:gosub ptecla falso1: gosub barrido:gosub ptecla falso2: gosub barrido:gosub ptecla falso3: for repit=1 to 3 pause 100 high led:high bip pause 100 low led: low bip next goto teclauno end