Forum: Mikrocontroller und Digitale Elektronik Problem beim Programmieren des AT89S52 Mikrocontrollers


von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche schon seit langem den Mikrocontroller AT89S52 mit dem 
MiniPro Programmer modell: TL866CS zu programmieren aber es klappt immer 
noch nicht. Ich kann die Hex-Datei problemlos laden aber ich kriege 
immer diesen beigefügten Fehler, wenn ich mit der Programmierung 
anfange.

Hat jemand vielleicht eine Idee, woran das liegen kann?

Gruß

Yann

von Georg G. (df2au)


Lesenswert?

Nur eine Vermutung: Lass den Haken bei Lock-Bit beim Programmieren weg. 
Wenn du das Bit wirklich brauchst, setze es nach dem Programmieren.

von Yann B. (yann)


Lesenswert?

@Georg,

Dke für deine schnelle Antwort. Ich habe es schon versucht aber ich 
kriege immer den gleichen Fehler.

Gruß

: Bearbeitet durch User
von Achim S. (Gast)


Lesenswert?

klicke vielleicht mal "Check Device ID" an um zu prüfen, ob es wirklich 
genau der erwartete Controller ist und ob die Kommunikation mit ihm 
grundsätzlich funktioniert. (Die ChipID FF FF FF sieht nicht so passend 
aus).

von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

@Achim,

dke für deine schnelle Antwort. Wenn ich beim "Check device ID" klicke 
bekomme ich das hier. Laut dieses Fehlers, habe ich noch einmal geprüft, 
ob der Controller richtig eingesteckt ist. Könnte es vielleicht an dem 
PLCC-44 Adapter liegen?

Gruß

: Bearbeitet durch User
von Achim S. (Gast)


Lesenswert?

Yann Bauer schrieb:
> Könnte es vielleicht an dem
> PLCC-44 Adapter liegen?

Vielleicht.
Macht der denn (sinngemäß) eine 1 zu 1 Verdrahtung der 44PLCC-pins auf 
die 40 PDIP-pin?

Wenn du Messgeräte dazu hast: schau nach, ob beim Programmieren die 
richtigen Pins angesteuert werden.

von Yann B. (yann)


Lesenswert?

Gib's niemanden, der mir helfen kann?

von Matze (Gast)


Lesenswert?

Wird der USB Treiber richtig erkannt? Hast Du mal ein anderes bzw. 
kürzeres USB-Kabel verwendet? Du könntest mal messen, ob der PIN 33 "ALE 
/PROG" ein Rechteck Signal ausgibt. Dieses kannst Du mit dem Oszi 
messen. Falls dieses nicht anliegt, läuft der µC nicht.
Ich programmiere meinen AT89S52 immer mit dem Parallelport, funktioniert 
auch unter Windows 7 64-bit wunderbar.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Matze schrieb:
> Ich programmiere meinen AT89S52 immer mit dem Parallelport, funktioniert
> auch unter Windows 7 64-bit wunderbar.

Auch der AVRISP MkII kann die Dinger programmieren, aber es muss ein 
Quarz am MC sein, der interne Oszillator muss laufen. Stelle also 
sicher, das, wie oben beschrieben, ALE aktiv ist, bzw. der Oszillator 
läuft.

von Yann B. (yann)


Lesenswert?

Achim S. schrieb:
> Macht der denn (sinngemäß) eine 1 zu 1 Verdrahtung der 44PLCC-pins auf
> die 40 PDIP-pin?

Ich weiss es leider nicht, weil es in der Anleitung nicht steht. Aber 
ich denke schon. Da ich nur einen Multimeter habe, ist es mir schwer 
beim Programmieren zu wissen, ob alle die Pins angesteuert sind. Ich 
habe aber die Spannung bei VCC gemessen und das liegt bei etwa Null, 
wenn ich auf "Program" klicke. Ich bin auch die ganzen Pins des Adapters 
durchgelaufen und habe bei manchen 1,9V und bei den anderen 0V.

Gruß

Yann

von Yann B. (yann)


Lesenswert?

Matze schrieb:
> Wird der USB Treiber richtig erkannt? Hast Du mal ein anderes bzw.
> kürzeres USB-Kabel verwendet?

