Warum ist VPP nicht 12 V mit sicherem Widerstand, wenn ein funktionierender Mikrocontroller in diesen Stromkreis eingefügt wird?

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

blowit-Programmierer

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.Schaltkreis

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

Antworten (1)

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.

Ok, wer auch immer das Datenblatt geschrieben hat, braucht Hilfe, weil er diese 250 uA in die MIN-Spalte und nicht in die MAX-Spalte hätte einfügen sollen. Ok, ich werde es stattdessen mit einem 2,2-kΩ-Widerstand versuchen, da ich eine große Anzahl davon herumliegen habe.
Nein, das Datenblatt stimmt. 250 uA ist der maximale Strom, den der Mikrocontroller ziehen wird.
Es ist für mich irreführend, weil sie es als "maximalen Aktivierungsstrom" bezeichnet haben. Sie hätten es "maximale Stromaufnahme durch IC" nennen sollen.
Datenblätter setzen in der Regel ein Mindestmaß an Elektronikkenntnissen voraus. Wenn sie den gesamten Kontext einbeziehen müssten, wäre jedes Datenblatt Hunderte oder Tausende von Seiten lang. Das Wissen in diesem Fall ist, dass Sie einen Eingang nicht dazu zwingen können, mehr Strom zu versenken, als er "will", also ist jede Strombegrenzung eindeutig eine Begrenzung dessen, was er zieht (es ist ein bisschen komplizierter als das, aber das ziemlich viel fasst es zusammen). Es ist ein ähnlicher Grund, warum Netzteile mit 1A gekennzeichnet sind. Das bedeutet nicht, dass sie die ganze Zeit 1A ausgeben, das ist nur eine Grenze dessen, was sie ausgeben können.
Wenn Sie den Strom begrenzen und gleichzeitig eine stabile Spannung bereitstellen möchten, würden Sie dies nicht tun. Wenn Sie ein geeignetes Strombegrenzungssystem mit konstanter Spannung implementieren, würde tatsächlich alles noch funktionieren (obwohl dies unnötig wäre).