Ich habe die gesamte Funktionalität meiner Programmierschaltung getestet, und viele Dinge funktionieren, aber einige Dinge nicht.
Es scheint den gesamten Inhalt eines AT89C4051 zu löschen, aber es programmiert den Chip nicht erfolgreich. Tatsächlich scheint überhaupt nichts programmiert zu sein.
Dies ist der Pseudocode, den ich für den Programmierer verwende:
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)
Und für jedes 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
Als Referenz bedeutet "Schritt zurücksetzen anheben", dass der IC-Pin 4017 auf High gesetzt ist, und "Schritt zurücksetzen niedriger" bedeutet, dass der Reset-Pin auf Low gesetzt ist. Sobald es niedrig ist, bleibt die Programmierfreigabe für mindestens die Hälfte der durch die 555-Zeitgeberschaltung definierten Zeit niedrig, dann wird sie angehoben, und nachdem die Uhr gepulst ist, ist das System bereit.
Fast alles funktioniert, aber es gibt
EIN WICHTIGES PROBLEM
Als ich das System anwies, die VPP-Spannung zu erhöhen, tat es dies, aber auf seltsame Weise.
Der Widerstand, den ich zwischen 12 VDC und RST des Mikros verwende, beträgt 100 K, nur weil Atmels Datenblatt angibt, dass der maximale Programmierstrom 250 uA beträgt . Wenn ich also 100 K verwende, verwende ich 12 VDC / 100 K = 120 uA.
Ohne angeschlossenen Mikrocontroller ist der Betrieb also genau. Das Messgerät zeigt sehr nahe an 12 V an. Als ich jedoch einen funktionierenden Mikrocontroller aus einem funktionierenden System nahm und ihn in diesen Schaltkreis einfügte und die Spannung maß, nachdem ich genau die gleichen Operationen durchgeführt hatte, bekam ich nur zwischen 6 und 7 V.
Ich habe mir andere Schaltungen angesehen und habe nicht gesehen, dass andere 100K-Widerstände als Pull-ups verwenden. Tatsächlich habe ich festgestellt, dass der Pull-up-Widerstand in der folgenden Schaltung unter http://www.oocities.org/dinceraydin/8051/index.html nur 2,7 K beträgt
Meine Frage ist, warum sollte ein so kleiner Widerstand zum Programmieren verwendet werden, wenn im Handbuch eindeutig angegeben ist, dass es eine Obergrenze für den Strom gibt, der für VPP bereitgestellt werden kann?
Soll ich gegen diese Spezifikation verstoßen, damit der Programmierer funktioniert?
Und als Referenz ist dies meine Schaltung: und die diagonale Linie in der Mitte ist Teil eines Pfeils, kein Draht.
AKTUALISIEREN
Ich habe im Internet gesucht und eine ANDERE Programmierschaltung gefunden, die einen NIEDRIGEN VPP-Widerstand (1K) verwendet.
URL ist hier: http://students.uta.edu/rx/rxr5243/projects/prog/
Bild ist hier: http://students.uta.edu/rx/rxr5243/projects/prog/schematic.gif
Wenn der Strom durch den Widerstand 120 uA beträgt, beträgt die Spannung darüber 12 V, was bedeutet, dass Sie tatsächlich 12 V-12 V = 0 V am Pin erhalten. Diese Obergrenze ist eine Grenze dafür, was der Mikrocontroller ziehen wird, keine Grenze dafür, was geliefert werden sollte.
Was passiert ist, dass der Mikrocontroller nur etwa 60 uA zieht, aber der Widerstand um 60 uA * 100 K = 6 V abfällt, sodass die Ausgangsspannung 12 V - 6 V = 6 V beträgt. Sie benötigen einen viel kleineren Pull-up-Widerstand, damit der maximale Programmierstrom die Ausgangsspannung nicht stark beeinflusst.
Wenn Sie beispielsweise einen 2,7-K-Widerstand bei 250 uA verwenden, beträgt die Spannung am Pin 12 (250 uA * 2,7 k) = 11,325 V, was akzeptabel ist.
Bearbeiten: Laut Datenblatt müssen es mindestens 11,5 V sein. Ein 2,7-kΩ-Widerstand wird (mit ziemlicher Sicherheit) funktionieren, aber technisch gesehen sollte er maximal (12-11,5) / 250 uA = 2 kOhm betragen.
Benutzer152879
BeB00
Benutzer152879
BeB00
BeB00