Ja, der USB Treiber wird richtig erkannt. Nein ich habe kein anderes 
kürzeres USB-Kabel verwendet. Da ich über keinen Oszi zu Hause verfüge, 
habe ich aber die Spg gemessen und das liegt bei 5V auf dem Pin 33 
"ALE/PROG". Verwendest du ein Programmiergerät, um deinen MC zu 
programmieren?
Mein MC ist mit dem Max232 verbunden und dieser hat 2 DB9 Stecker. 
Könnte ich einen davon nutzen um den MC durch den RS232 Kabel direkt am 
PC zu programmieren?

Gruß

Yann

von Achim S. (Gast)


Lesenswert?

Yann Bauer schrieb:
> Ich
> habe aber die Spannung bei VCC gemessen und das liegt bei etwa Null

?????
Wenn wirklich VCC bei Null liegt brauchst du wohl nach anderen 
Fehlerquellen nicht mehr zu suchen. Wie soll der µC ohne Versorgung 
irgendwas machen?

>> Macht der denn (sinngemäß) eine 1 zu 1 Verdrahtung der 44PLCC-pins auf
>> die 40 PDIP-pin?
>
> Ich weiss es leider nicht, weil es in der Anleitung nicht steht.

mit dem Multimeter die wichtigsten Leitungen durchklingeln (und als 
erstes VCC)

von Peter D. (peda)


Lesenswert?

Achim S. schrieb:
> Macht der denn (sinngemäß) eine 1 zu 1 Verdrahtung der 44PLCC-pins auf
> die 40 PDIP-pin?

Ein 1:1 Adapter geht definitiv nicht. Es müssen genau die richtigen 4 
Pins unbeschaltet sein.

von Georg G. (df2au)


Lesenswert?

Im Datenblatt sind beide Varianten beschrieben. Da sollte es doch 
möglich sein, 40 Pins durch zu klingeln.

von Achim S. (Gast)


Lesenswert?

Peter Dannegger schrieb:
>> Macht der denn (sinngemäß) eine 1 zu 1 Verdrahtung der 44PLCC-pins auf
>> die 40 PDIP-pin?
>
> Ein 1:1 Adapter geht definitiv nicht. Es müssen genau die richtigen 4
> Pins unbeschaltet sein.

deshalb der Hinweis "sinngemäß" in Klammern. Die 4 NC-pins des PLCC44 
sollten natürlich ausgenommen sein.

von Yann B. (yann)


Lesenswert?

Hallo,

ich habe mir heute einen anderen Mikrocontroller besorgt, weil ich 
dachte, dass der andere vielleicht kaputt war aber ich konnte den immer 
noch nicht programmieren. Also liegt es nicht am Mikrocontroller. An der 
Uni habe ich versucht, mit einem anderen Programmiergerät und zwar 
Batronix und dem gleichen PLCC44-DIP40 Adapter den neuen MC zu 
programmieren und das hat vollkommen funktioniert. Also vermute ich, 
dass es vielleicht am Programmiergerät liegt. Kann sein, dass er den 
Chip AT89S52 nicht erkennt oder an der Software nämlich MiniPro V6.0.

Sonst hat jemand vielleicht eine andere Vermutung?

Gruß

Yann

von TomA (Gast)


Lesenswert?

Hallo Yann,

ich habe einen eigenen ISP-Programmer gebaut und das Programm dafür 
geschrieben. Ursprünglich ist das Gerät für 89S8252 und 89S8253, damit 
funktioniert es seit Jahren tadellos. Nun versuche ich den 89S52 zu 
integrieren, aber der zickt gewaltig.

Bislang habe ich soviel darüber herausgefunden: Wenn der 89S52 in den 
Programmiermodus geschaltet werden soll, bestätigt er das, laut 
Datenblatt, mit 69h. Ich bekomme meist ein 49h zurück. Ob nun das 
Datenblatt falsch ist, oder mein Timing kann ich noch nicht sagen.

Dein Problem scheint ähnlich zu sein, trotz Paralellmode - der 89S52 
geht nicht in den Programmiermodus. Vielleicht kannst du in deiner 
Software die Kommunikationsbytes einstellen?

Gruß. Tom

von michael_ (Gast)


Lesenswert?

Yann Bauer schrieb:
> ich habe mir heute einen anderen Mikrocontroller besorgt, weil ich
> dachte, dass der andere vielleicht kaputt war aber ich konnte den immer
> noch nicht programmieren. Also liegt es nicht am Mikrocontroller.

Ich hätte mir erst mal einen mit DIP-40 besorgt oder auch nur geborgt.
Da kann man das Programmiergerät testen.

