TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: En en 11 de Julio de 2008, 11:59:10
-
que tal, soy nuevo en el foto y este es mi primer post, espero que me puedan ayudar.
antes que nada pido disculpas si por casualidad estoy creando un tema de una pregunta ya respuesta pero en realidad me paso que busque la respuesta a mi pregunta dentro de este foro pero no logre conseguir que las cosas me funcionen, en caso de que sea así pido me digan en que tema esta la respuesta y borrare este tema sin problema (si es que puedo, no se si eso lo hacen los administradores)
buen mi problema en principio es con un simple retardo en el 16f84
ya que pareciera que entra al ciclo pero nunca sale ya que las led que tengo conectadas en la salida (portB) se prenden pero nunca se apagan, el retardo supuestamente tendría que ser de un segundo.
acá el código que uso:
List p=16f84
STATUS equ 0x03
PORTB equ 0x06
PORTA equ 0x05
CONT equ 0x0C
CONT2 equ 0x0D
CONT3 equ 0x0E
org 0x00
goto INICIO
org 0x05
INICIO
bsf STATUS,5 ;cambia al banco1
clrf PORTB ;PORTB salidas
bcf STATUS,5 ;cambia al banco0
PROG
movlw b'11111111'
movwf PORTB
call RETARDO
movlw b'00000000'
movwf PORTB
call RETARDO
goto PROG
RETARDO
movlw .100 ; 1
movwf CONT3 ; 1
CICLO3
movlw .97 ; 1
movwf CONT2 ; 1
CICLO2
movlw .33 ; 1
movwf CONT ; 1
CICLO
decfsz CONT,f ;1*(N-1)+2
goto CICLO ;2*(N-1)
decfsz CONT2,f ;1*(M-1)+2
goto CICLO2 ;2*(M-1)
decfsz CONT3,f ;1*(P-1)+2
goto CICLO3 ;2*(P-1)
return
end
por si les sirve de algo, estoy programando con una grabadora ICD2, el programa no me tira ningún error de compilación y el pic esta sano a y el oscilador trabaja a 4Mhz
y otro problema el cual por ahora no les pido respuesta ya que el pic se me acaba de quemar es la configuración del pic 16f628 para que funcione con el oscilador interno
también aclaro que recién estoy empezando con la programacion de pic así que sepan disculpar si cometí alguna burrada
pd: el código de el retardo lo saque de una pagina en la cual estaban echas las cuentas debidas, me parecieron correctas
gracias a todos de antemano!
-
Hola.
El programa está bien. Probaste desactivando el Watch Dog Timer?
Saludos.
-
si, la configuracion de bits esta asi:
Oscillator XT
Watchdog Timer Off
Power up Timer On (a pesar de que creo que no influye esta opción también la probe en Off)
Code Protect Off
-
me parece q a este nivel:
INICIO
bsf STATUS,5 ;cambia al banco1
clrf PORTB ;PORTB salidas
bcf STATUS,5 ;cambia al banco0
PROG
falta una declaración de entradas y salidas, osea faltaría un tris (en vez del PORT que pusiste), y arriba un equ: TRISB equ 0x86
INICIO
bsf STATUS,5 ;cambia al banco1
clrf TRISB ;PORTB salidas
bcf STATUS,5 ;cambia al banco0
PROG
con eso creo que iria bien, si tu retardo esta bien calculado.
sobre la configuracion del osc interno solamente en el config colocar en al cabecera:
__config _INTOSC_OSC_NOCLKOUT & _WDT_OFF
-
Hola Cryn!
No es necesario. Se puede hacer de ambas formas. El direccionamiento a la memoria de registros en la familia 16F es de 7 bits, por lo que al pasar al banco 1 mediante el seteo del bit RP0 del registro STATUS, se está trabajando sobre el registro 0x80 + el valor del registro en cuestión. En este caso es el PORTB, por lo que sería 0x80+0x06 = 0x86. Lo mismo que poner TRISB(cuando pones TRISB, el ensamblador sólo considera los 7 bits de menor peso, por lo que tranforma el 0x86 en 0x06(ídem PORTB) y te regala una advertencia indicandote que el registro no se encuentra en el banco 0 y que te asegures de que los bits de los bancos esten correctamente seteados).
Ahora, en cuestiones de buena costumbre, aconsejaría poner TRISB en lugar de PORTB.
Entonces buscá que este todo bien conectado, ponele las resistencias adecuadas a los LEDS.El programa está bien por lo que vi, y el retardo es de casi 1segundo.
Saludos!
-
Correcto, lo que dice Btruno y Cryn, no has definido las salidas, y si querés hacerlo definiendo cuales son entradas y cuales salidas, podrías hacer
MOVLW B'00000000'
MOVWF TRISB
Lógicamente, con todos ceros, serán todas salidas...
Suerte!
Norberto
-
Correcto, lo que dice Btruno y Cryn, no has definido las salidas
Cómo que no? :D
Sisi...es completamente válido lo que ha hecho "En" en su código. cualquiera de las dos formas son válidas.
Saludos! ;)
-
no me sabia esa bruno :mrgreen:
muy interesante
-
Chi Chi Chi!
El direccionamiento DIRECTO en esta familia de PICs es de 9 bits, y está compuesto por:
Dos bits del STATUS: RP1 y RP0 y los 7 bits que se cargan mediante la instrucción.
Entonces, el registro a afectar va a ser el que conformen estos 9 bits:
STATUS,RP1 STATUS,RP0 y los 7 bits que se incluyen en la instruccion (ej. movwf PORTB)
b8 b7 b6 b5 b4 b3 b2 b1 b0
Ahora, en cuanto a direccionamiento INDIRECTO la cosa cambia...pero está también conformado por 9 bits.
el bit STATUS,IRP y los 8 bits que contene el registro FSR.
STATUS,IRP FSR
b8 b7 b6 b5 b4 b3 b2 b1 b0
A diferencia del direccionamiento directo, con este tipo de direccionamiento se pueden cargar 8 bits del registro a acceder en el registro FSR, por lo que si quieres trabajar más allá del registro 0xFF ya tendrás que setear el bit IRP. Obviamente en este caso del PIC 16F84 que no posee tanta "RAM" ni bancos, no surge efecto afectar los bits RP1 y IRP del registro STATUS.
Por lo que, según mis cálculos teóricos, hacer:
movlw TRISB
movwf FSR
clrf INDF
Debería funcionar también como un método para setear los bits de un puerto(en este caso el B).
Saludos!
-
saben que yo pensaba como bruno, que el PORTB al cargar el bit 5 de el banco STATUS pasaba al banco 1 y ya me ubicava en el TRISB cosa que poniendo 00000000 ya le decia que todos los RB que sean salidas, es mas, eso ya lo daba por sabido ya que antes de meterme con esto de retardos habia echo un par de programas que usaban al pic como un puente ocea, lo único que hacían era habilitar entradas y salidas para que cuando entra un pulso por tal pin salga por tal otro y me funciona van a la perfección y bueno, habia configurado las entradas y salidas con PORTB y PORTA como lo hice en el programa que mostre.
ahora.....
lo raro es que acabo de hacer lo que me aconsejaba "Cryn" y el pic empezó a oscilar!!!
aunque todavia con problemas ya que los led prenden y apagan muy rapido y ni siquiera se acercan al segundo (aunque se llega a ver bien), intente cambiar los valores por números mas grandes pero pareciera que siempre se mantiene el la misma frecuencia de oscilacion, tienen idea de que puede ser?
el codigo ahora:
List p=16f84
STATUS equ 0x03
PORTB equ 0x06
TRISB equ 0x86
CONT equ 0x0C
CONT2 equ 0x0D
CONT3 equ 0x0E
org 0x00
goto INICIO
org 0x05
INICIO
bsf STATUS,5 ;cambia al banco1
clrf TRISB ;PORTB salidas
bcf STATUS,5 ;cambia al banco0
PROG
movlw b'11111111'
movwf PORTB
call RETARDO
movlw b'00000000'
movwf PORTB
call RETARDO
goto PROG
RETARDO
movlw .100 ; 1
movwf CONT3 ; 1
CICLO3
movlw .80 ; 1
movwf CONT2 ; 1
CICLO2
movlw .100 ; 1
movwf CONT ; 1
CICLO
decfsz CONT,f ;1*(N-1)+2
goto CICLO ;2*(N-1)
decfsz CONT2,f ;1*(M-1)+2
goto CICLO2 ;2*(M-1)
decfsz CONT3,f ;1*(P-1)+2
goto CICLO3 ;2*(P-1)
return
end
-
quiza sea el problema del tiempo, intenta utilizar el programa PICDEL para generar retardos cíclicos, es muy facil de utilizar, esta acá en el foro: http://www.todopic.com.ar/foros/index.php?topic=5968.0
tb lo encuentras googleando.
un saludo
-
Jaja! Bueno...es que no puede ser! O sea, es exactamente lo mísmo :D
En fin, agregá la linea de configuración que te aconsejaron...
Y la verdad que no...pero asegurate de que los voltajes de alimentación sean los correctos y que la intensidad alcance para el circuito y cambia de cristal por las dudas.
Saludos.
-
si, yo pienso = que vos bruno la verdad que nose que pasa este pic me esta trastornando jajajaja no me van a creer pero ahora al parecer como que deja de oscilar pero le acerco el dedo a la resistencia sin llegar a tocarla y empieza a funcionar debe ser el protoboard que esta muy inestable pero = cuando funciona no es la frecuencia que quiero.
y Cryn el picdel ya lo tengo ya me lo descargue hace un rato pero cada ves que lo abro se me cuelga voy a probar con tu enlace gracias
-
Bueno, entonces ya hay un problemita distinto.
¿Le pusiste los capacitores al oscilador?
El retardo está bien. Lo simulé con el MPLAB SIM y es de 995ms aprox.
Saludos.
-
si, el oscilador tiene 2 capacitores de 20
el retardo que vos me decis que simulaste es este no?
RETARDO
movlw .100 ; 1
movwf CONT3 ; 1
CICLO3
movlw .97 ; 1
movwf CONT2 ; 1
CICLO2
movlw .33 ; 1
movwf CONT ; 1
CICLO
decfsz CONT,f ;1*(N-1)+2
goto CICLO ;2*(N-1)
decfsz CONT2,f ;1*(M-1)+2
goto CICLO2 ;2*(M-1)
decfsz CONT3,f ;1*(P-1)+2
goto CICLO3 ;2*(P-1)
return
saben que la linea de configuracion que me paso Cryn me tira error
__config _INTOSC_OSC_NOCLKOUT & _WDT_OFF
yo la verdad que nunca configure a traves de código y la verdad que no se como se hace por eso lo venia evitando
pero bueno tal ves ustedes me puedan ayudar, el error que me tira es este:
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "84.asm" /l"84.lst" /e"84.err"
Warning[205] C:\84\84.ASM 11 : Found directive in column 1. (__config)
Error[113] C:\84\84.ASM 11 : Symbol not previously defined (_INTOSC_OSC_NOCLKOUT)
Error[113] C:\84\84.ASM 11 : Symbol not previously defined (_WDT_OFF)
Message[302] C:\84\84.ASM 17 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.
BUILD FAILED: Fri Jul 11 14:32:24 2008
y desde ya gracias por los datos que me vienen dando
-
Ok. Si. Es el primero que posteaste el que simulé.
Tabulá la linea de config...
es decir...dale un "TAB" o un par de espacios con la barra espaciadora para que no te quede en la columna 1.
Saludos.
-
tenes razon cambie de columna, la deje ay
List p=16f84
STATUS equ 0x03
PORTB equ 0x06
TRISB equ 0x86
CONT equ 0x0C
CONT2 equ 0x0D
CONT3 equ 0x0E
;P equ 0x64
;M equ 0x61
;N equ 0x21
__config _INTOSC_OSC_NOCLKOUT & _WDT_OFF
org 0x00
goto INICIO
org 0x05
INICIO
bsf STATUS,5 ;cambia al banco1
clrf TRISB ;PORTB salidas
bcf STATUS,5 ;cambia al banco0
PROG
movlw b'11111111'
movwf PORTB
call RETARDO
movlw b'00000000'
movwf PORTB
call RETARDO
goto
y me dejo de tirar este
Warning[205] C:\84\84.ASM 11 : Found directive in column 1. (__config)
pero todavía me falla con esto :?
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "84.asm" /l"84.lst" /e"84.err"
Error[113] C:\84\84.ASM 11 : Symbol not previously defined (_INTOSC_OSC_NOCLKOUT)
Error[113] C:\84\84.ASM 11 : Symbol not previously defined (_WDT_OFF)
Message[302] C:\84\84.ASM 17 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.
BUILD FAILED: Fri Jul 11 14:49:59 2008
pd: como haces para saber la cantidad de tiempo que lleva el retardo con el MPLAB SIM yo lo unico que se hacer es hacerlo correr con f7
-
Porque esa linea no es para este PIC...Probá con esta:
__CONFIG _WDT_OFF & _PWRTE_ON & _XT_OSC
y no la pongas antes del 0x00. Ponela después del list...
Con respecto a la simulación.
Una vez que hayas activado el MPLAB SIM, andate a Debugger--Settings y configurá 4 Mhz.
Después añadí dos breakpoints(en la línea Call RETARDO y en la movlw b'00000000' por ejemplo)(podés añadirlos fácilmente haciendo doble click en la barra gris a la izquierda de la linea donde quieras colocarlo).
Ahora anda a Debugger--StopWatch. Se abre una ventana
Ensamblá el programa y después presiona la tecla F9(o dale Play). Poné a Zero el StopWatch. Volvé a presionar el F9. Fijate cuanto dice el StopWatch.
Saludos.
-
bueno antes que nada, muy bueno el dato para saver el tiempo de retardo, me va a ser muy util
y el codigo ahora esta si
List p=16f84
__CONFIG _WDT_OFF & _PWRTE_ON & _XT_OSC
STATUS equ 0x03
PORTB equ 0x06
TRISB equ 0x86
CONT equ 0x0C
CONT2 equ 0x0D
CONT3 equ 0x0E
org 0x00
goto INICIO
org 0x05
INICIO
bsf STATUS,5 ;cambia al banco1
clrf TRISB ;PORTB salidas
bcf STATUS,5 ;cambia al banco0
y me tira este error
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPASM Suite\MPAsmWin.exe" /q /p16F84 "84.asm" /l"84.lst" /e"84.err"
Error[113] C:\84\84.ASM 2 : Symbol not previously defined (_WDT_OFF)
Error[113] C:\84\84.ASM 2 : Symbol not previously defined (_PWRTE_ON)
Error[113] C:\84\84.ASM 2 : Symbol not previously defined (_XT_OSC)
Message[302] C:\84\84.ASM 17 : Register in operand not in bank 0. Ensure that bank bits are correct.
Halting build on first failure as requested.
BUILD FAILED: Fri Jul 11 15:25:21 2008
estoy de mala racha :?
-
bueno no creo que sirva mucho pero aca un poco del circuito
(http://s2.subirimagenes.com/fotos/previo/thump_758761071108145818.jpg) (http://s2.subirimagenes.com/fotos/previo/thump_758768071108145937.jpg)
(http://s2.subirimagenes.com/fotos/previo/thump_758770071108150037.jpg)
(http://s2.subirimagenes.com/fotos/previo/thump_758776071108150136.jpg)
-
despues del list p=.... deberia ir un
#INCLUDE P16F88.INC
y hasta no hará falta que hagas las definiciones de los registros como el puertob, trisb, status, etc.
la configuracion _int.... es para utilizar oscilador interno en el 16f628a
un saludo
-
muchas gracias, puse la linea #INCLUDE P16F84.INC y me acepto perfecto la configuracion que antes me tiraba error ahora el programa eta completo y compila perfecto
aca el programa con las modificaciones por si alguien despues tiene el problema y lo quiere ver:
List p=16f84
#INCLUDE P16F84.INC
__CONFIG _WDT_OFF & _PWRTE_ON & _XT_OSC
STATUS equ 0x03
PORTB equ 0x06
TRISB equ 0x86
CONT equ 0x0C
CONT2 equ 0x0D
CONT3 equ 0x0E
org 0x00
goto INICIO
org 0x05
INICIO
bsf STATUS,5 ;cambia al banco1
clrf TRISB ;PORTB salidas
bcf STATUS,5 ;cambia al banco0
PROG
movlw b'11111111'
movwf PORTB
call RETARDO
movlw b'00000000'
movwf PORTB
call RETARDO
goto PROG
RETARDO
movlw .100 ; 1
movwf CONT3 ; 1
CICLO3
movlw .97 ; 1
movwf CONT2 ; 1
CICLO2
movlw .33 ; 1
movwf CONT ; 1
CICLO
decfsz CONT,f ;1*(N-1)+2
goto CICLO ;2*(N-1)
decfsz CONT2,f ;1*(M-1)+2
goto CICLO2 ;2*(M-1)
decfsz CONT3,f ;1*(P-1)+2
goto CICLO3 ;2*(P-1)
return
end
aclaro.
los comentarios a la derecha de la etapa de retardo son los ciclos que lleva cada instruccion
aunque todavia los pulsos siguen siendo demasiado rapidos y eso la verdad que me desconcierta mucho,
lo unico que se me ocurre es lo que decia bruno de que la alimentacion este mal pero yo al pic le estoy dando 5v que llegan bien, tambien puede ser que el oscilador este dañado pero si fuera asi no se si funcionaria.... la verdad nose, para colmo al depurar el programa con el MPLAB SIM los retardos duran un segundo como tendria que ser :?
-
intenta colocarle un condensador entre los terminales de alimentación, osea entre el positivo y negativo de la fuente, un condensador de 100nf (104)
-
mmmm voy a probar, pero tengo que comprar. = nose pero ya desconfio del oscilador, no puede ser que yo le cambie el retardo a mucho mas tiempo y ni se inmute siempre exactamente con la misma velocidad de parpadeo de led :?, además no me tira ninguna clase de error
-
los errores como seguramente te diste cuenta son simplemente errores de sintaxis y hasat cierto orden en las lineas de código, puedes escribir todas las instrucciones correctamente pero sin ningun sentido y el compilador al ver q todo esta escrito correctamente no te dira q hay errores.
En resumen el compilador, o ensamblador en este caso solo detecta errores de sintaxis y orden, quiza alguna otra cosa más.
No encuentra errores de algoritmo.
Puede q sea el condensador, cuando tienes una fuente de transformador se tiene muchos picos y caidas, mucho ruido que hace q el microcontrolador actue de forma extraña, ahora si utilizas una bateria, eso si seria extraño, jeje, ahi si talvez sea un problema de cristal
-
si, lo que decis de que el compilador solo detecta errores de sintaxis es verdad, pero la verdad que tampoco creo que el codigo tenga un error en el algoritmo, pasa que es muy simple, no tiene mucho secreto
y sobre lo que habia dicho de que puede que sea el cristal por otro lado lo pienso y si el cristal andaria mal totalmente no me correria ninguna de las instrucciones siendo que despues de unas pruebas me doy cuenta que el pic si hace lo que le digo, solo tiene problemas con los retardos, por lo que se podria descartar la falla total del cristal, ahora... si falla parcialmente pienso que el problema que tendria que tener es que el retardo me dure un poco menos o un poco mas, al principio si me paso eso como ya comente antes y los retardos me duraban mucho menos de lo debido
pero ahora cambie de prender todas las led a prender unas---- retardo------ y luego otras------ retardo----- vuelve
y el resultado fue que me prende las primeras pero las mismas quedan siempre prendidas como dando señal de que el prog se quedo en esa instruccion o en el retardo que se convierte a infinito
el codigo cambiado:
PROG
movlw b'11000000'
movwf PORTB
call RETARDO
movlw b'00000011'
movwf PORTB
call RETARDO
goto PROG
-
le pusiste el condensador de 100nf?
porque el código si esta bien
-
perdona, no te entendi bien donde me decis que lo coloque
-
colocalo en la alimentacion, entre VDD y VSS del microcontrolador
-
que tal saben que estuve probando otra forma de hacer retardos y es con los registros especiales TMR0, OPTION, TOIF y maso menos de a poco lo voy entendiendo pero veo que la maxima cifra maso menos redonda que pude lograr con un divisor de 128 son 25ms, valor con el cual no estoy muy contento ya que tendria que repetir la instrucción 20 veces para llegar al medio segundo.
¿alguien sabe como puedo aumentar el tiempo de retardo con este metodo sin tener que repetir la instruccion tantas veces?, ¿se puede?
desde ya muchas gracias
la cuenta:
255 -TMR0 = 25·10-3 / (1·10-6 · 128) = 195,3
(el TMR0 lo cargo con 60) :-/
-
umm, el tmr0 como en los pics de la familia 16f, es solo de 8 bits no te conseguirá mucho retardo si los colocas al maximo, y por la velocidad de tu cristal tb no es tan retardado pero si la unica opcion es contar desbordes.
quiza con un temporizador mas "grande" como el timer1, que es de 16bits, talvez se logre menor cuenta de desbordes.
buscate el programita de Redpic, en su pagina para temporizadores es de muy buena ayuda.
supongo que lo del condensador no hizo nada, que raro... haber en cuanto pueda lo veo en casa, aca no tengo mplab :(
un saludo
-
viendo este mismo foro vi un comentario de Norberto que la verdad me parecio muy interesante pero la verdad no lo termino de entender, tal ves me puedan ayudar porque me parece que da una solucion al tema de retardos que esta bastante buena
CITA:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
RE: como hacer un retardo con el pic y a la vez actualizar otas tareas, por ejemplo apagar algo
Hola, puedes hacerlo como te manifesto Harry, solo que yo no empleo la interrupcion, simplemente, en alguna parte del codigo, realizo un XOR para verificar si la cuenta del tmr0 llego a un determinado valor... si llego, incremento o decremento otro contador...
de esta marera, empleo la interrupcion para otras cosas
TIMER_CERO
CLRF STATUS
MOVLW .250
XORWF TMR0,0
BTFSS STATUS,Z
; GOTO INICIO
CLRF TMR0
suerte!
Norberto
-------------------------------------------------------------------------------------------------------------------------------------------------------
RE: como hacer un retardo con el pic y a la vez actualizar otas tareas, por ejemplo apagar algo
Sonrisa Gigante
para la mayoria de los retardos largos, empleo esa disposicion... por ejemplo un minuto
255 * 256 * 230 * 4 +/- 1 minuto =256 es el preescaler (60057600 milisegundos)
60,057600 segundos... bastante buena!
y mientras tanto, se puede ir ejecutando otras cosas, y no empleo interrupcion... Sonrisa Gigante
Norberto
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
y gracias por el consejo de usar el TIMER1 la verdad que tenes razon un TIMER con 16 bits me ayudaria mucho mas a la hora de querer llegar al vendito segundo pero por ahora dispongo de un 16f84 y es para un proyecto el cual no me puedo demorar mucho, mi idea es mas adelante trabajar con el 16f628 y manejar TIMER de 16 bits y oscilador interno pero en estos momentos ando como medio sin tiempo para ponerme a aprender las características de un nuevo pic ya que siendo nuevo en este tema de los microcontroladores, investigar un nuevo pic me leva un tiempito.
a Cryn y el programa que me dijiste lo estoy buscando, Redpic es un usuario no?
-
utilizando la interrupción del tmr0 puedes contar un segundo con una buena presición, pero si es relativamente rapido y deberas contar interrupciones para lograr el segundo buscado, esa es la opcion qeu la mayoria opta, por ejemplo yo he contado interrupciones muchas veces.
Utilizar un timer para contar el tiempo es una muy buena opcion, las respuestas que dio Norberto no las logro entender mbien, de que hilo los sacaste??
ejemplos para manejar el tmr0 seguramente los encuentras por aca en el foro, con más seguridad en el subforo de Assembler.
Redpic es un usuario de aca, del forko, muy conocido, aca el link a su programa (http://picmania.garcia-cuervo.com/recursos/RRPicTimerCalculator.zip) si el autor no se molesta por dejarlo anclado acá.
-
si, la verdad que el metodo de las temporizaciones a traves del timer0 me gusto, el otro a traves de bucles tambien esta bueno y hasta me es mas claro pero la verdad que no me esta funcionando ademas de que al estar haciendo el retardo el pic esta trabajando al 100 con eso y no es capas de hacer otra cosa, en cambio, por lo que tengo entendido (que no estoy seguro de que sea asi) con el TMR0 no pasa eso osea puede hacer otras cosas.
sobre lo de contar interrupciones para llegar al segundo lo voy a tener en cuenta, hasta ahora lo venia esquivado
y gracias por el programa había podido entrar a la pagina de Redpic pero no lo encontraba, esta muy bueno
:-)
-
Bueno muchachos... la verdad, gracias a todos los que colaboraron en este tema, me an sido de bastante ayuda, rescate bastantes cosas muy interesantes
les comento que ya logre llegar al vendito segundo era solo cuestión de entender bien la metodología de cada tipo de retardo (mas alla que todavia a pesar de que lo entienda el retardo con bucles me sigue titilando muy rapido pero pienso que es la electronica)
al final utilice un retardo a traves de interrupciones
con un divisor de frecuencia de 128
cargando el TMR0 con 60 (0x3C)
y asi generando un retardo de 25 milisegundos el cual despues repeti 40 veces ( en hexa 40=0x28) para llegar al segundo, en realidad no es exacto pero para lo que tengo pensado hacer me sirve, tengo pensado despues cambiar al divisor mas grande y llegar a 50 milisegundos para repetir menos
aca el codigo completo:
List p=16f84
#INCLUDE P16F84.INC
__CONFIG _WDT_OFF & _PWRTE_ON & _XT_OSC
STATUS equ 0x03
PORTB equ 0x06
TRISB equ 0x86
TMRO equ 0x01
INTCON equ 0x0B
CONT equ 0x0C
org 0x00
goto INICIO
org 0x05
PROG
btfss PORTB,0
goto PRENDE
goto APAGA
PRENDE
movlw b'00000011'
movwf PORTB
movlw 0x28
movwf CONT
call RETARDO
APAGA
movlw b'00000000'
movwf PORTB
movlw 0x28
movwf CONT
call RETARDO
RETARDO
decfsz CONT
goto CARGA
goto PROG
INICIO
bsf STATUS,5 ;cambia al banco1
clrf TRISB ;PORTB salidas
movlw b'00000110'
movwf TMRO ;configura el divisor (128)
bcf STATUS,5 ;cambia al banco0
clrf PORTB
movlw 0x01
movwf CONT
CARGA
bcf INTCON,2 ;borra la vandera (le dice que no esta desvordado)
movlw 0x3c
movwf TMR0 ;carga TMR0 con 60 (25 miliseg)
NADA
btfss INTCON,2
goto NADA
goto RETARDO
end
-
que bueno q lo hayas conseguido!
felicidades, y a seguir con la picmania :D