TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: ftp5763 en 13 de Julio de 2007, 18:10:32
-
hola me llamo fede soy nuevo en el foro y tambien en el campo de los pic. tengo hechos unos programas re basicos y quiero seguir progresando en el tema estoy trabajando con el mplab 5.7 recientemente baje un curso en castellano de este sub foro pero tengo los sig problemas: al tratar de hacer un temporizador basico ejemplo:con un bit ,activo el temporizador al cabo de un tiempo activo un bit de salida(el tiempo eepende del oscilador con el que trabaje ¿no?)
-no mo queda bien en claro para que son las interupcones!!!
-TMR0?? y WDT?? -estoy trabajando con un 16f84-
como veran soy nuevo en el tema desde ya les agradesco sus respuestas atte.
-
amigo utiliza el buscador y encontraras algo de interrupciones
y despues
saludos
-
Buenas, el tiempo de temporización depende de tu oscilador.
El WDT es el 'perro guardián', es un temporizador interno del pic que hace que se producza un reset cuando se ha desbordado, no creo que sea el que debas usar para temporizar tiempos.
Para ello cualquiera d elos timer's que sea configurable en modo temporizador. Puedes usarlo de dos maneras, por interrupciones o sin ellas.
Sin interrupciones: Activas el timer como temporizador y que se desborde a un tiempo determinado y que no produzca interrupción, cuando dicho timer se desborde al tiempo seleccionado, se pondrá su flag correspondiente a '1', por lo tanto, en tú programa principal monotorizando dicho flag sabrás cuando ha contado el tiempo que se deseaba.
Con interrupción: Activas el timer como temporizador y que se desborde a un tiempo determinado y que produzca interrupción, cuando dicho timer se desborde se activará su flag correspondiente y saltará al vector d einterrupción, en el cual abrodará su rutina d einterrupción.
¿En qué lenguaje vas a trabajar?
PD: Ya existen nuevas versiones del MPlab, te las puedes descargar gratis desde la página de Microchip.
Suerte!!! ;)
-
Buenas, el tiempo de temporización depende de tu oscilador.
El WDT es el 'perro guardián', es un temporizador interno del pic que hace que se producza un reset cuando se ha desbordado, no creo que sea el que debas usar para temporizar tiempos.
Para ello cualquiera d elos timer's que sea configurable en modo temporizador. Puedes usarlo de dos maneras, por interrupciones o sin ellas.
Sin interrupciones: Activas el timer como temporizador y que se desborde a un tiempo determinado y que no produzca interrupción, cuando dicho timer se desborde al tiempo seleccionado, se pondrá su flag correspondiente a '1', por lo tanto, en tú programa principal monotorizando dicho flag sabrás cuando ha contado el tiempo que se deseaba.
Con interrupción: Activas el timer como temporizador y que se desborde a un tiempo determinado y que produzca interrupción, cuando dicho timer se desborde se activará su flag correspondiente y saltará al vector d einterrupción, en el cual abrodará su rutina d einterrupción.
¿En qué lenguaje vas a trabajar?
PD: Ya existen nuevas versiones del MPlab, te las puedes descargar gratis desde la página de Microchip.
Suerte!!! ;)
si fueras tan amables podrias colocar dos ejemplos de estas dos formas? ¿de que manera lo hace el programa para crear retardos llamado "picdel_sp"????
-
hOLA FTP, te recomiendo que no te apresures :mrgreen: :D
comienza con rutinas simples, por ahora nada de interrupciones!!!, eso para mas adelante
Si estas empleando un oscilador a cristal de 4 mhz, cada instruccion tarda 1microsegundo (salvo los saltos que pueden tardar 2)
por lo que una demora, sera una serie de loops para hacerle perder el tiempo al micro, y para ello se emplean los NOP (no operacion)
con el programita pdel, lo que haces es darle el tiempo que necesita, y el te entrega una subrutina de retardo
por ejemplo
movlw .3
movwf tiempo
decfsz tiempo,f
goto $-1
****
ci miras este ejemplo, cargo un registro llamado tiempo con el numero tres
luego lo decremento, y con el goto retorno a decrementar...
pero cuando el registro tiempo, llegue a cero , al decrementar, saltara una linea (DECremente registro F Salte si es cero) con
lo cual el programa llegara a ****
es decir , mantuvimos ocupado al micro calculando.... perdiendo el tiempo :mrgreen:
Suerte!
Norberto
-
Si vas a trabajar en C, en el subforo de C, concretamente en el primer post, encontrarás varios enlaces a bastantes ejemplos útiles.
En cambio si vas a trabajar en ASM, en su respectivo foro encontrarás multitud de ejemplos de aplicación para lo que buscas.
Suerte!!! ;)
-
Si vas a trabajar en C, en el subforo de C, concretamente en el primer post, encontrarás varios enlaces a bastantes ejemplos útiles.
En cambio si vas a trabajar en ASM, en su respectivo foro encontrarás multitud de ejemplos de aplicación para lo que buscas.
Suerte!!! ;)
hola soy ftp, con respecto a lo que m recomendaste tngo un ejemplo que funciona pero despues de un cierto tiempo el programa simulador mplab 5.7 me da un mensaje de " warning!!! atack underflow"- warning!!! stack under flow has occurred this situation may be trapped by re executing with stack overflow break enabled-(advirtiendo!!! la pila bajo el flujo ha ocurrido esta situación puede entramparse por re que ejecuta con el descanso de inundación de pila habilitado)
el ejercicio en cuestion es el siguiente: -----------------------------------------------------------------------------------------------------------
List p=16f84
Port_A equ 05
Port_B equ 06
CONTADOR equ 0x20
ESTADO equ 03
org 0
bsf ESTADO,5 ; se pasa a banco 1
movlw 0x0f ; W <-- 0F, carga w con 0F
movwf Port_A ; TRISA <-- W, carga W a TRISA : 0000 FFFF
; 4 bits -sign de la Puerta A son entradas y
; el 5to bit es salida
movlw 0x00 ; W <-- 00, carga W con 00
movwf Port_B ; TRISB <-- W, carga w a TRISB: 0000 0000
; todos los bits de la Puerta B son salida
bcf ESTADO,5 ; se pasa a banco 0
movlw 0x00 ; W <-- 00, carga W con 00
movwf Port_B ; todos los pines de Puerta B en 0
INICIO btfss Port_A,0
goto INICIO
call DEMORA
bsf Port_B,0
DEMORA movlw .24 ; 1 set numero de repeticion
movwf CONTADOR ; 1 |
clrwdt
PLoop0 clrwdt ; 1 clear watchdog
decfsz CONTADOR, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
end
---------------------------------------------------------------------------------------------------------
el bit de salida Port_b,0 cambia de estado cada un cierto tiempo>>
les agadeceria si lo prueban ustedes a ver que pasa desde ya muchas gracias... atte
-
Hola, el programa esta mal, porque, se bloquea al entrar en la subrutina...
INICIO btfss Port_A,0
goto INICIO
call DEMORA
bsf Port_B,0
; continua el programa
goto INICIO
; esto es una subrutina, y el programa no puede al ir ejecutando, llegas SOLITO a este lugar
DEMORA movlw .24 ; 1 set numero de repeticion
movwf CONTADOR ; 1 |
clrwdt
PLoop0 clrwdt ; 1 clear watchdog
decfsz CONTADOR, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
end