TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: NorColombiano en 25 de Julio de 2007, 21:33:21
-
Hola saludos a todos los piqueros...
Bueno hice un programa en asm, la verdad no se que pasa no creo que sea el programa sino el pic... bueno aqui esta el codigo:
...
INCLUDE "P16F84A.INC"
LIST P=16F84A
STATUS EQU 03H
PORTA EQU 05H
PORTB EQU 06H
Timer EQU 020H
Turn EQU 021H
ORG 00H
BSF STATUS,5 ;Configurar
BSF PORTA,0 ;Pa0=In
BCF PORTA,1 ;Pa0=OUT
BCF STATUS,5 ;End config
CLRF Turn
CLRF PORTA
INICIO:
BTFSC PORTA,0
GOTO START
GOTO INICIO
START:
BTFSC PORTA,0
GOTO START
GOTO ENVIAR
ENVIAR:
BTFSC Turn,0
GOTO ENVIARA
GOTO ENVIARB
ENVIARA:
BSF PORTA,1
CALL TIMEX
BCF PORTA,1
CALL TIMEX
BSF PORTA,1
CALL TIMEX
BCF PORTA,1
CALL TIMEX
CLRF Turn
GOTO INICIO
ENVIARB:
BSF PORTA,1
CALL TIMEX
BSF PORTA,1
CALL TIMEX
BSF PORTA,1
CALL TIMEX
BSF PORTA,1
CALL TIMEX
BSF Turn,0
BCF PORTA,1
GOTO INICIO
TIMEX:
movlw 055h ;decimas de segundo
movwf Timer
TIMEXB:
decfsz Timer,1
GOTO TIMEXC
Return
TIMEXC:
CALL TIMEY
GOTO TIMEXB
cblock
Loop
Loop1
endc
TIMEY:
movlw 0x2c
movwf Loop
Delay10ms_00
movlw 0x4a
movwf Loop1
Delay10ms_01
decfsz Loop1, f
goto Delay10ms_01
decfsz Loop, f
goto Delay10ms_00
movlw 0x10
movwf Loop
Delay10ms_10
decfsz Loop, f
goto Delay10ms_10
goto $+1
return
END
...
En si, el programa jala mas o menos como debe (el timer segun es una decima de segundo, pero ps no creo q este bien) el pex esta en esto:
A veces prendo el pic, todo funciona perfecto (el led esta apagado, al oprimir el boton, al dejar de precionarlo el led se enciende por X segundos entonces se apaga)
El problema es q anormalmente el led se queda prendido, (siempre es asi: o funciona todos los casos, o en el primer intento fracasa)
Le intento reseteando el pic, le intento apagando la corriente, etc...
Eh pensando que quiza debo desactivar alguna interrupcion o no se... (no esta desactivado el timer? ademas en una ocacion hice CLRF INTCON y no vi diferencias)
Lo que pienso que esta mal es:
El cristal debe quedarse fijo (sin mas pulsaciones)
Pero no creo... ya probe 3 cristales direntes, 3.5mhz y 2 de 4mhz y noi hay cambios, los probe con y sin condenzadores de 22pf....
La bateria pero tampoco... porque probe con otra y nada...
Falla arbitrariamente
De 10 encendidas, solo en 3 ocaciones va a funcionar... osea 70% de errror...
Alguien me podria decir q estoy haciendo mal?
Saludos...
PD: No es el pic, porq eso me paso con el pic anterior solo q usando otro programa, este es un nuevo pic, solo q el error pasa muy frecuente...
Y otra cosa:
Si el pic falla de este modo, como puedo averiguarlo?? osea algo para q el pic se resetie tipo el watchdog... debo usarlo a fuerzas??
En un codigo normal, aun asi es necesario el watchdog??? (osea... el watchdog deberia ser usado siempre?)
Saludos
Y felices pictas :D :-) :-/ :mrgreen: :lol: :x :P :shock: :o :( :)
-
a primera leida, el cblock debe ponerse después del include, no se si sea correcto colocarlo allí (nunca lo he probado asi como lo tienes)
-
Bueno pues igual, funciona, ese codigo lo copie de un timer q aye en internet yo usaba un timer q no ocupaba el cbloc (pero ps el mio en si no sabia cuantos ms tomana, lo hacia empirico pues)
el codigo original (con el timer jalando sin cblok ni nachos) me da el mismo error.
Ayer me la pase moviendole a lo loco, poniendo resistencias, dandole reset tras reset tras reset y nada, el pic funciona o falla, independient4emente de si doy reset, si lo acabo de conectar a la alimentacion, si despues de media hora le doy reset...
Osea es totalmente al azar la falla...
Bueno, ps seguire investigando, y gracias por el consejo del cblock :)
-
Bueno ya le movi de arriba a abajo, lo prove con 3 pics distintos, cambie cristales, etc....
Nada funciona...
Pero ps ahorita me salio una teoria, a ver si alguien me la confirma:
Los .hex de una simulacion del proteus... son exactamente los mismos .hex que obtendria en el mplab con mpasm?
A lo mejor el .hex del proteus tiene alguna rutina de debugging o alguna interrupcion para el debuggeado...
Alguien me podria confirmar esto?
Saludos.
Algo curioso:
Como no tengo fuente de poder, al pic lo alimento via 3 pilas de 1.5 v en serie, segun un multimetro el voltage mas o menos oscila entre 3.5 y 4v (me imagino q las pilas ya estan algo gastadas...)
Pues bueno, con una de las baterias (la mas gastada) el pic si me funciona un 80% de encendidas,
con la mas nueva me funciona quiza 1 de cada 20...
Lo curioso es que si pongo un led entre el vcc y el + del pic usando la pila nueva (4v) el pic me responde digamos 60% de las veces que lo enciendo....
No se algo me dice q hay algo que esta haciendo falso pero ya verifique todo, pienso q una solucion temporal seria ponerle una resistencia variable e irle moviendo segun se gaste la vateria pero... ps es una solucion temporal muy forzada...
Mi pregunta es:
Debo desactivar interrupciones, timers o algo? lo unico que desactivo es el wdt y ya... probe con poweronreset etc...
Bueno despues de mucho moverle... creo que el pic se queda trabado, como cuando le quitas el oscilador cuando esta corriendo, y esto pasa en la primer instruccion en la que active un puerto o desactive uno...
Lei por ahi que se le puede colocar un condensador extra al pic para q tenga mas energia al inicio, alguien sabe donde puedo encontrar el diagrama o la info? ya busque y nomas no...
Bueno saludos... ahi si logro hacer jalar esto como debe les digo q pex para si alguien mas se traba...
-
Pos solucionado este pic ocupa 3v para jalar...
BUAHAHAHA :D
(ta raro, yo pensaba q jalaban entre 4.5 y 5.5 v o algo asi...)
-
...
Pero ps ahorita me salio una teoria, a ver si alguien me la confirma:
Los .hex de una simulacion del proteus... son exactamente los mismos .hex que obtendria en el mplab con mpasm?
A lo mejor el .hex del proteus tiene alguna rutina de debugging o alguna interrupcion para el debuggeado...
Alguien me podria confirmar esto?
...
yo compilo desde el mplab, no se porque pero no confío en el compilado del proteus, solo lo uso para la generación del .sdi que se necesita en la depuración línea a línea, cuando estoy seguro que todo está bien, me arranco con mplab y ese es el que grabo en el pic.
-
pues yo la verdad voy a hacer lo mismo, ese proteus nomas comense a usarlo y valieron mis programas pero...
Ahora si q no entiendo, compre un convertidor de corriente (me salio defectuoso, le pongo 1.5v y me da 4.66v)
como sea le pongo una resistencilla de 1k a negativo, 2 diodos a positivo, parece q funciona digamos 5 de 10 (asi seguidas, jala 1 ves, lo apago lo prendo, sigue funcionando... la 6ta ves ya se queda estatico, y se queda asi...)
Ya lo probe con alimentaciones distintas... dudo que sea que ocupo los 5v exactos puesto q con 3v me ha funcionado...
ya estoy desesperado, es como si el pic entrara en la direccion 00h y de ahi no pasara...
voy a usar RC como oscilador... quiza mis 3 cristales estan da~ados... aqui una preguntilla:
Es posible que un cristal se da~e, de tal forma q haga que el pic funcione 100% (osea siempre el codigo funcione, ningun error) pero q otras veces el cristal nunca funcione.... es posible?
Bueno, dejen le calo con RC a ver si de pura kk funciona esto....
No... saben?? voy a hacerle un ultimo intento, usando wdt... a lo mejor soy un wey y eso debi usar desde el principio jejejeje bueno... dejen wacho y les cuento :)
Y gracias a los 2 camaradas que me respondieron :)
-
Pues nel... Usando wdt:
led encendido todo el tiempo... (falla)
led enciende... reset... led enciende... reset... ... (ok)
Q onda ya probe muchos voltages, ya hice practicamente todo de todo... la ultima frontera es usar otro cristal que tengo por ahi (q dudo q jale...) o usar RC...
Ya si de plano no funciona de esas dos formas... pues estoy salado JAJAAJ
por cierto, a riesgo de sonar loco... pero mi programador de pics tenia el zocalo medio corto asi q tube que doblar un poco las patitas del pic (igual tenia q hacerlo para que entrara en el protoboard) alguien cree q eso sea mi problema? que fui muy brusco al doblarlas?
trone los pics por agarrarlos sin proteccion??
Cualquier pista se los agradesco... bueno... dejen sigo moviendole.. a webo debo hacer funcionar ese pic revelde....
Jajaja... va a saber quien manda :x
-
Pues...
Creo que el dios de los pics me mando una prueba de resistencia :D
Chale... a ver...
Ya minimise todos los factores que podrian hacer caos...
Recistencias/capacitores/cristal/voltage/cables/etc
Probando con RC les comento:
Jala igual pero puedo controlar la velocidad a la que jala el pic EHEHEHE (y la verdad es divertido eh, se los recomiendo 8))
Hubo algo curioso..
Al mover el cable que tenia para reset accidentalmente toque porta.4 (TOCK1) y al parecer eso me hizo subir los aciertos y minimizar los errores casi a 0...
Bueno, si prendo el pic y funciona, reseteo ilimitadas veces y siempre regresa funcionando... esto es exelente, exepto que si inicio el pic y no funcina, es un pedo hacerlo jalar (pero almenos ya respondio al reset)
Lo cual indica que hay otro problema... voy a tronar ese programa (aunq dudo que sea eso... el receptor usa un codigo parecido y lo hice funcionar sin problemas)
Dejen ver... a proposito, solo por curiosidad:
Se deben poner todas las patitas del pic (puertos sin usar) a tierra?
cale haciendolo con todos los del porta (los del portb nop pues no tengo tantas resistencias)
Bueno. si tengo tantas... dejen hago el portb a tierra... pero ps... es que... la duda es:
Porque funciona a veces y porque no????? asi empiricamente creo que trae una capacitancia dentro... antes pensaba q era porq el voltage no era suficiente pero nel... ya que use un eliminador y ademas el otro pic tiene mas cosas (un ampli) y funciona perfecto...
Bueno... ps creo que...
Lo ultimo que podria ser es el programador...
Voy a leer en el foro de programadores... quiza el mio tenga ese defecto (dejar cargado el pic o algo)
Saludos
-
Hola, por lo que comentas, lo primero seria que le construyas una fuente de alimentacion, con un 7805
porque de lo contrario, si no es eficiente, al arrancar se te tilda
asi que coloca un electrolitico de al menos 470 microfaradios, el regulador y otro capacitor a la salida de entre 10 y 100 microsf..
luego nos cuentas :-/
Norberto
-
pos como fuenteestaba usando un eliminador de voltaje da 4.7 aprox una pregunta, el 7805 se lo puedo conectar digamos en un rango de 5 a 12 v?
ahorita no puedo ir a comprarmelo porq ya cerraron :(
Aunq pienso que si es eso, otro detalle ahorita lo hice funciona 90% de las veces (incluso si se tilda, al dar reset ahora si vuelve a la normalidad) lo hice conectando directo la pata RB7 y RB6 a tierra
No entiendo a que se deba esto, quiza ocupo especificar el puerto b como salidas o entradas?
Bueno, pues ya casi esta chido... nomas por ese 10% de fallas...
Gracias por tu respuesta man :)
Por cierto, probe el otro pic... al principio no funciono, despues le hice un aterrisaje en la RB7... no funciono, se la quite y de repente ya funciona... alguna posibilidad de que alguna carga quede en ese lugar?