TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: CharlesOne en 12 de Mayo de 2014, 13:08:37
-
Muy buenas!
Soy nuevo en este foro y vengo en busca de vuestra ayuda.
Estoy realizando un proyecto y en un primer momento usé un PIC16F873A, normalmente alimentado a 5V pero no me di cuenta de que en ciertas ocasiones la tensión disminuye a 3,7 V por ser un sistema alimentado desde varias fuentes, una de ellas una batería de Li-Ion.
El caso es que me informé sobre los LF y vi que, para mi aplicación iban perfectos, puesto que he fijado la frecuencia en 250KHz con la red RC externa y los 5 V de alimentación. Programé el 16F873A con MPLABX y lo qumé con el K150. El caso es que ahora, al programar de la misma forma (mismo programa, mismo programador y todo) el LF, mi sistema funciona exactamente igual, pero cuando llega al umbral de los 4V, se resetea, con lo cual mi gozo en un pozo, el LF no sirve de nada...
¿Puede ser porque he usado el mismo programa? Me he fijado en que el MPLABX no te deja programar el 16LF873A, pero el el k150, se supone que sí que los programa (aunque en la opción de selección de dispositivos no aparezca más que el 16F873A...
¿Cómo puedo hacer para emplear el 16LF en vez del 16F con los medios de los que dispongo?
Muchas gracias por adelantado!!
-
la diferencia entre los F y los LF es el voltaje de alimentación, por lo que entiendo estas intentando alimentar al lf con un voltaje de 5V, por eso es que este puede estar reiniciandose
-
Si rivale, hay ciertos momentos en los que esta a 5V o incluso más, casi 5,5V. Pero al comienzo, esta a 3,8V y no funciona, tiene a las salidas de los puertos ciertos LEDs que en el momento de inicio deberían de encenderse y no se encienden. Es más, a interactuar con el PIC por medio de los switches que tengo a ciertos puertso, tampoco reacciona, con lo que me lleva a pensar que no esta alimentado correctamente.
-
ese pic funciona a 3.3, podrías ponerle un regulador ldo para asegurar que tu voltaje no varíe, ya que puedes dañar el pic
-
Pues en el datasheet pone que su rango de alimentación va desde los 2 hasta los 5,5 V....
-
A lo mejor tienes el fuse BROWNOUT habilitado para que resetee a los 4V
-
Pues en el datasheet pone que su rango de alimentación va desde los 2 hasta los 5,5 V....
Efectivamente, así es y no habría problema con la tensión.
Pero, ¿has tenido en cuenta que los 16LF87xA solo trabajan hasta los 10MHZ? (Figura 17.2 y tabla 17.1, y algunas mas, de la hoja de datos), pregunto porque no indicas que oscilador estás utilizando.
-
A lo mejor tienes el fuse BROWNOUT habilitado para que resetee a los 4V
Esto es muy factible que suceda, ya que por defecto está habilitado. (bit 6 "BOREN" de la palabra de configuración BOREN=1 -> habilitado, y BOREN=0 -> deshabilitado)
-
Si rivale, hay ciertos momentos en los que esta a 5V o incluso más, casi 5,5V. Pero al comienzo, esta a 3,8V ...
con que frecuencia está variando tu alimentación?, esto puede ocasionar que el micro se reinicie.
-
Muchisimas gracas!!
Efectivamente era por la palabra del brown out...
No es un poco raro? Quiero decir, el Brown Our Reset se produce cuando la tensión de alimentación excede los límites permitidos, pero en este caso, con 4V... estoy perfectamente dentro de los limites no??
No obstante, esta solucionado, ahora marcha a la perfeccion
-
No es por exceso, sí no por valor inferior al indicado
-
Pues ahi esta el tema... que le estaba alimentando a 4V... como que por debajo del margen inferior de 2V no se estaba saliendo....
El caso es que lo he desactivado y funciona sin problema
-
Pues ahi esta el tema... que le estaba alimentando a 4V... como que por debajo del margen inferior de 2V no se estaba saliendo....
El caso es que lo he desactivado y funciona sin problema
El tema es que el brown out se activa si la alimentación baja de 4V, y en este micro es la única posibilidad, por arriba de 4V el micro funciona, por debajo de 4V no.
Hay otra familias donde tenes algunas opciones par la tensión a la que actúa el brou out.
-
Ademas de eso, me ha surgido otro problemilla.
A través de un switch conectado a RB4, genero una interrupción por flanco, y quiero encender un LED conectado a RA5.
Estoy usando el comparador 1 para otras tareas, con lo cual, configuro CMCON 0x01, para que el C2OUT este Off, y pueda seguir trabajando con el comparador 1.
El caso es que a no ser que ponga en CMCON 0x07, es decir, que desactive ambos comparadores, RA5 no funciona como output. Es más, cuando presiono el switch, en PORTA efectivamente me pone a 1 el bit 5, pero al volverlo a pulsar, no lo borra.
Necesito seguir trabajando con el comparador 1 y tener RA5 como una salida digital. ¿Hay alguna forma de hacerlo?
Muchas gracias
-
Hay que leer el estado del puerto b cuando se va a salir de la función de interrupción para que se ponga a 0 el flag.sí no lo haces así sólo te cambiara una vez el estado del led, la primera vez que entre en la interrupción
prueba otra vez configurando los comparadores, sólo habilitando el primer comparador y prueba de nuevo
-
Nada, sigue exactamente igual. He probado leyendo del puerto B, pero no creo que sea ese el problema.
Hay algo en el RA5 que no me deja togglearlo solo ponerlo a 1, y, aun siendo RA5 = 1, el puerto permanece a nivel bajo....
-
Lo mejor que puedes hacer es poner el código de programa y un esquema
así se puede ir descartando problemas
ahora no tengo el datasheet a mano, pero creo que ese pic lleva conversores AD, tienes el pin habilitado como salida digital?
-
Bueno, no se porque pero no hay duda de que es el modulo comparador el q esta interfiriendo, voy a ver si puedo liberar otro puerto y hacerlo con ese otro.
Gracias por la ayuda!
-
Saludos de nuevo!
Estoy acabando ya el proyecto, pero se me presenta una última dificultad.
Estoy usando el pin RA3 como salida digital para controlar un BJT que actúa de switch.
El caso es que, configuro este pin:
- TRISA = 0xF1
- ADCON0 = 0x00
- ADCON1 = 0x07 // Todo el puerto A como digital.
- CMCON = 0x36 // RA0-RA3 Entradas analógicas a los comparadores.
En mi código, solamente estoy empleando el comparador 1, en concreto, en el modo de comparación CM2:CM0 = 110, en el que comparo la señal que me entra por RA0, con un voltaje generado internamente y gestionado con CVRCON.
Lo que quiero es que se encienda y se apague ese puerto cada vez que pulso un pulsador. En ISIS, no hay ningún problema, pasa de nivel bajo a nivel alto y viceversa cada vez que pulso el interruptor, sin embargo, cuando construyo el circuito en una protoboard, este puerto pasa de nivel bajo a alto (desde el reset, cuando le pulso la primera vez), pero al volver a pulsar el pulsador, no vuelve a nivel bajo, permanece indefinidamente a nivel alto (hasta que lo reseteo con MCLR).
¿Puede ser de la configuración CM2:CM0 = 110 del registro CMCON?
Si solamente estoy usando el pin RA0 como señal de entrada de tensión, puedo usar RA2 como salida digital?
Muchas gracias !
-
Estas trabajando con los 2 comparadores multiplexados,desde el Pin a0 hasta el a3 están en analógico, así que no puedes
Para tener 2 salidas digitales, a1 y a2 deberás poner a 001 los bits de configuración de los compradores
a4 estará como salida del comparador
-
Es una opcion, el tema es que de los 6 pines del puerto A, necesito comparar una señal senoidal con una tensión de 0 y, tener 3 salidas digitales, entonces el tema es que, o bien configure a 001 o a 110 el comparador (para tener la señal de 0V interna o externa), necesito 3 pines de salidas digitales y, RA4 no puede serlo, con lo cual, necesitaria en este caso RA5, que como postee anteriormente, no puedo tenerla como salida digital a pesar de tener esa configuración en los puertos y cambiando obviamente el correspondiente pin de TRISA a 0.
-
partiendo de la opcion que los bits CM2:CM0 = 110...
has puesto como configuras el pic el puerto A:
- TRISA = 0xF1
- ADCON0 = 0x00
- ADCON1 = 0x07 // Todo el puerto A como digital.
- CMCON = 0x36 // RA0-RA3 Entradas analógicas a los comparadores.
prueba con:
- TRISA = 0x02 //bit5 como salida digital... igual aqui tenias el problema
- ADCON0 = 0x00
- ADCON1 = 0x07 // Todo el puerto A como digital.
- CMCON = 0x31 // RA0-RA3 Entradas analógicas a los comparadores y A4 como salida vinculada al estado del comparador