Probé toda la funcionalidad de mi circuito de programador, y muchas cosas funcionan, pero otras no.
Parece que borra todo el contenido de un AT89C4051, pero no programa correctamente el chip. De hecho, parece que no hay nada programado.
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
Para referencia, "elevar el reinicio del paso" significa que el pin del IC 4017 está configurado en alto y "reiniciar el escalón más bajo" significa que el pin del reinicio está bajo. Una vez que caiga, la habilitación de programación permanecerá baja durante al menos la mitad del tiempo definido por el circuito del temporizador 555, luego se activará, luego de que el reloj esté pulsado, el sistema estará listo.
Casi todo funciona, pero hay
UNA EDICIÓN PRINCIPAL
Cuando le ordené al sistema que aumentara el voltaje de VPP, lo hace, pero de una manera extraña.
El resistor que uso entre 12VDC y RST del micro es de 100K solo porque la hoja de datos de Atmel indica que la corriente máxima de programación es de 250uA . Entonces al usar 100K, estoy usando 12VDC / 100K = 120uA.
Entonces, sin un microcontrolador conectado, la operación es precisa. El contador muestra muy cerca de 12V. Sin embargo, cuando saqué un microcontrolador que funcionaba de un sistema que funcionaba y lo inserté en este circuito y medí el voltaje después de realizar exactamente las mismas operaciones, solo obtengo entre 6 y 7V.
Observé otros circuitos y no he visto a otros usar resistencias de 100 K como dominadas. De hecho, encontré que la resistencia de pull-up es solo 2.7K en el siguiente circuito en: enlace
Mipreguntaes¿porquéseusaríaunaresistenciatanpequeñaparalaprogramacióncuandoelmanualindicaclaramentequeexisteunlímitesuperioralacorrientequesepuedeproporcionarparaVPP?
¿Sesuponequedeboviolaresaespecificaciónparahacerqueelprogramadorfuncione?
Yparareferencia,esteesmicircuito:ylalíneadiagonalenelmedioespartedeunaflecha,nodealambre.
ACTUALIZAR
BusquéenInternetyencontréOTROcircuitoprogramadorqueusaunaresistenciaLOWVPP(1K).
LaURLestáaquí:
La imagen está aquí: enlace