von TomA (Gast)


Lesenswert?

War wohl nix. Habe das Timing überarbeitet und jetzt antwortet der 89S52 
anständig mit 69h. Programmieren läßt er sich noch immer nicht, aber das 
ist eine andere Baustelle.
Übrigens, in ISP-Betriebsart kennt der Chip zwei verschiedene Modi, 
Byte- und Page-Modus. Vielleicht kennt er in der paralellen Betriebsart 
ähnliches und eine der Beiden funktioniert mit deinem Programmer?

Gruß. Tom

von Peter D. (peda)


Lesenswert?

Probier dochmal nen 8051 mit Bootloader, z.B. AT89C51RB2 (gibts bei 
CSD).
Den kannst Du ohne Programmiergerät in der Schaltung programmieren.
Es muß außer der Grundbeschaltung (Quarz, Reset) nur die UART über 
MAX202 an den PC angeschlossen werden.
Und ein Jumper PSEN nach GND, um in den Bootloader zu gelangen.
Hat der PC keine UART, geht auch jeder USB-RS232 Umsetzer.
Dann von Atmel das Flip laden und ausführen.

von TomA (Gast)


Lesenswert?

Hallo Yann,

jetzt läßt sich mein 89S52 programmieren, der Knackpunkt war das Timing. 
Für den 89S52 mußte ich das Timing, gegenüber 89S8252/53, stark 
verlangsamen. Vielleicht kann dein Programmer irgendwie verlangsamt 
werden?

Zur Kontrolle habe ich meine Chips in einem Paralell-Programmiergerät 
(GalepIII) überprüft, das hat den Chip sofort richtig bedient.

Ich weiß nicht wofür du den Chip brauchst (beruflich/privat), aber wenn 
es dir weiterhilft kann ich dir mein Programm und einen Plan für das 
Programmiergerät zukommen lassen. Das Programmiergerät wird an die 
Druckerschnittstelle (LPTx) angeschlossen, die muß natürlich vorhanden 
sein. Oder noch besser, besorge es dir gleich bei Atmel. Die haben alles 
schon fertig als ISP-Programmer zum downloaden.

Gruß Tom

von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

Hallo Tom,

vielen Dank aber ich habe den Chip auch mit GalepIII programmieren 
können. Also mit den Batronix und GalepIII Programmiergeräten wird mein 
Chip sofort erkannt. Ich habe auf dem Chip ein kleines Programm (siehe 
Anhang) für die Ansteuerung der auf meiner Platine liegenden vier grünen 
LEDs. Die Ports P0_0 bist P0_3 sind die Ports, an denen meine 4 LEDs 
angeschloßen sind. Anbei steht auch die Schaltung der LEDs. Leider tun 
die LEDs gar nichts, wenn ich den MC wieder auf der Platine reinstecke. 
Vielleicht könntest du mir sagen, ob das obere C Programm korrekt ist. 
Ansonsten würde ich jetzt mal prüfen, ob mein MC 5V beim Einschalten der 
Platine bekommt.

Gruß

Yann

: Bearbeitet durch User
von TomA (Gast)


Lesenswert?

Hallo Yann,

ich habe mir dein Programm kurz angesehen, es sollte funktionieren. Aber 
so schnell, daß du die einzelnen Zustände nicht erkennen kannst. Du 
brauchst eine Wartezeit, um die Vorgänge langsamer zu machen. Irgendeine 
Warteschleife für ca. 100ms - 1s. damit das blinken sichtbar wird.

Deine Befehle kannst du vereinfachen (sofern der Compiler mitspielt).

Z.B:   P0_0 = !P0_0 bewirkt das gleiche, den invertierten
                    Bitzustand wieder ausgeben (umschalten)

Den Mikrocontroller, zum programmieren, jedesmal aus der Schaltung 
nehmen ist recht umständlich. Dafür hat der Chip doch die 
ISP-Schnittstelle, damit kann man ihn in der Schaltung programmieren. 
Schau dir mal das ISP-Programmiergerät von Atmel an. Das ist einfach zum 
nachbauen und das Programm dazu kann fertig heruntergeladen werden.

Mein Programm ist leider noch nicht fertig, es kann den 89S52 jetzt 
löschen und programmieren. Es fehlt noch lesen, vergleichen, sichern, 
dauert also noch etwas bis es praxistauglich ist. Getestet ist es mit 
WinXP und Win7, braucht aber eine Druckerschnittstelle und einen 
Treiber.

