TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: wolfman77 en 27 de Noviembre de 2012, 19:37:59
-
Hola a todos, despeus de leer sobre interrupciones, consultar, y quemarme los pelos empece tratando de hacer algo sencillo, y NO FUNCIONA!! :5]
Los puertos estan seteados asi: en PORTA.0 esta el pulsador, mientras que PORTB es salida de los leds.
Teoricamente segun lo que estoy tratando de hacer, al pulsar el boton comienza el efecto 1, al pulsar nuevamente el efecto 2.. y asi hasta el 4, que cuando pulsaria de nuevo volveria al primer efecto.
La cosa es que no va ni para atras, alguien me puede orientar un poco? :?
Esta hecho en proton
Device 16F876A
Xtal = 4
All_Digital = True
TRISA = %11111111
INTCON = %10000000
Dim control As Word
control = 0
On Interrupt GoTo secuencia
efecto1:
PORTB = %11000000
DelayMS 1000
PORTB = %00000011
DelayMS 1000
GoTo efecto1
efecto2:
PORTB = %00110000
DelayMS 1000
PORTB = %00001100
DelayMS 1000
GoTo efecto2
efecto3:
PORTB = %11111111
DelayMS 1000
PORTB = %01011010
DelayMS 1000
GoTo efecto3
efecto4:
PORTB = %10101010
DelayMS 1000
PORTB = %01010101
DelayMS 1000
GoTo efecto4
Disable
secuencia:
If PORTA.1 = 1 Then control = control + 1
If control > 4 Then control = 1
If control = 1 Then GoTo efecto1
If control = 2 Then GoTo efecto2
If control = 3 Then GoTo efecto3
If control = 4 Then GoTo efecto4
Resume
Enable
End
gracias!
-
Hola:
¿mantenes apretado el pulsador mas de 1000mS?
si apretás cuando se está ejecutando ese retardo ,recién cuando termine la instrucción saltará a la rutine de interrupción
sds.
Jorge
-
Sip, y no anda, lo que si, cuando lo simulo en el proteus sale un error que dice
[PIC16 Core] PC=0x009C stack overflow executing CALL instruction
:shock:
-
hola
no es que te quiera criticar pero es conbeniente menciones el lenguaje y el compilador que usas, al pareser por mi poca experiencia creo que el lenguaje es basic y compilador es tam vez pic basic pro.
analizando lo que quieres realizar es con tu secuencia y los pulsadores no creo que sea necesario usar una interrupcion del pic pero si tu la quieres usar para practicar bien por ti.
en primer lugar te menciono que es bueno que analices tu programa quieres activar la interrupcion por cambio de estado aqui tienes 2 errores
primero el registro itcon esta mal configurado ya que solo activas la interrupcion global pero desactivas todas las demas las interrupciones
en si solo estas diciendo que activaras la interupcion del pic pero no le dijiste cual en especial
y en segundo por lo que entendi quieres activar la interupcion por cambio de estado que yo conosco son 2 las cuales son por rb.0(puerto b pin 0) o tambien por los pines rb4, rb5, rb6 , rb7 (que tambien son el puerto b pines 4,5,6,7)
como te menciono mejor dale una leida al pic no te digo que la hoja de datos completa, pero lo que esta conlleva al registro itcon te bendria muy bien
saludos si tienes mas dudas me dare una vuelta para ver tus abances sino mandame un msj privado para atenderte lo mas rapido posible
un comentario para tener mejores resultados en los pic (te digo avace de mi experiencia) es leyendo hoja de datos y practicar con el circuito real asi te enfrentas cara a cara con el pic por asi desirlo y sabras si el circuito realmente funciona o no yo tambien simule en mi tiempo algunas cosas en proteus pero aveces me topaba con la realidad que al hacerlo fisico no funcionava espero y no lo tomes a mal.
-
hola
no es que te quiera criticar pero es conbeniente menciones el lenguaje y el compilador que usas, al pareser por mi poca experiencia creo que el lenguaje es basic y compilador es tam vez pic basic pro.
Buen dia RockLee_89
Las criticas son aceptadas :)
El idioma es basic (por eso postee en este area) y el compilador es Proton como mencione en el primer post (justo antes del quote con el codigo)
analizando lo que quieres realizar es con tu secuencia y los pulsadores no creo que sea necesario usar una interrupcion del pic pero si tu la quieres usar para practicar bien por ti.
Esa es la idea, practicar con interrupciones, ya que tengo algo en mente para crear y nunca di en la tecla, a decir verdad hice andar el programa, pero sin interrupciones.
Es decir que me tomaba el evento del pulsador unicamente cuando finalizaba una vuelta del loop, y yo lo que realmente quiero es que se produzca el cambio instantaneamente al pulsar sin importar si va al comienzo o mitad del efecto...
en primer lugar te menciono que es bueno que analices tu programa quieres activar la interrupcion por cambio de estado aqui tienes 2 errores
primero el registro itcon esta mal configurado ya que solo activas la interrupcion global pero desactivas todas las demas las interrupciones
en si solo estas diciendo que activaras la interupcion del pic pero no le dijiste cual en especial
Aaaa... sabia que algo mal tenia jeje, vere ese punto
y en segundo por lo que entendi quieres activar la interupcion por cambio de estado que yo conosco son 2 las cuales son por rb.0(puerto b pin 0) o tambien por los pines rb4, rb5, rb6 , rb7 (que tambien son el puerto b pines 4,5,6,7)
Lo que quiero es que segun un evento en PORTA.0 se activen segun el efecto las diferentes salidas de PORTB
como te menciono mejor dale una leida al pic no te digo que la hoja de datos completa, pero lo que esta conlleva al registro itcon te bendria muy bien
saludos si tienes mas dudas me dare una vuelta para ver tus abances sino mandame un msj privado para atenderte lo mas rapido posible
Eso hare, gracias!! :)
un comentario para tener mejores resultados en los pic (te digo avace de mi experiencia) es leyendo hoja de datos y practicar con el circuito real asi te enfrentas cara a cara con el pic por asi desirlo y sabras si el circuito realmente funciona o no yo tambien simule en mi tiempo algunas cosas en proteus pero aveces me topaba con la realidad que al hacerlo fisico no funcionava espero y no lo tomes a mal.
No te hagas problema, buscando lei lo mismo, que en la teoria todo anda 10 puntos y en la practica no anda ni para atras jejeje
Saludos!
Martin
-
No se como es en basic pero en assembler debes poner a 0 la bandera de interrupcion para que no vuelva a entrar de nuevo a la interrupcion sin haber apretado el boton, ademas debes ver si el puerto que usas permite usar una interrupcion. si quieres probar las interrupciones te aconsejo que empieces por algo mas sencillo como prender un led al pulsar un boton.
-
bueno, finalmente andubo, arranque de 0 con el programa y la falla estaba en el INTCON, ahora va como piña
Gracias a todos!! :D
-
me da gusto wolfman77 que te funciones el programa por fin tal vez seria conveniente pongas tu programa asi tal vez ayudes a alguien con un problema paresido al tuyo
saludos