TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pollastre en 18 de Diciembre de 2006, 14:22:14
-
Buenas a todos,
terminado un proyecto con PICs (16F648A) que estaba llevando a cabo, me he propuesto hacerlo "actualizable", vamos, que mediante un programador ICSP pueda grabar un nuevo firmware en el pic una vez esté montado en su PCB con el resto del circuito. De los 5 pines que necesita el ICSP, el único con el que tengo alguna duda es Vdd. Tenemos inicialmente esto :
-
¿Y cuál es tu duda?
De todas formas te diré que la Vdd del micro puede seguir conectada a tu circuito, y tenerlo encendido cuando quieras programar el micro.
No obstante, te recomiendo echar un vistazo a este documento del maestro Sisco:
http://www.winpic800.com/descargas/REV2/Pic_dsPIC_ICSP.pdf
-
buf, disculpame... se me ha "posteado" el mensaje antes de acabarlo ! asi que el resto del texto y dos imagenes más se me han quedado en el tintero... a ver si puedo mandarlo entero ahora, un segundo....
-
veamos si soy capaz de adjuntar las dos imagenes restantes ahora....
bien, mi duda es, precisamente, con Vdd del PIC. respecto a MCLR ningun problema (ya habia supuesto lo del diodo, y en efecto, funciona perfectamente ), asi como RA6 y RA7, sendos diodos arreglan cualquier problema con estos pines y permiten simultanear el programador con el circuito final.
Aqui, el problema fundamental que tengo, es con Vdd. El rail de Vdd alimenta a otros integrados en mi PCB a parte del PIC, y no quiero "inyectarle" el Vdd del ICSP , ya que si le meto ese "Vdd" al rail, no solo estaré programando el PIC, sino que estare alimentando los otros ICs que estan conectados al rail Vdd en la PCB.
Sumale a eso que algunos de esos ICs no admiten tensiones superiores a 4v, asi que no me interesa en absoluto meterle 5v a ese rail. (de esto, ya podeis deducir que mi PIC trabaja a 4v).
la primera cosa que se me ocurrio fue usar un diodo tambien en el rail Vdd (a ver si puedo adjuntar esta vez la imagen correctamente.... )
el problema, como sabeis, es que el diodo, incluso los schottky, te meten una caida de potencial minimo de 0,5volts, y usualmente de 0,8 e incluso de 1 voltio para I(f)>=100ma .... el pic ya trabaja bajito , a 4 volts, y no me puedo permitir una caida de Vdd a 3 volts ( ni siquiera a 3,5) , asi que tuve que descartar el tema del diodo.
Lo unico que se me ocurre, y que no se siquiera si podria funcionar, es lo que voy a intentar adjuntar en la segunda imagen: controlar el corte del rail Vdd comun con un transistor, de forma que si Vdd_ICSP esta activa, el PNP corta y el PIC se alimenta de Vdd_ICSP. Si Vdd_ICSP esta flotante, tenemos el pull-down ( Rpd = 10Mohm ) que pone a tierra la base del PNP, con lo cual conduce, con lo cual el pic se alimenta del rail de Vdd comun.
Por supuesto, todo esto me lo acabo de inventar, y considerando que no tengo ni pajorela idea, desde luego no aspiro a que funcione de la manera en que yo lo he dicho :? pero si algo asi se pudiera hacer, y pudierais corregir mi idea (o incluso darme otra para arreglar mi problema), desde luego os estaria profundamente agradecido.
gracias y saludos!
-
hola que tal, porque no usas dipswitch, o jumper como los que usan los discos duros, donde para un estado funcione como maestro y entro como esclavo cuando quiera regrabar tu pic.
es mi opinion personal pero para que gastar en algo que se va a utilizar ocacionalmente? bueno alli se los dejos
saludos
-
Bueno amigo que tal?? yo en un principio tuve el mismo problema que tu con el ICSP y lo solucione de la siguiente manera. Ahi te muestro un dibujito para que realices tus pruebas. Te aseguro que esta probado 100%. De las resistencias de 1K van al resto del circuito para que este no se ponga en conficto cuando programes con el ICSP.
-
Como lo muestra samshield, no es necesario el VCC para la programacion ISP, ya el PIC puede tomar los 5V del circuito en el que esta trabajando.
-
Que tal pollastre:
Efectivamente como te lo mencionan samshield_pic y nocturno, esa es la solucion a tu problema, es decir no necesitas enviar el VDD del programador ICSP el VDD lo puedes tomar de tu circuito, asi solo necesitaras las lineas de RB6, RB7 (o pines de dato o de clock segun corresponda), VPP y GND. Yo lo he usado de esta manera para programar los pics 18F6720, que tienen un encapsulado superficial y usando el picstart plus.
Saludos y suerte
Elreypic.
-
Por compatibilidad con harwares anteriores he diseñado mis plaquitas RRBOARD2 (http://www.todopic.com.ar/foros/index.php?topic=2300.0) o KBDEMUL (http://www.todopic.com.ar/foros/index.php?topic=11910.0) con un conector ICSP de solo 4 señales : Vpp, PGC, PGD y GND. Y la alimentación del PIC (Vcc y GND) tengo que ponerla aparte. Programa perfectamente pero ...
Si empezase de nuevo incluiría el Vcc desde el programador para poder programar una placa con solo poner un conector (de 5 señales) y no dos, el ICSP (de 4 señales) y la alimentación externa (2 señales)
(http://picmania.garcia-cuervo.net/images/Reset_And_ICSP.gif)
-
Hola,
gracias por vuestra ayuda... entiendo la solución que proponéis, pero ésta asume - claro - que el cacharro está alimentado y funcionando *en el momento* de la reprogramación... despues, en un momento dado, el ICSP mete Vpp en MCLR y en ese momento el pic resetea y pasa a modo programar/verificar.... la secuencia es así, supongo ?
si esto funciona de la manera que digo, lo que no me queda claro es, cómo (o cuando ), una vez terminada la programación, vuelve el pic a resetear de nuevo para reanudar su funcionamiento normal... quizás cuando el ICSP deja de inyectar Vpp en MCLR?
gracias !
-
samshiel,
ya por curiosidad, te comento... precisamente en rb6 y rb7 yo tengo los data_in y data_out de una eeprom serie, asi que (por si las moscas) en vez de las resistencias de 1k yo le metí 2 diodos con el cátodo contra el pic para que no me dejase fluir nada de intensidad en direccion a la eeprom... no creo que le hubiera pasado nada sin los diodos, la verdad, pero uno nunca sabe con estas cosas!
saludos,
-
Aparte de no necesitar que el ICSP aliemte al PIC es bastante peligroso juntar los +5 voltios del ICSP y los +5 voltios del circuito, lo mas probable es que el fuerte le gane al debil, osea que la fuente del circuito queme la de tu programador.
Lo que en alguna oportunida hice fue un ICSP con Vcc incluido, pero que podia desconectarlo en cualquier momento. A parte en el circuito puse un conector que cuando lo quitaba aislaba al PIC de la fuente del circuito, con esto podia usar la fuente (Vcc) del ICSP.
Actualmente no lo uso pues termine aburriendome de tanto conectar y desconectar. Al pic no le importa de donde obtenga los +5 voltios, siempre que los tenga.
Saludos.
-
Estamos suponiendo en todo momento que el PIC no requiere control de Vdd por parte del programador.
Digo esto porque hay algunos PIC que necesitan que la alimentación les llegue justo en un determinado momento para iniciar el proceso de programación, con Vdd fijas suelen dar problemas y requieren muchos intentos de programación hasta que se consigue.
En estos casos, lo mejor es que la Vdd la proporcione el programador. Para evitar lo que dice Veguepic, supongo que se podrá poner un diodo que evite que pase corriente al programador.
-
Nocturno,
yo pienso como tú (me quedo más tranquilo si la Vdd la controla el programador). El inconveniente es que, como tú bien dices, hay que usar un diodo para que Vdd del programador no se propague por el raíl Vdd del circuito. Ese diodo te va a meter 0,8-1volt de caida de potencial en Vdd del pic cuando conduzca normalmente, y si, como es mi caso, el pic ya está recibiendo una alimentación "justita" (4 volts), hacerle caer 1 voltio hasta 3 volts es un riesgo alto (piensa que en los pines de salida, por ejemplo, VOHmin = 0,7*Vdd , es decir, una salida en alta podría valer tan poco como 2,1volts, y otros ICs podrían no reconocer ese valor como "1" lógico).
Además, hay un motivo mucho más poderoso para no pensar siquiera en el diodo: de acuerdo a los gráficos de microchip, para Fosc = 16mhz, una Vdd de 4 volts ya cae justita, justita (incluso yo diría que ligeramente por debajo del mínimo, pues ellos recomiendan un mínimo de 4,2-4,3volts para 16Mhz según la gráfica). Por lo tanto, si le quito aunque solo sea 0,5 volts a Vdd, podría inmediatamente dejar de funcionar el pic.
Supongo que alguno dirá "pues bájalo de frecuencia!".... el tema es que antes el pic lo tenía a 4Mhz, pero para hacer una comunicación a 115200bauds, un reloj de 4Mhz me sacaba un error muy grande en el generador de baudios de la EUSART... por eso lo debo tener a 16Mhz, porque con ese valor me sale una tasa de error en SPBRG muy baja, y la comunicación se hace sin problemas (oh, y sí, estoy obligado a comunicarme a 115k2... no puedo decirle al otro IC que "hable" más lento :mrgreen: )
Como veis tengo una situación curiosa... a parte de bastante problemática... a mí me gustaría que a estos cacharros se les pudiera actualizar el firmware simplemente con que el tecnico fuera con una PDA, el ICSP conectado por USB a la pda, y un pequeño conector de 5 pines desde el icsp hacia el aparato. A ver cómo consigo que la programación pueda hacerse de manera limpia....
saludos,
-
Hola gente !
........Ese diodo te va a meter 0,8-1volt de caida de potencial en Vdd del pic cuando conduzca normalmente.....
Un diodo nunca provoca tanta caída de tensión y menos en ese lugar, a ese régimen de trabajo.
Me arriesgaría a decirte, que no llegaría a restarte más de 0,3 / 0,4V un diodo ahí.
Y si querés asegurarte más metéle uno de Germanio, que tiene menos barrera de potencial que el silicio, pero te repito, con un 1N4148, ó un 1N4004 como te puso Diego, vá a funcionar perfecto y no vas a tener significativos cambios de tensión.
Compruébalo tú mismo. Es sólo una pista, una conexión, no te será gran trabajo hacer la prueba. No es peligrosa, es un diodo común en serie al MCLR, tampoco es tanto trabajo, es más fácil que escribir tantas líneas. :)
Ahora una pregunta:
...... y si, como es mi caso, el pic ya está recibiendo una alimentación "justita" (4 volts) .....
Porqué debes alimentar con 4V el PIC ? Por curiosidad te pregunto esto.
Espero puedas solucionar tu problema.
Saludos.
Mario
-
Lo del pic alimentado a 4 voltios, es porque tengo otros ICs en la PCB, y uno de ellos tiene su Vdd_max en 4,2 volts (la verdad, no entiendo el por qué de este valor máximo tan bajo, pero bueno, sus motivos tendrán los que lo hicieron...). Como fuente tengo 12volts, así que uso un mic29803 para regularla a 4 voltios. Una vez ahí, ya he aprovechado esa tensión para alimentar todos los ICs y crear un raíl común de Vdd. Por eso tengo 4 voltios en Vdd del pic....porque ya me viene así desde el 29803.
La verdad, y si te soy sincero, todavía no he hecho la prueba más sencilla, que es la que tú dices: plantarle el diodo al pic en la entrada de Vdd y sentarme simplemente a ver si funciona :P
es sólo que como ví en la gráfica de Fosc que para 16Mhz la alimentación iba "raspando" en los 4 volts, no me fiaba de bajarle ni un pelo a Vdd, no fuera a ser que tuviera problemas de fiabilidad el pic por ir "justito" de voltage a 16mhz.
Intentaré conseguir un diodo de germanio esta tarde, y lo pruebo.... ya te cuento.
gracias!
-
Hola Pollastre !
Naturalmente que todos hacemos nuestras cosas, como mejor nos conviene y parece, pero por un sólo integrado, sacrificar la fiabilidad del funcionamiento del resto del proyecto, no me parece conveniente.
Te repito; tus motivos habrás tenido para hacerlo así; pero yo hubiera alimentado todo el circuito a 5V y hubiera hecho para ese solo IC una combinación resistencia - zener para darle alimentación.
Pero es como te digo, tus motivos habrás tenido para hacerlo de esa forma.
Y respecto al diodo de germanio, estos tienen una tensión de juntura de unos 0,2V y el más popular es el 1N60.
Yo cuando necesito ese tipo de diodo, compro de a 20 ó 30 (valen centavos) y mido a ver cuál me dá menos resistencia de conducción en polarización directa, midiéndolos con un tester a aguja.
El que menos mida, será el que tenga menos caída de barrera de potencial.
Éxitos ! :)
Saludos
Mario
-
Hola otro diodo que podrias usar y es el BAT85 (http://www.datasheetarchive.com/datasheet.php?article=900325) , tiene una tensión de juntura chica, ahora no me acuerdo, en su momento lo medí y era bastante menor a 0.2
Saludos
-
El BAT85 ya lo conocía, pero si te fijas en el datasheet, para I(f) >=100mA, la caída V(f) sube a 1 voltio.... 100mA puede llevarselos un PIC fácilmente, y eso nos pondría de nuevo en la situación de perder casi 1 volt en Vdd del pic.
Claro que V(f) = 1volt viene indicado como valor *maximo*, quizas luego en la vida real pierda menos que eso...
Respecto al tema del raíl común de Vdd, pues decir tambien que yo pienso igual que MarioGuillote.... si por mí fuera, yo hubiera puesto todo el circuito a 5v y despues un zener para ese integrado en concreto a 4volt. El problema es que estamos hablando de un integrado bastante complejo, un módulo GSM/GPRS con unos requerimientos altos de alimentación, vamos, que para calcular la resistencia de carga del zener el margen de variacion de la intensidad a soportar sería muy grande... en concreto, en algunos momentos - como en transmisión GPRS - el modulito dichoso puede meter "peaks" de hasta 3A, mientras que en modo standby se queda en 300mA ... no sé vuestra opinión, pero yo lo veo un poco arriesgado de alimentar con un esquema zéner. De hecho, el propio fabricante del módulo recomienda usar un 29803 para sacar la alimentación... no digo que no se pueda hacer funcionar con un zener, pero lo veo un poco "en el aire".
Quizás lo que sí pueda hacer es lo contrario: alimentar el PIC con un zener, convirtiendo los 12volt de entrada en 5. Luego ya le puedo meter el diodo, pues por mucho que caiga, aunque caiga un voltio entero, seguirá en >=4 volts. Quizás esta sea la solución a mi problema.
saludos,
-
Si entiendo lo que decis, pero no es 1V para 100mA, son 0.8V, se que no es mucho pero bue, solo te digo, que ese diodo es para el reset, el pin del reset dudo que consuma 100mA, por el pin de reset no se alimenta al pic.
Saludos
-
bue, ahí es donde está la confusión :) yo no estoy hablando del pin MCLR (que, si mal no entiendo, al ser un pin de entrada está en alta impedancia, y por lo tanto no "consume" nada) , sino del propio pin Vdd del pic... de la alimentación, vamos... ahí es donde está el problema.
El pin de MCLR simplemente lo aislé con un diodo normal... y con eso soluciono el problema de conectarle Vpp sin que "salte" al resto del circuito... pero mi duda es que, cuando el programador proporciona Vdd al PIC, no quiero que esa Vdd_icsp "salte" al raíl de Vdd normal y corriente... dado que a menos uno de los integrados, como hablamos antes, no soporta tensiones mayores de 4 volts... no quiero que el programador le meta 5 volts al raíl Vdd... por eso quiero aislar el pin Vdd del PIC con un diodo.
saludos,
-
Otro de los diodos que podés usar, es el que traen las fuentes de alimentación de los Playstation o de los DVD, en el secundario del chopper.
Tienen bajísima caída de tensión por juntura. No recuerdo ninguna característica en este momento, pero podría buscar alguna si te parece bien.
Se usan con corrientes de hasta más de 1 Amper.
Si te sirve, ampliamos. :)
Saludos
Mario
-
quizás sea un schottky ese diodo que comentas? si es comercial y se puede conseguir, te agradeceré mucho que me des su partNo o especificaciones... de momento la última opción que comenté es la que me ronda por la cabeza: voy a alimentar el Vdd_pic con un zener 5v1 preparado para un máximo de 300mA (según microchip, 250 es el máximo que un 16f648A puede "comer", y 50mA más de margen por si acaso), entonces, con Vdd_pic = 5volts mas o menos, ya puedo meterle el famoso diodo, con lo que espero se me quedará Vdd_pic = 4,0 - 4,2 volts... a ver si me funciona!
gracias,
-
Ahora pollastre, perdona estaba confundido, pense que era para el reset, Te cuento que en mi placas para Programar los pin por ICSP no conecto la Vdd, solo conecto Vpp, (ahí si o si va el diodo sino se van los 13V a Vcc del circuito), Data, Clock y obviamente GND. El Vdd necesario para la programación proviene del mismo circuito, lo que se hace es dejar prendido todo el tiempo la placa donde esta el pic incluso yo dejo conectado el grabador siempre, y a la hora de programarlo simplemente le doy programar y listo, luego de eso lo reseteas al pic y ya arranca.
Lo que debería probar en tu caso, si con una Vdd de 4V es suficiente para programar, pero para mi, si corre con 4V, ya que esta dentro de los valores permitidos, no debería tener problemas para grabarlo. Eso es simple mente una opinion, tambein hay que tener en cuenta que ahora el 1 logico proveniente del grabador en las señales de clock va a ser de 5V mientras que para el pic son de 4V, ahí no se como lo tomaría el pic, yo probaría jejeej
Otra cosa que puedes hacer es poner un simple jumper que conmute la alimentación del pic entre Vdd del circuito y la del ICSP, oso creo que es la mejor opción y lo e visto varias veces. no es tan como pero bue
Saludos