¿Por qué VPP no es de 12 V con una resistencia segura cuando se inserta un microcontrolador en funcionamiento en este circuito?

Probé toda la funcionalidad de mi circuito programador y muchas cosas funcionan, pero algunas no.

Parece borrar todo el contenido de un AT89C4051, pero no programa correctamente el chip. De hecho, parece que nada está programado en absoluto.

Este es el pseudocódigo que uso para el programador:

Clear data (Set address 378h to 0)
Reset counter and enable program mode and wait 100us (Set Control 37Ah to 6)
** At this point, Pin 1=0V which is expected
Raise VPP (Set Control 37Ah to 2)    
** Expected 12V at pin 1 but only got 6.8V. Why? I don't know
Raise Step Reset (Set Control 37Ah to 3)    
Wait until system ready
Add 10mS delay
Lower Step Reset (Set Control 37Ah to 2)    
Wait until system ready
Reset count / lower VPP (Set Control 37Ah to 6)    

Y para cada byte:

Set data (Set Control 378h to data)    
Wait 100uS
Raise Step Reset (Set Control 37Ah to 1)    
Wait until system ready
Wait 2mS    
lower Step Reset (Set Control 37Ah to 0)    
Wait until system ready
Repeat for remaining bytes

Como referencia, "reinicio de paso elevado" significa que el pin 4017 IC está configurado en alto y "reinicio de paso inferior" significa que el pin de reinicio está bajo. Una vez que cae, la habilitación de programación permanecerá baja durante al menos la mitad del tiempo definido por el circuito del temporizador 555, luego se elevará y luego de que se pulse el reloj, el sistema estará listo.

Casi todo funciona, pero hay

UN PROBLEMA PRINCIPAL

Cuando instruí al sistema para aumentar el voltaje VPP, lo hizo, pero de una manera extraña.

La resistencia que uso entre 12VDC y RST del micro es de 100K solo porque la hoja de datos de Atmel establece que la corriente de programación máxima es de 250uA . Entonces, al usar 100K, estoy usando 12VDC/100K=120uA.

Entonces, sin un microcontrolador conectado, la operación es precisa. El medidor muestra muy cerca de 12V. Sin embargo, cuando saqué un microcontrolador en funcionamiento de un sistema en funcionamiento y lo inserté en este circuito y medí el voltaje después de realizar exactamente las mismas operaciones, solo obtengo entre 6 y 7V.

Miré otros circuitos y no he visto que otros usen resistencias de 100K como pull-ups. De hecho, encontré que la resistencia pull-up es de solo 2.7K en el siguiente circuito en: http://www.oocities.org/dinceraydin/8051/index.html

programador blowit

Mi pregunta es ¿por qué se usaría una resistencia tan pequeña para la programación cuando el manual establece claramente que hay un límite superior para la corriente que se puede proporcionar para VPP?

¿Se supone que debo violar esa especificación para que el programador funcione?

Y como referencia, este es mi circuito: y la línea diagonal en el medio es parte de una flecha, no de un cable.circuito

ACTUALIZAR

Busqué en Internet y encontré OTRO circuito programador que usa una resistencia VPP BAJA (1K).

La URL está aquí: http://students.uta.edu/rx/rxr5243/projects/prog/

La imagen está aquí: http://students.uta.edu/rx/rxr5243/projects/prog/schematic.gif

Respuestas (1)

Si la corriente a través de la resistencia es de 120 uA, el voltaje será de 12 V, lo que significa que en realidad obtendrá 12 V-12 V = 0 V en el pin. Ese límite superior es un límite de lo que dibujará el microcontrolador, no un límite de lo que se debe suministrar.

Lo que sucede es que el microcontrolador solo consume aproximadamente 60 uA, pero la resistencia cae 60 uA * 100 K = 6 V, por lo que el voltaje de salida es 12 V-6 V = 6 V. Necesita una resistencia pull-up mucho más pequeña, de modo que la corriente de programación máxima no afecte mucho el voltaje de salida.

Si usa una resistencia de 2.7K, por ejemplo, a 250uA, el voltaje en el pin será 12-(250uA*2.7k)=11.325V, lo cual es aceptable.

editar: en realidad, según la hoja de datos, debe tener al menos 11.5V. Una resistencia de 2.7K funcionará (casi con seguridad), pero técnicamente debería ser (12-11.5)/250uA=2Kohm como máximo.

Ok, entonces quien haya escrito la hoja de datos necesita ayuda porque debería haber puesto esos 250uA en la columna MIN, no en la columna MAX. Ok, probaré una resistencia de 2.2K en su lugar, ya que tengo una gran cantidad de ellos por ahí.
No, la hoja de datos es correcta. 250uA es la corriente máxima que consumirá el microcontrolador.
Es engañoso para mí porque lo titularon "corriente de habilitación máxima". Deberían haberlo titulado "corriente máxima consumida por IC"
Las hojas de datos generalmente asumen un nivel mínimo de conocimiento de electrónica. Si tuvieran que incluir todo el contexto, cada hoja de datos tendría cientos o miles de páginas. El conocimiento en este caso es que no puede forzar una entrada para que absorba más corriente de la que "quiere", por lo que cualquier límite actual es claramente un límite en lo que atrae (es un poco más complicado que eso, pero que más o menos lo resume). Es una razón similar a por qué las fuentes de alimentación están etiquetadas como 1A. No significa que expulsen 1A todo el tiempo, eso es solo un límite en lo que pueden producir.
Además, si quisiera limitar la corriente mientras proporciona un voltaje estable, no es así como lo haría. Si implementó un sistema de limitación de corriente de voltaje constante adecuado, todo seguiría funcionando (aunque eso sería innecesario)