TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: black_flowers en 12 de Marzo de 2007, 19:56:57
-
hola, a to2, q tal!
tengo un programa de lo más sencillo que me hace cosas muy raras, y estoy intentando descubrir el porqué, aunque no es nada fácil. El pic es un 16f84a y está montado en una protoboard y lo único que tiene que hacer es que se encienda un led cuando yo conecto un pin del pic (y no tiene que volver a apagarse, tan sólo mantenerse encendido una vez pongo a uno la entrada). En cambio el led se enciende mientras la entrada está a 1 y se apaga cuando la entrada se pone a cero. El cirucuito y el programa ya están más que comprobados y está todo bien y bien conectado. Lo que hace sólo tiene sentido si cada vez que yo pongo a 1 o vuelvo a poner a 0 la entrada, el pic se resetee. Y esa es la pregunta ¿puede ser que el pic se resetee automaticamente si la corriente que se le proporciona no fuese suficiente?
Otra cosa que sucede es que el led se apaga tan pronto le toco con la mano a cualquier parte del circuito (incluso a los cables con aislamiento) o tan pronto le intento conectar cualquier otra cosa como un tester para comprobar la tensión. ¿Puede ser esto todo por una corriente demasiado baja? o no?
gracias!
-
Hola, al no ver el programa son suposiciones... pero tienes desactivado el wdt ?
creo que se te reinicia el programa por el watch dog esta activado...
los protos suelen dar problemas de contactos...
que tan pobre es la alimentacion?
Suerte!
Norberto
-
Fíjate de que la tensión esa de 0 V en realidad no pase por debajo de 0V. Eso puede hacer resetear a tu pic también.
Saludos
-
Tambien debes de checar la programacion de bajo voltaje, pero para ayudar necesitamos ver el programa :-/
-
Opino como el amigo RiBerZerO.
Cuando le pasas la mano a los micros y estos como por arte de magia hacen cosas raras... FUSE LVP (low voltage program).
Suerte!!
Un saludo desde Alicante.
-
El cirucuito y el programa ya están más que comprobados y está todo bien y bien conectado.
bueno amigo black_flowers es evidente que ya sea en el programa o en el circuito hay algo que no esta bien y seria de gran ayuda que subieses ambos para decirte algo mas concreto.
el pic es un 16f84a por tanto no admite LVP.
Otra cosa que sucede es que el led se apaga tan pronto le toco con la mano a cualquier parte del circuito (incluso a los cables con aislamiento) o tan pronto le intento conectar cualquier otra cosa como un tester para comprobar la tensión.
la ocasion en que me sucedio algo asi fue debido a un mal contacto del negativo.
si estas usando ra4 como salida recuerda que es colector abierto.
saludos
-
Si metes la mano y se pone a hacer tonterias yo diria... vaya casi aseguraria que tienes declaradas en el programa patillas como entradas y las tienes al aire. Es importantisimo no dejar entradas al aire (cuantas veces he escuchado eso ultimamente)... meten ruido en ttl (y en tecnologia cmos puede ser la destrucción del chip)
1 saludo
-
Me ha pasado que algunos circuitos empiecen a hacer cosas raras cuando toco cualquier parte del circuito, incluso tocando solo el encapsulado del integrado sin tocar los pines, la mayoría de las veces ha sido problemas de mala conexión de la alimentación.
Verifica que la alimentación este correcta, no solo midiendo voltaje en los pines del pic sino verificando continuidad de los pines de alimentación a la fuente.
saludos.
-
Si metes la mano y se pone a hacer tonterias yo diria... vaya casi aseguraria que tienes declaradas en el programa patillas como entradas y las tienes al aire. Es importantisimo no dejar entradas al aire (cuantas veces he escuchado eso ultimamente)... meten ruido en ttl (y en tecnologia cmos puede ser la destrucción del chip)
buen apunte elmasvital
un saludo
-
y ya puestos un pequeño condensador entre los terminales de alimantación conectado lo más proximo posible puede ayudar a eliminar duendes electronicos o hacer callar a la bruja averias.
-
Otra recomendación: soldar la carcasa del cristal a GND.
-
el programa es este:
#include "p16f84a.inc"
STARTUP code
pagesel main
goto main
nop
code
main
banksel PORTB
clrf PORTB
banksel TRISB
bsf TRISB,2
bcf TRISB,3
loop
banksel PORTB
btfss PORTB,2
goto loop
bsf PORTB,3
goto loop
end
yo creo que está bien (deberiá encender el portb3 cuando active el portb2 y debería mantenerse encendido y no apagarse al desconectar el portb2).
El wdt no lo toco para nada en el codigo pero en el panel del winpic le desactivo la casilla y me imagino que con eso será suficiente para desactivarlo.
No hay conexiones mal en la protoboard ya que he probado en cuatro posiciones distintas de la placa y he probado incluso con otra placa y el resultado es el mismo. Además he probado con dos pic16f84a distintos y el resultado es el mismo. No cabe ningún fallo de ese tipo, a no ser que sea algo de un mal aislamiento o ruido o interferencias... A mi me da la impresion de que el micro se resetea, ya que si no no tiene sentido que se vuelva a apagar el portb3 al desconectar la entrada portb2.
El caso es que el programa en cuestion es la tipica chorrada que uno hace para empezar y no da arrancado, y no puedo seguir haciendo otras cosas que tenía pensado. He hecho otras cosas bastante mas complicadas con pics pero no utilizaba protoboards, y ademas utilizaba otra fuente de alimentacion por eso me hace desconfiar de algo de eso. Ademas recuerdo que el circuito no hacia nada raro al tocarlo con la mano ni al colocarle un tester.
Probare lo del condensador entre las patas de alimentacion (por cierto qué capacidad?, y en que parte del circuito lo coloco exactamente?)
cualquier otro comentario será muy de agradecer por mi parte,
un saludo. :)
-
Los caps de desacople son útiles, creo que muchos de los consejos que aqui se mencionaron son muy buenos, una última cosa me queda por decir y es que segun mi experiencia con los protoboards estos tienen cualidades electricas muy distintas a las de una placa incluso las de peor calidad.
Ojo con usar cristales de muchos Mhz en protoboads.
Haveces incluso pasar la mano por arriba de los cables genera ruido en la circuiteria.
Tienden a generar transitivos y atraen toda clase de ruidos externos.
Mi consejo es que bajes la frecuencia de trabajo, uses cables lo mas cortos posibles, bajarle la altura a todos los componentes (cortar las patas largas en especial la del xtal).
Quiza usar una placa universal sea buena idea a mi siempre me resultaron practicas.
En conclución las protoboard son buenas pero haveces pueden ser un dolor de cabeza.
-
Fíjate de que la tensión esa de 0 V en realidad no pase por debajo de 0V. Eso puede hacer resetear a tu pic también.
Saludos
Estoy intrigado Mauricio :). Entonces un pic ¿se puede reiniciar metiendo un voltaje negativo?
Salu2
Pedro
-
Estoy intrigado Mauricio :). Entonces un pic ¿se puede reiniciar metiendo un voltaje negativo?
Si, de hecho hasta se puede dañar.
Lo del reinicio me pasaba con un pic y en el A/D entraba 'a veces' una tensión negativa que hacía resetear mi pic. Lo del daño es porque el humbral entre Vdd y la mínima tensión se hace muy grande y por ende se superan los límites del fabricante.
Saludos
-
ok, entonces este es el montaje que yo tengo y me gustaría saber qué capacidad debo colocar para aislarlo bien (supongo que la capacidad irá entre vss y vdd no?)
y tambien me gustaría saber qué es una placa universal (¿es una placa con perforaciones en la que hay que soldar los componentes?)
un saludo.
-
Yo suelo poner un condensador de 100nF. Es importante que esté lo más cerca posible de los pines del PIC.
-
yo uso de 1microfaradio (no electrolítico), de todas formas no es un valor "critico", casi cualquiera que tengas a mano de al menos varias decenas de nanofaradios te puede valer, el de 100nF que pone Nocturno es un valor muy standar.
-
Bueno pues yo no veo que mandes MCLR a VCC. Si no lo haces, exactamente pasa lo que te esta pasando. El micro a veces corre, a veces no. No se si ya lo nombraron, pero en el esquema que montaste no veo que la hagas.
Saludos! :mrgreen:
-
Hola, en mi opinion, tienes varios errores,
-Primero el pin mclr y el condensador de 100nF en la alimentación, pegadito al pic.
-en segundo lugar, el led no tiene resistencia ( yo pongo de 270 o 330 ohm).
. En tercer lugar, es un error que a mi me ha pasado en varias ocasiones y aun no entiendo el porque, pero trata de hacer lo siguiente. Cambia la alimentación de la señal de entrada del pulsador o interruptor, es decir, lee una masa, no un positivo, y pon una resistencia de pull-up a positivo, como la que ya tienes de 10k. El motivo es que las personas generamos una corriente estática que le encanta al pic. Con esto debes solucionarlo casi con seguridad.
Saludos
-
Creo que PICMouse ha descubierto la clave. MCLR tiene que estar conectado a Vdd a través de una resistencia; con 10K servirá.
-
Dos cosita.
Creo que dibujaste mal la polaridad del diodo led, ya que según el esquema, mandaste el pin ANODO a GND :? de esa forma nunca encenderá.
Para que el LED encienda, siempre el CATODO es más negativo que el ANODO. con el dibujo que mostraste para que encienda, el PIC debería sacar por el puerto un voltaje negativo. Cosa que nunca pasara. Como te digo debe ser error de dibujo y en el esquema real lo tienes bien.
Segundo.
Los leds comerciales normales soportan una corriente máxima de 25mA, pero eso es lo máximo por lo que es recomendado que se le asegure una corriente de 10mA para lograr una buena luminosidad.
Por lo que debes colocarle una resistencia en serie al Led de 200R.
Saudos! :mrgreen:
-
Los leds comerciales normales soportan una corriente máxima de 25mA, pero eso es lo máximo por lo que es recomendado que se le asegure una corriente de 10mA para lograr una buena luminosidad.
Por lo que debes colocarle una resistencia en serie al Led de 200R.
Yo pondría una de 470Ohm para lograr precisamente los 10mA y no más que eso.
-
viendo el código y el esquema que pusiste, también quisiera preguntar algo:
¿no debería introducirse un retardo para darle un tiempo prudencial a que el led´s se encienda o se apague?
lo digo porque al pulsar o no, existen los llamados transitorios y entonces puedes tener una oscilación en el led como respuesta.
puedes añadir un circuito R-C en RB2 ó meterle un delay después de testear a pulsador.
digo...
Salu2
Pedro
-
ok, gracias, probaré lo que me decis, la verdad es que no sabía lo del pin mclr. ya comentaré el resultado.
un saludo y muchas gracias
-
efectivamente era la pata del mclr. lo que ha sucedido es que yo creia que esa pata tan sólo se utilizaba si querias resetear el pic.
Gracias a to2, lo del condensador tambien sera util para evitar otros fallos.
sl2 :)
-
Felicidades por haber resulto el problema. :-/
Saludos!
-
Cambia la alimentación de la señal de entrada del pulsador o interruptor, es decir, lee una masa, no un positivo, y pon una resistencia de pull-up a positivo, como la que ya tienes de 10k. El motivo es que las personas generamos una corriente estática que le encanta al pic. Con esto debes solucionarlo casi con seguridad.
O bien se usa un puerto con pullup y no hace falta la mencionada resistencia. :)