Geplant ist auch ein kleines Experimentierboard mit dem 89S52. Darauf 
verwende ich mal einen 128kByte RAM-Baustein. 64K als (downloadbarer) 
Programmspeicher, 64K als Datenspeicher. Damit kann man Programme durch 
einen Bootloader über Schnittstelle direkt in den RAM-Programmspeicher 
laden. Hätte den Vorteil daß es schneller geht als ins Flash und keine 
Begrenzung der Zyklen besteht. Das Flash hat ja "nur" 10000 garantierte 
Schreib/Löschzyklen. Ein Prototyp mit USB-Schnittstelle existiert schon, 
muß halt noch eine Platine dazu gemacht werden - dauert also noch. 
Beitrag "Re: 8051 - Programm und Daten in einem 128kB Chip ohne Overlap"

Gruß. Tom

von TomA (Gast)


Lesenswert?

Habe den Text nochmal gelesen, das ließt sich ja wie der Werbetext für 
ein Gerät das man bald kaufen kann. Nein, so ist es nicht. Wenn das Zeug 
funktioniert, werde ich die Pläne, Layouts und Programme hier 
veröffentlichen. So kann sie jeder nachbauen, sofern es überhaupt 
jemanden interessiert.

Gruß. Tom

von Peter D. (peda)


Lesenswert?

Yann Bauer schrieb:
> Leider tun
> die LEDs gar nichts, wenn ich den MC wieder auf der Platine reinstecke.

Und damit haben sie recht, P0 ist nämlich open-drain (siehe Datenblatt).
Du mußt die LEDs gegen VCC hängen.

von Achim S. (Gast)


Lesenswert?

Yann Bauer schrieb:
> Die Ports P0_0 bist P0_3 sind die Ports, an denen meine 4 LEDs
> angeschloßen sind.

Dumm gelaufen: beim 8051ern können die IOs ganz allgemein viel mehr 
Strom bei Low-Pegel treiben als bei High-Pegel. Lasten wie eine LED 
werden deshalb immer an der Kathode geschalten, und die Anode kommt über 
den Vorwiderstand auf VCC.

Bei Port 0 ist es gleich nochmal heftiger: der hat reine Open Collector 
Treiber. Bei deiner Beschaltung kann der 89S52 also gar keinen Strom 
treiben.

von Yann B. (yann)


Lesenswert?

@Tom

Dke für deine schnelle Antwort. Ich ändere erstmal den Code und melde 
mich später wieder.

Gruß

Yann

von TomA (Gast)


Lesenswert?

und beachte bitte was Peter und Achim geschrieben haben, sie haben 
nämlich absolut recht. Mit den LED's gegen GND wird es nicht gehen.

von Yann B. (yann)


Lesenswert?

@Peter,

dke für deine schnelle Antwort. Wie ich dich verstanden habe muss die 
LED nach oben (Kathode gegen VCC) und ihr Vowiederstand nach unten sein.

Ehrlich habe ich nicht ein einziges Mal daran gedacht, dass es so sein 
könnte. P0 ist open drain!! Was heißt eigentlich? Welcher Einfluss hat 
es auf meine obere gezeigte LED-Schaltung? Tut mir leid aber ich 
verstehe es nicht, obwohl ich das Datenblatt gelesen habe.

Gruß

Yann

von TomA (Gast)


Lesenswert?

Anode an VCC. Auch eine LED ist nur eine Diode und leitet nur in einer 
Richtung. Ob der Widerstand vor, oder hinter der LED liegt ist einerlei.

Gruß. Tom

von Yann B. (yann)


Angehängte Dateien:

Lesenswert?

Achim S. schrieb:
> Dumm gelaufen: beim 8051ern können die IOs ganz allgemein viel mehr
> Strom bei Low-Pegel treiben als bei High-Pegel. Lasten wie eine LED
> werden deshalb immer an der Kathode geschalten, und die Anode kommt über
> den Vorwiderstand auf VCC.

Also sollte es so wie die obere Schaltung aussehen?

von TomA (Gast)


Lesenswert?

Hallo Yann,

so ist es genau richtig. Der Vorwiderstand kommt mir mit 1k etwas 
hochohmig vor, das hängt aber auch von der LED ab. Einfach mal die LED 
mit ihrem Widerstand zwischen VCC und GND klemmen und prüfen, ob sie dir 
hell genug leuchtet.

Gruß. Tom

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.