logo elektroda
logo elektroda
X
logo elektroda

Programmieren von AT89S5x-Schaltungen mit USBasp

Mlody_Zdolny  Cool? (+16)
📢 Anhören (AI):

In älteren elektronischen Geräten, die aus dem Gebrauch gezogen wurden, findet man interessante Bauteile, darunter verschiedene Arten von Mikrocontrollern.
Obwohl heutzutage 32-Bit-Mikrocontroller mit hoher Rechenleistung und Netzwerkschnittstellen für kleines Geld leicht erhältlich sind, reicht manchmal ein älterer 8-Bit-Chip, beispielsweise aus einem zur Entsorgung vorgesehenen Gerät, aus, um das Projekt umzusetzen.
Besonders interessant sind die 89S5x-Chips von Atmel. Dies sind Schaltungen der 8051-Familie, ausgestattet mit einer ISP-Schnittstelle (der Buchstabe S in der Bezeichnung), was heute nichts Ungewöhnliches und sogar eine Norm ist, wobei jedoch zu bedenken ist, dass andere Schaltungen dieser Familie nur parallel einprogrammiert werden konnten (z. B. AT89C51, ganz zu schweigen von Versionen ohne Flash-Speicher).

Ich fing an, eine DCF77-Uhr mit programmierbarer Steuerungsfunktion zu entwerfen, und suchte nach einem geeigneten Prozessor.
Da ich mehrere 89S52-Schaltungen aus der Demontage in meiner Sammlung habe, habe ich mich entschieden, diese für diesen Zweck zu verwenden. Damit der Entwicklungsprozess nach aktuellen Standards abläuft, wollte ich natürlich ISP für die Programmierung nutzen. Es stellte sich jedoch heraus, dass alle AVR-Programmierer, die ich habe, nicht in der Lage sind, seriell mit dem 89S52 zu kommunizieren.



Eine kurze Websuche führte mich zum USBasp-Projekt: https://www.fischl.de/usbasp. Innerhalb weniger Stunden entstand ein Prototyp mit ATmega8, montiert auf einer universellen Platine. Der Start verlief problemlos, das Programm avrdude erkannte den Programmierer.
Leider bekam ich beim Versuch, den Inhalt von 89S52 abzulesen, folgende Meldung:

Code: Bash
Melde dich an, um den Code zu sehen

Irgendetwas stimmte nicht mit der Kommunikation auf der Leitung USBasp - AT89S52.
Debugging mit einem Oszilloskop und Suchen im Internet brachten die Antwort. Das Problem war, dass USBasp eine fest codierte Prozedur zum Setzen des RESET-Pins auf der ISP-Schnittstelle hatte. Die AVR-Chips haben einen negierten RESET-Eingang, während die 89S5x-Chips einen nicht negierten Eingang haben. Mit anderen Worten, der RESET-Aktivzustand für AVR ist niedrig, für 89S5x ist er hoch.

Der Autor von USBasp hat auf seiner Website Quellen hinterlegt, wo man den Grund für diesen Sachverhalt finden kann:
Code: C / C++
Melde dich an, um den Code zu sehen

In der obigen Funktion, sowie an einigen anderen Stellen ist es klar, dass der aktive Zustand der RESET-Leitung low ist, was dem AVR-Standard entspricht.
In dieser Situation hat der Programmierer keine Möglichkeit, den aktiven Zustand auf low zu ändern, selbst wenn die USB-Steuerbefehle Informationen darüber enthalten würden, welchen Standard der USBasp bei der Kommunikation mit dem programmierten Chip verwenden sollte.

Also habe ich beschlossen, einen Hardware-"Griff" in Form eines Goldpins und eines Jumpers hinzuzufügen, mit dem ich bestimmen kann, welchen aktiven Zustand der Programmierer während der Programmierung verwenden soll.
Ich habe den Jumper an Pin 26 angeschlossen, den das Programmiergerät während der Programmierung ausliest. Unten sieht man einen schaltplan aus dem Internet mit meinem Jumper hinzugefügt.



Im Programm habe ich alle Stellen, die den RESET-Pin setzen, durch Aufrufe der setReset(uchar)-Funktion ersetzt, die die RESET-Leitung an der ISP-Schnittstelle je nach Position des Griffes entsprechend setzt.

Code: C / C++
Melde dich an, um den Code zu sehen

Nach dieser Änderung kann der Programmierer sowohl den AVR als auch den AT89S52 programmieren.

Code: Bash
Melde dich an, um den Code zu sehen



Diejenigen, die die vollständigen Quellen mit der Änderung sehen möchten, füge ich im Archiv, das ist die FW-Version von usbasp von 2011.

