TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: yukardo en 10 de Junio de 2008, 01:01:43
-
Saludos.
Tengo el siguiente problema. Hice un programa de encender y apagar un led para probar el PIC16F876A, lo programo y hago que el programador lea el pic y sale que copio todo bien, lo pruebo en proteus y funciona. Pero al montarlo en fisico no me funciona. Cual podria ser el error?
Gracias de antemano por su ayuda.
-
podrias mostrar el codigo
-
Hola
Posibles soluciones:
- Conecta el pin MCLR a 5V
- Conecta los capacitores de 27uF y el cristal correctamente
- Verifica la polaridad de tu led, puede estar conectado al revés (poco probable)
- Si estás usando la terminal A4, por favor lee este tema...
http://www.todopic.com.ar/foros/index.php?topic=8121.0
-
aqui les dejo el programa.
main:
high portb.bit0
pause 1000
low portb.bit0
pause 1000
goto main
estoy usando un cristal de 20 Mhz con condensadores ceramicos de 27pf.
-
Casi con toda seguridad es un problema del montaje físico. Mal conectado algún cable, falta de polarización en las patillas, mal contacto en las placas, etc. Repasa bien el circuito y veras como localizas lo que falla.
Un saludo
-
Si ya revisaste lo que te mencionamos anteriormente, intenta con un cristal nuevo de 20MHz.
-
main:
high portb.bit0
pause 1000
low portb.bit0
pause 1000
goto main
Este es todo el programa? Estás trabajando en pic basic no?
Entonces te faltaría añadir al principio:
define osc 20
Ya que el oscilador que supone por defecto el compilador es 4MHz.
Y también te faltaría esto al final:
END
Es la instrucción de fin de programa... si no la colocas, compilas y grabas el pic... este no va a hacer nada. Me pasó una vez :D
Ok saludos, nos leemos! :mrgreen:
-
aqui les dejo el programa.
main:
high portb.bit0
pause 1000
low portb.bit0
pause 1000
goto main
estoy usando un cristal de 20 Mhz con condensadores ceramicos de 27pf.
Porque no lo haces asi:
define osc 20
main:
high portb.0
pause 1000
low portb.0
pause 1000
goto main
Yo lo he probado asi y me funciona al pelo! :mrgreen:
a y no veo donde esta el define para la frecuencia del cristal que estas utilizando :shock:
ahora sino funciona aun asi reviza todo el hardware porque de seguro es alli donde esta el problema! :mrgreen:
Saludos
-
Porque no lo haces asi:
main:
high portb.0
pause 1000
low portb.0
pause 1000
goto main
Buena idea Ralf... a mí también me pareció un tanto extraño eso de portb.bit0, pero no le dí mucha importancia.
Con tu comentario me entró la curiosidad y revisé el manual, y en efecto la sintaxis que se recomienda es portx.x
Saludos, nos leemos! :mrgreen:
-
Asi es firepic!
Busque en el manual y no consegui esa forma de declarar los pines del pic por eso lo acomode :mrgreen:
A veces los errores son muy sutilies y dan muchos dolores de cabeza luego :D
Saludos
-
Si el programa estuviera mal no funcionaria en Proteus. Como no es el caso el programa está bien.
Un saludo
-
Si el programa estuviera mal no funcionaria en Proteus. Como no es el caso el programa está bien.
Eso es totalmente cierto.
Pero lo del define osc 20 sí que va... porque aunque no lo coloque puede funcionar en proteus, pero no le funcionará bien en la realidad.
Ahora bien, como tú y migsantiago han dicho, algo del hardware debe estar echando broma por allí...
Saludos, nos leemos! :mrgreen:
-
Si el programa estuviera mal no funcionaria en Proteus. Como no es el caso el programa está bien.
Eso es totalmente cierto.
Pero lo del define osc 20 sí que va... porque aunque no lo coloque puede funcionar en proteus, pero no le funcionará bien en la realidad.
Ahora bien, como tú y migsantiago han dicho, algo del hardware debe estar echando broma por allí...
Saludos, nos leemos! :mrgreen:
Totalmente de acuerdo
Un saludo
-
Bueno hice las modificaciones que me dijeron y nada.
No funciona todavia.
Probe con otro cristal y nada.
-
El pic que estas utilizando tiene al final el " -20 ", prueba poniendo un cristal de 4 Mhz.
-
esto es la q tiene marcado el pic
PIC16F877A-I/P
-
El pic que estas utilizando tiene al final el " -20 ", prueba poniendo un cristal de 4 Mhz.
Buena recomendación.
Se me ocurre otra, en el código de basic, ¿hay forma de decirle al compilador que use el fuse HS para cristal? Puede que el pic esté siendo grabado en modo RC o XT, los cuales no usan el cristal a la velocidad apropiada.
Busca esa definición en basic para forzar el código hex a grabarse en modo HS.
-
hola
te me has adelantado amigo migsantiago, si se le puede indicar mediante la palabra de configuración, por ejemplo:
@ DEVICE pic16F84A, 0x3ff1 ' oscilador XT y PWRT enable. este valor lo puedes ver en el programador cuando estableces las propiedades de grabación o en el datasheet de manera más concisa.
recuerda que para un crystal de 20Mhz se ha de seleccionar HS y no XT.
una duda que tengo yukardo es que en tu primer post haces referencia a un 876 y en el último a un 877. ¿haces coincidir el que compilas en pic basic con el que seleccionas en el programador? no descarto que tu problema sea del programador ya que el programa no tiene complicaciones.
la primera vez que usé un 16f628a también fue con un programa muy simple de envío de datos y no conseguí hacerlo funcionar ni revisando manuales ni circuito ni nada de nada, el pin por el que deberían estar saliendo los datos estaba siempre en alta impedancia. bastante tiempo después caí en la cuenta de que ese pic tiene comparadores analógicos y que bastaba una simple instrucción para resolver el tema: CMCON = 7. desde entonces establezco los parámetros del pic al inicio del programa para que si algo no funciona no me vuelva absolutamente loco.
un saludo
pd: tanto el 876 como el 877 exigen un buena lectura de su hoja de datos. si como me parece estás iniciándote quizá te vendría bien hacer funcionar las cosas con pics más simples antes. en mi modesta opinión, claro está
-
Si bueno empece con el 16F876A pero un amigo se lo llevo para probarlo asi que probe con el 16F877A con el cual me sucede el mismo problema.
Cuando compilo yo selecciono el pic correspondiente eso no creo que sea el problema.
ahora no me dijeron como definir HS.
Yo he trabajado con pic pero mas que todo con el 12f675, pero este me tiene muy limitado. De alli que quise subir el nivel.
-
ahora no me dijeron como definir HS.
Ah! es que no somos adivinos... en todo el tema no has mencionado qué compilador de basic estás usando.
Pero... según la recomendación de xocas y usando winpic800, puedo deducir el código que debes poner en tu archivo .bas...
@ DEVICE pic16F877A, 0x3F3A 'oscilador HS para 20MHz
(http://img141.imageshack.us/img141/1882/dibujofp8.jpg)
-
esto es la q tiene marcado el pic
PIC16F877A-I/P
Prueba usando un cristal del 4Mhz, estoy seguro que alli funcionara, y porsiacaso tambien declara cristal del mismo valor.
Yo programaba en Pic Basic Pro y solo era necesario declarar el cristal si era diferente a 4Mhz, ya que el compilador utiliza este valor por defecto, y en el winpic solo carga el hex y comprueba que el oscilador sea XT.
Saludos.
-
Correcto kallitos. Si no colocas nada el Pic Basic Pro asume 4MHz.
No sé si el detalle también podría estar en el grabador y que el pic es de la nueva tecnología que tiene la "A" al final (PIC16F877A)...
Tal vez debe tener una configuración especial o algo... alguien ha programado ese tipo de micros con el grabador que tiene yukardo?
Lo digo porque yo tenía un picstart plus y no grababa los que tenían la A, porque no estaba actualizado para eso.
Ok saludos, nos leemos! :mrgreen:
-
Justo tengo frente a mi los dos tipos de pics mencionados 16F877A-I/P y 16F877-20/P, los dos grabados con el PIPO (aun no me mudo a otro :mrgreen: ), el primero corre sólo con cristal de 4Mhz si le meto 20 no hace nada, pero el segundo funciona con cualkiera de los dos, claro que la velocidad de ejecución varia.
-
hola
por lo que yo se, los caracteres I/P hacen referencia a la temperatura y tipo de encapsulado (I=Industrial, -40º to 85º y P=PDIP). una diferencia amigo kallitos es que el 16f877 es más 'tolerante' con la frecuencia del reloj y se puede seleccionar el modo xt y hacerlo funcionar a 20mhz, pero no es así en el caso del 16f877a que debemos respetar este parámetro tanto en el programa como en el programador.
para evitar dar palos de ciego te diré que en mi caso también cambiaría momentáneamente el cristal, lo programaría en modo xt y forzosamente tiene que funcionar (incluso usando oscilador interno debe funcionar), pero si aún así no te funciona es que probablemente esté mal el quemador.
un saludo
pd: así es migsantiago, la palabra de configuración se puede tomar fácilmente desde winpic800 o icprog e insertarla al principio del programa
-
seguro que el problema está en la palabra de configuración, de hecho tal vez esté en el valor de boden, pero como activarlo desde basico no lo sé; claro que si te cambiaras a ensamblador pues te digo jis jis jis
-
hola
la palabra de configuración la puedes establecer en el propio programa si deseas mediante la opción:
@ DEVICE nombredelpic, valor.
el valor puedes obtenerlo si usas winpic800 guiándote por lo que te muestra migsantiago. es decir, seleccionas los parámetros y en 0x2007 te mostrará el valor, y si usas icprog pues algo muy similar:
(http://img49.imageshack.us/img49/6383/icprogck5.th.gif) (http://img49.imageshack.us/my.php?image=icprogck5.gif)
y esto lo posicionas al inicio del programa.
claro que también se puede prescindir de hacerlo en el programa y hacerlo directamente en el software de grabación al final del proceso, aunque el resultado es el mismo personalmente prefiero hacerlo en el programa y así cuando se carga en winpic800 ya lleva consigo estos parámetros.
un saludo
-
hola si me permiten meter mi cuchara como se dice por aqui ,tube un problema parecido con el mplab pero ami no me funcionaba ni en el proteus no error de programa(me refiero al que iba ir al pic)
solucion bueno formatear mi ordenador instalar todo de nuevo seguro que es un error del sistema operativo o una mala instalcion de sofware te lo recominedo porque fue lo que hice y medio buen resultado.Ya que todo lo que dicen companeros no parece solucionar tu problema
haslo y me cuestas :-/ :-/
-
saludos.
Ayer probe con el cristal de 4 MHz y si funciona. al fin.
Ahora tengo q ver como hacer para que funcione con un cristal de 20 MHz.
Gracias a todos por su ayuda.
-
Usas PBP cierto? Bueno en el codigo fuente tienes que añadir DEFINE OSC 20 para que compile a esa velocidad, y cuando programes marca la opcion de HS en el software que uses para programar.
-
¿Estará activado el LVP y/o el BODEN? Si la respuesta es afirmativa, ahí está el error.
-
Eso ultimo LVP y BODEN nose que es me lo podrian explicar. Asi se si lo he activado o no. Gracias
-
Es parte de las configuraciones cuando vas a grabar...
LVP es "Low Volt Programming" baja tensión de grabación... y el boden es para activar el "Brown Out Detect"... sirve para dar un reset al pic cuando la tensión baja de cierto valor especificado...
Saludos, nos leemos! :mrgreen:
P.D. Si escribí algo mal en inglés me disculpan, no es mi fuerte :D
-
Bueno nose pero mi programador por mas q lo configuro a 20 MHZ programa a 4 MHz
-
No
El LVP y el BODEN se encuentran en la palabra de configuración. Si trabajas en assembler deberás agregar los siguiente:
_LVP OFF & _BODEN OFF
O también lo puedes configurar en el momento de grabar. Por ejemplo, el ICPROG, en la parte derecha, está la configuración de la palabra config que deberás setear con los valores deseados, antes de proceder a grabar el PIC.
-
saludos.
Ayer probe con el cristal de 4 MHz y si funciona. al fin.
Ahora tengo q ver como hacer para que funcione con un cristal de 20 MHz.
Gracias a todos por su ayuda.
Que bueno que te haya funconado :)
-
Si el software del programador me da la opcion del LVP y BODEN.
Pero al programar el software me bloquea la opcion de la velocidad y queda por defecto 4 MHz, queria saber si es posible configurar eso cuando se hace el programa.
Gracias a todos por su ayuda.
-
@ DEVICE pic16F84A, 0x3ff1 ' oscilador XT y PWRT enable. este valor lo puedes ver en el programador cuando estableces las propiedades de grabación o en el datasheet de manera más concisa.
recuerda que para un crystal de 20Mhz se ha de seleccionar HS y no XT.
Saludos esta es mi primer respuesta y espero le sirva a alguien
Hice un pequeño proyecto usando el PIC16F84A. Utilizando un cristal de 4 MHZ funcionaba tanto en físico como en Proteus.
Cabié a un cristal y el PIC (20 MHZ y PIC16F84A-20) y y andaba en Proteus pero no en físico.
Para que funcione bien en Ensamblador, necesitan modificar la declaracion de los FUSES para el oscilador.
Para 4 MHZ:
__CONFIG _XT_OSC&...
Para 20 MHZ:
__CONFIG _HS_OSC&....
Con esto le decimos al micro que el oscilador es de alta frecuencia.
Gracias a Suky por esta información.
:-/