Über den Autor
Mlody_Zdolny
Mlody_Zdolny hat 1438 Beiträge geschrieben mit der Bewertung 636 , und dabei 108 Mal geholfen. Er ist seit 2022 bei uns.

Kommentare

Zubiik 15 Apr 2023 21:16

Dank dir kann ich endlich meine Prozessoren wiederbeleben, danke! [Mehr erfahren]

pawlik118 15 Apr 2023 22:33

Hallo, kann der 89LP2052 auch mit diesem modifizierten USBasp programmiert werden? Gibt es irgendwo eine Liste mit kompatiblen Chips? [Mehr erfahren]

Mlody_Zdolny 15 Apr 2023 23:26

Hallo Ich verwende avrdude Version 6.3-20171130, um den Programmierer zu betreiben. Leider enthält die Liste der unterstützten Mikrocontroller nicht den, nach dem du fragst. Generell sieht der Fall... [Mehr erfahren]

gulson 15 Apr 2023 23:53

Großartig, schreiben Sie mir für ein kleines Geschenk. [Mehr erfahren]

ArturAVS 16 Apr 2023 07:15

Vor ein paar Jahren habe ich es einfacher gemacht (was mich betrifft), ich habe ein einzelnes 74HC1G14-Gate und einen Jumper hinzugefügt, der das RESET-Signal schaltet (typisch oder negiert, abhängig vom... [Mehr erfahren]

Mamut 16 Apr 2023 11:03

ähm... Vor einiger Zeit habe ich diese Firmware gemacht: https://github.com/mamut-tme/UsbAsp-flash_89S52 Die Unterstützung für s51 und s52 funktioniert darin problemlos. Patch zur Beschleunigung... [Mehr erfahren]

Wirnick 19 Apr 2023 07:40

@mlodyzdolny Ich habe deine Quellen heruntergeladen und das Projekt mit den Originaldateien zusammengestellt, aber es lässt sich nicht in Eclipse kompilieren. Sogar die ursprünglichen Projekte lassen... [Mehr erfahren]

Mlody_Zdolny 19 Apr 2023 09:33

@wirnick Ich kompiliere in einer Linux-Umgebung (Mint Vera 21.1) mit den neuesten Versionen der Tools rund um gcc und avr. Ich verwende Makefile zum Kompilieren, indem ich den folgenden Befehl im Firmware-Ordner... [Mehr erfahren]

Wirnick 19 Apr 2023 10:24

@mlodyzdolny vielen Dank für deine Antwort, aber die .hex-Datei ist unabhängig von der Entwicklungsumgebung. Ich programmiere derzeit in MPLAB (nach der Übernahme von Atmel durch Microchip). Ich gehe auf... [Mehr erfahren]

Mlody_Zdolny 19 Apr 2023 10:49

Ja, aber die Werkzeuge, mit denen Hex erstellt wird, hängen von der Umgebung ab. Es gibt Versionen für Linux und Windows, daher habe ich meine Konfiguration kurz beschrieben. MplabX kann xc8 verwenden,... [Mehr erfahren]

Wirnick 19 Apr 2023 11:51

Wie üblich habe ich mich verirrt. Ich dachte an AVR Toolchain und schrieb avrdude. Soll ich verstehen, dass du die Früchte deiner Arbeit nicht länger teilen wirst? [Mehr erfahren]

Mlody_Zdolny 19 Apr 2023 12:24

Ich kann das Hex teilen, aber im Allgemeinen denke ich, dass die Quellen mehr Wert haben, weil jeder etwas nach seinen Bedürfnissen ändern kann. Ich schicke heute Abend etwas. Vielleicht liegt das... [Mehr erfahren]

Mamut 19 Apr 2023 22:10

hex zu meiner Firmware-Variante (Link oben). Es erfordert keine Änderung des ursprünglichen Schaltplans von USBasp. Die Erkennung, ob es sich um s5x oder avr handelt, erfolgt automatisch. Die Target-Initialisierung... [Mehr erfahren]

Wirnick 20 Apr 2023 08:18

@mlodyzdolny vielen Dank und du bist mein Freund! Ich habe Erfolg erzielt, wie im beigefügten Bild gezeigt. In der Datei main.ci und usbdrv.h habe ich eine Korrektur in den #include-Pfade vorgenommen... [Mehr erfahren]

Mamut 20 Apr 2023 19:13

Da kann ich leider nicht viel helfen. Wie es in der Github-Repo-Beschreibung heißt, ist mein Code eine Kombination aus einer Lösung von nofeletru (aus Moskau) und Miles McCoo (von einer nicht mehr existierenden... [Mehr erfahren]

%}