Forum: Mikrocontroller und Digitale Elektronik AT89S52 programmieren klappt nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Daniel B. (0xfeedc0de64)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe bis her nur mit Arduinos gearbeitet und da ist das Flashen 
natürlich denkbar einfach.

Nun möchte ich einen simplen Arduino Code auf den AT89S52 "portieren". 
Wie ich genau programmieren und kompilieren soll werde ich mir erst 
später anschauen. Zuerst möchte ich zum Test einfach Müll-Dateien drauf 
schreiben und sie wieder gleich rauslesen können.

Ich habe mir dafür ein fertiges usbASP board und eine Hilfsplatine, in 
die der AT89S52 hineinpasst, auf ebay geholt. Fotos von vorne und hinten 
hänge ich diesem Beitrag an.

Leider erhalte ich von avrdude immer die Meldung, dass der 
Mikrocontroller von Anfang an gar nicht antworten würde, und wenn ich 
mit der Option -F einfach fortfahre, erhalte ich nur noch mehr Fehler. 
Ich "beschuldige" einfach mal das billige Programmier-Hilfs-Board.

Aus anderen Beiträgen hier habe ich entnommen, dass dieser Reset Pin 
invertiert sein soll. Eine Invertierschaltung mit einem BC547 habe ich 
anschließend richtig dazwischen geschaltet. Mit einer kurzzeitig 
verbundenen LED kann ich feststellen, dass die ganze Zeit eine Spannung 
angelegt ist, und währen des Versuchs zu flaschen geht sie kurz aus. 
Funktioniert also. Auch hier erhalte ich das selbe Problem im avrdude.

Warum könnte das Flashen selbst trotzdem noch nicht klappen?

von Lothar (Gast)


Lesenswert?

Daniel B. schrieb:
> bis her nur mit Arduinos gearbeitet und da ist das Flashen
> natürlich denkbar einfach

Das ist es auch auf fast jedem uC ausser denen von Atmel. Alle anderen 
8051 oder ARM kommen mit einem Bootloader ROM: man schiebt die HEX Datei 
über ein USB-seriell Kabel für 5 EUR mit drei Drähten TX/RX/GND drauf. 
Oder die mit USB melden sich als Stick an wo man einfach das Binary 
drauf zieht.

> simplen Arduino Code auf den AT89S52 "portieren"
> usbASP board und eine Hilfsplatine

Lies mal das hier komplett durch:

http://www.avrfreaks.net/forum/writing-at89s52-through-usbasp

Aber warum muss es der AT89S52 sein? Für einen Umstieg von Arduino auf 
8051 macht ein Eval Board mit Debugger für nur 25 EUR mehr Sinn z.B.

http://de.rs-online.com/web/p/entwicklungskits-prozessor-mikrocontroller/9158802/?sra=pmpn

Das kommt mit über 100 Demos und Fragen werden zügig im Forum 
beantwortet.

Ansonsten gibt es auch noch "alte" 8051 wie AT89S52 aber mit Bootloader:

http://www.microchip.com/design-centers/8051-80c51-legacy-microcontrollers

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


Lesenswert?

Der AT89S52 kann mit dem original AVRISP MkII und STK500.EXE ganz normal 
geflasht werden, sofern man ihm (und das ist bei ihm zwingend) einen 
Quarz verpasst, damit der interne Takt läuft. Die Kiste hat ja im 
Gegensatz zu den AVR weder Fuses noch einen internen RC Oszillator. Ein 
externer Quarz oder -oszillator mit z.B. 3-10 Mhz muss also sein.

Beim Flashen mit AVRISP MkII muss man auch keinen externen Inverter für 
Reset konstruieren, da er den MC direkt als Device unterstützt.

Ackere also mal die Doku des USB ASP durch und vergewissere dich, ob der 
Programmer den AT89S52 unterstützt.

Wenn du das Pinout des 89S52 gut findest und an MCS51 eher nicht so 
interessiert bist, dann wäre als Aternative der Mega8515 eine gute Wahl. 
Das ist ein AVR8 mit dem gleichen Pinout wie der 89S52 (oder überhaupt 
alle alten DIP40 aus der MCS51 Familie), nur, das Reset hier die von den 
AVR8 gewohnte Polarität hat.

: Bearbeitet durch User
von Daniel B. (0xfeedc0de64)


Angehängte Dateien:

Lesenswert?

Ich habe in meinem ersten Beitrag vergessen zu erwähnen, dass ich bei 
mir "leider" nur Linux-PCs stehen habe. Ich hoffe, dass ich mit avrdude 
weiter komme. Gibt es beim Flashen irgendeinen Unterschied zum oben 
erwähnten "STK500.EXE"?

Lothar schrieb:
> ein Eval Board mit Debugger für nur 25 EUR mehr

ich will 10 kleine Geräte mit jeweils ca. 20 genutzen IOs bauen und da 
möchte ich natürlich an Kosten sparen. Deshalb möchte ich auch keine 
Arduinos verbauen, sondern irgendeinen Microcontroller mit genug IOs. 
Und von diesem hier hab ich jetzt schon ca. 25 Stück... Ich will nicht 
wechseln (ausser es geht einfach nicht anders).

> Lies mal das hier komplett durch

Von genau dieser Seite habe ich die Konfiguration für avrdude entnommen. 
Doch bei denen dort scheint es immer eine Antwort vom Microcontroller zu 
geben.

Kann mir jemand helfen, meinen usbASP zu erkennen und eine Doku zu 
finden? Siehe angängtes Bild. Der von fischl.de scheint es ja nicht zu 
sein. Auf meinem Rechner meldet er sich über USB mit folgender Kennung 
an:
1
ID 16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
Es wird ja auch von avrdude erkannt, daher glaube ich nicht an ein 
Driver-Problem.

Matthias Sch. schrieb:
> Ein externer Quarz oder -oszillator mit z.B. 3-10 Mhz muss also sein.

Ich habe leider nur einen 11 Mhz. Brauche ich einen langsameren?

> Wenn du das Pinout des 89S52 gut findest und an MCS51 eher nicht so
interessiert bist

Ich habe noch keinen Schaltplan geplant mit dem Microcontroller. Das 
mach ich erst, wenn ich weiß, dass er geht!
1
sudo avrdude -p 8052 -c usbasp -U flash:w:DEMO.HEX -v
2
3
avrdude: Version 6.2
4
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
5
         Copyright (c) 2007-2014 Joerg Wunsch
6
7
         System wide configuration file is "/etc/avrdude.conf"
8
         User configuration file is "/home/danbru1211/.avrduderc"
9
         User configuration file does not exist or is not a regular file, skipping
10
11
         Using Port                    : usb
12
         Using Programmer              : usbasp
13
         AVR Part                      : AT89S52
14
         Chip Erase delay              : 500000 us
15
         PAGEL                         : P00
16
         BS2                           : P00
17
         RESET disposition             : dedicated
18
         RETRY pulse                   : SCK
19
         serial program mode           : yes
20
         parallel program mode         : yes
21
         Timeout                       : 200
22
         StabDelay                     : 100
23
         CmdexeDelay                   : 25
24
         SyncLoops                     : 32
25
         ByteDelay                     : 0
26
         PollIndex                     : 3
27
         PollValue                     : 0x53
28
         Memory Detail                 :
29
30
                                  Block Poll               Page                       Polled
31
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
32
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
33
           flash         33    12     0    0 no       8192    0      0  4000  9000 0xff 0xff
34
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
35
36
         Programmer Type : usbasp
37
         Description     : USBasp, http://www.fischl.de/usbasp/
38
39
avrdude: auto set sck period (because given equals null)
40
avrdude: error: program enable: target doesn't answer. 1 
41
avrdude: initialization failed, rc=-1
42
         Double check connections and try again, or use -F to override
43
         this check.
44
45
46
avrdude done.  Thank you.

von Lothar (Gast)


Lesenswert?

Daniel B. schrieb:
> ich will 10 kleine Geräte mit jeweils ca. 20 genutzen IOs bauen und da
> möchte ich natürlich an Kosten sparen. Deshalb möchte ich auch keine
> Arduinos verbauen, sondern irgendeinen Microcontroller mit genug IOs.
> Und von diesem hier hab ich jetzt schon ca. 25 Stück... Ich will nicht
> wechseln (ausser es geht einfach nicht anders)

Nun der AT89S52 kostet etwa 4 EUR und ein EFM8BB31F16-QFP32 kostet 1 EUR 
und ein USB Seriell Adapter mit CP210x auf Ebay 5 EUR

Andererseits gibt es auf Ebay auch 5 Stück ATmega328P mit Arduino 
Bootloader für 12 EUR macht 2,40 pro Stück, immer noch billiger als der 
AT89S52

Matthias S. schrieb:
> Wenn du das Pinout des 89S52 gut findest und an MCS51 eher nicht so
> interessiert bist, dann wäre als Aternative der Mega8515 eine gute Wahl

Der kostet auch etwa 4 EUR und man braucht einen Programmer.

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


Lesenswert?

Daniel B. schrieb:
> Ich habe leider nur einen 11 Mhz. Brauche ich einen langsameren?

Nö, das sollte auch klappen. AVRDude unterstützt anscheinend den AT89S52 
- jetzt ist nur noch die Frage, ob das der USBAsp das auch tut. Das sind 
mehr oder weniger alles Klone von Freund Fischls Gerät und wenn Fischl 
das kann, dann sollte es der Klon auch können.
Vllt. taucht Jörg ja nochmal auf und sagt, wie man AVRDude aufrufen 
muss, damit es mit dem USBAsp und AT89S52 klappt.

Daniel B. schrieb:
> Van Ooijen Technische Informatica

Versuch doch mal, von diesen Typen Infos zu bekommen.
Edit: Ahh, noch eine Frage: Hast du je versucht, mit dem Programmer 
irgendwas zu programmieren, also z.B. einen AVR?

Lothar schrieb:
> und man braucht einen Programmer.

Den hat er ja schon. Klar sind 4 Euro nicht so wenig, aber das Pinout 
ist eben genau das gleiche wie für den 89S52

: Bearbeitet durch User
von R. M. (Gast)


Angehängte Dateien:

Lesenswert?

Da ich mich erinnern konnte, mit dem USBASP mal Probleme gehabt zu haben 
und für den 89S52 immer den USBTINY genutzt habe (der ist weniger 
intelligent als USBASP, daher langsamer), hab ich es grad mit dem USBASP 
nochmal getestet: funktioniert auch damit!

folgendes hab ich im Lauf der Zeit festgestellt/bitte ich zu beachten:

Wenn der Programmer den Reset runterzieht, muss der Reset des 52er 
hochgezogen werden. Daher hab ich dafür einen PNP-Transistor genutzt.
Wenn der Reset sofort wieder runterfällt, wenn der Programmer ihn kurz 
deaktiviert, gibts Probleme (Wenn der Programmer von Signatur lesen 
weiterspringt zum Programmieren). Da ich am Resetpin des 52er noch einen 
1 Mikrofarad-Elko gegen Masse dranhabe, wird dies willkommenerweise 
unterdrückt.

grundsätzlich geht es also!

Im Anhang, der Schnipsel für den 89S52, den ich an meine 
/etc/avrdude.conf angehängt habe.

Ich wünsch dir viel Erfolg!

/////////////

nutzer@8935G:~$ avrdude -c usbasp -p 8052 -U flash:r:test.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 
0.00s

avrdude: Device signature = 0x1e5206 (probably 8052)
avrdude: reading flash memory:

Reading | ################################################## | 100% 
12.19s

avrdude: writing output file "test.hex"

avrdude: safemode: Fuses OK (E:FF, H:FF, L:FF)

avrdude done.  Thank you.

Edit: Skizze von meinem Setup angehängt, Der Elko geht aber natürlich an 
Plus, wie es auf deiner Platine auch ist!

von Daniel B. (0xfeedc0de64)


Lesenswert?

Lothar schrieb:
> Nun der AT89S52 kostet etwa 4 EUR
Ich habe 25 Stück für ca. 15 Euro ersteigert, von den Kosten her bin ich 
damit nicht schlecht unterwegs. Ich möchte unbedingt diesen 
Microcontroller programmieren (alleine schon nur für den Lerneffekt).

Matthias Sch. schrieb:
> AVRDude unterstützt anscheinend den AT89S52

Allerding erst, nachdem man einen kleinen Block Konfiguration irgendwo 
her in die avrdude.conf kopiert. Aber viele meinten, dass es damit 
funktioniert.

> Ahh, noch eine Frage: Hast du je versucht, mit dem Programmer
irgendwas zu programmieren, also z.B. einen AVR?

Nö, hab noch nie etwas anderes programmiert als Arduinos und ATtiny85 
(über einen Arduino).

R. M. schrieb:
> Da ich am Resetpin des 52er noch einen 1 Mikrofarad-Elko gegen Masse dranhabe, 
wird dies willkommenerweise
unterdrückt.

So wie ich das an den Leiterbahnen an meinem Board sehen kann, habe ich 
auch einen 10uF Kondensator zwischen Reset und 5V+. Ausserdem ist da 
noch ein Widerstand zwischen Reset und GND. Ich hoffe das ergibt ca. das 
selbe. Und meine Transistor-Umkehr-Schaltung war auch die selbe, nur 
halt mit anderen Widerstandswerten. Aber es funktioniert leider mit der 
von dir angehängten Konfiguration weder mit noch ohne 
Transistor-Schaltung.

Hat sich jemand das Board im ersten Beitrag angesehen? Stimmen die 
Belegungen überhaupt? Ich habe nur die Pin-Belegungen von usbASP 
Steckern und das Datasheet vom AT89S52 angesehen und es schaut richtig 
aus.

Danke für eure Vorschläge!

von R. M. (Gast)


Angehängte Dateien:

Lesenswert?

Daniel B. schrieb:

> Eine Invertierschaltung mit einem BC547 habe ich
> anschließend richtig dazwischen geschaltet.

Zeig doch bitte mal deine Schaltung! Der BC547 ist m.W, ein NPN, damit 
nicht so optimal.

Die ganze Verdrahtung sieht bei mir ganz anders aus, da ich keine 
originalen Programmer, sondern Eigenentwickungen, aber mit angepasster 
Originalsoftware benutze, auch der Steckverbinder auf dem µC-Board 
entspricht nicht dem Atmel-SPI-Standard, sondern enthält den kompletten 
P1, sowie Reset.

Bei dir sollten die SPI-Leitungen abgesehen von dem zu invertierenden 
Reset, 1 zu 1 durchgehen, der USBASP ist ja gut dokumentiert, die vom 
89s52 auf den ersten Seiten im DB (Pin configuration). Ggf musst du die 
mal durchklingeln.

von Inkignoto (Gast)


Lesenswert?

R. M. schrieb:
> funktioniert auch damit!

Na, in der Annahme das der Reseteingang des 52 hochohmig ist,
dürfte die Transistorschaltung nicht so recht funktionieren,
wenn kein Kollektorwiderstand als Pulldown vorhanden ist.
An die Unkontrollierbarkeit der Kondensatorladung mag ich
da gar nicht erst denken.

Daniel B. schrieb:
> Siehe angängtes Bild.

Zwei Geräte am USB werden vermutlich nicht erkannt, wenn
die für die gleiche Aufgabe initialisiert wurden. Sieht
so aus, dass eine Baugruppe nur die Versorgung für den
Chip-Adapter und der Stick die Programmierschnittstelle
bedient. Wozu soll das gut sein?
Entweder man benutzt einen Programieradapter und versorgt
auch den Chipadapter darüber. Zwei ist einer zuviel.

von Daniel B. (0xfeedc0de64)


Lesenswert?

Ich verwende die Transistorschaltung von folgender Seite:

http://ernstc.dk/arduino/at89s.html

Weil ich sowieso schon zwischen Programmierboard und usbASP Jumperkabel 
hin und her spannen muss, habe ich auch gleich die 2. 
Spannungsversorgung entfernt. Der Strom wird nur noch aus den usbASP 
bezogen.

Hat leider auch noch nicht geklappt.

von Jobst M. (jobstens-de)


Lesenswert?

Inkignoto schrieb:
> Na, in der Annahme das der Reseteingang des 52 hochohmig ist

Die Annahme ist falsch. Ein Kondensator zwischen +5V und Reset ist 
Pflicht.
Der wird dann langsam gegen GND geladen und dann legt der Prozessor los.


Gruß

Jobst

von Karl M. (Gast)


Lesenswert?

Hallo,

Daniel B. schrieb:
> Weil ich sowieso schon zwischen Programmierboard und usbASP Jumperkabel
> hin und her spannen muss, habe ich auch gleich die 2.
> Spannungsversorgung entfernt. Der Strom wird nur noch aus den usbASP
> bezogen.

Weist Du wie viel Strom von USBASP beim PC angemeldet wird ?

Dann schau mal in die Firmware deines USBASP, evtl. verstehst Du dann 
mehr.

von R. M. (Gast)


Lesenswert?

Daniel B. schrieb:

> Ich verwende die Transistorschaltung von folgender Seite:
> http://ernstc.dk/arduino/at89s.html

Diese erwartet, das in den Pausen zwischen den Programmiervorgängen, der 
Resetausgang des Programmers hochzieht. Das machen aber meines Wissens 
nicht alle. Die meisten Programmer, mit denen ich zu tun hatte, schalten 
im inaktiven Zustand alle Ausgänge hochohmig, um Rückwirkungen auf das 
dann (hoffentlich) laufende Programm zu vermeiden.
Du könntest den Resetausgang des USBASP mit einem 10kiloohm Widerstand 
hochziehen um den "Ruheszustand" sicherzustellen. Daher hab ich die 
Variante mit dem PNP vorgezogen.
mfG

von Daniel B. (0xfeedc0de64)


Lesenswert?

Karl M. schrieb:
> Weist Du wie viel Strom von USBASP beim PC angemeldet wird ?

Ich kann problemlos eine 500mA Glühlampe betreiben. Mit einem Multimeter 
in Serie sehe ich, dass die 500mA gar kein Problem sind. Ich glaube 
hinter meinem USB-Hub kann jedes angeschlossenes Gerät viel Strom 
ziehen. Selbst wenn sich das Gerät gar nicht am Computer anmeldet, 
erhält es den vollen Strom (alle USB-Versorgungen sind einfach nur 
paralell geschalten). In Summe kann ich am Hub nur ca. 8A beziehen, weil 
das Netzteil nicht mehr hergibt. Das wird doch in diesem Fall kein 
Problem sein.

> Dann schau mal in die Firmware deines USBASP, evtl. verstehst Du dann
mehr.

Wenn du mir sagen kannst, wo ich die bekomme? Ich weiß nicht, was für 
einen Programmer ich da habe. Es war ein 1€ Kauf auf Ebay mit dem 
Hinweis, dass es kompatibel zu www.fischl.de/usbasp/ sei.

R. M. schrieb:
> Du könntest den Resetausgang des USBASP mit einem 10kiloohm Widerstand
hochziehen um den "Ruheszustand" sicherzustellen.

Ich weiß leider nicht, was das genau bedeutet. Heißt es einfach den 
Widerstand zwischen RESET und 5V+ zu geben? Kann ich meine restliche 
Transistor-Schaltung so lassen wie sie ist? Genau so habe ich es 
probiert mit dem selben Ergebnis wie immer: keine Antwort vom 
Microcontroller.

> Daher hab ich die Variante mit dem PNP vorgezogen.

Ich habe deine Schaltung 1-zu-1 nachgebaut und wieder richtig zwischen 
Programmer und Microcontroller geschalten. Selbes Ergebnis: kein 
Lebenszeichen vom Microcontroller.

Habe mehrere Microcontroller versucht, um einen Defekt auszuschließen.

von Lothar (Gast)


Lesenswert?

Daniel B. schrieb:
> Habe mehrere Microcontroller versucht, um einen Defekt auszuschließen

Kann ja auch noch sein dass die Teile nicht ohne Grund so billig waren:

Daniel B. schrieb:
> Ich habe 25 Stück für ca. 15 Euro ersteigert

von Inkognito (Gast)


Lesenswert?

Daniel B. schrieb:
> kein
> Lebenszeichen vom Microcontroller.

Wenn du zwei Programmer benutzt, wundert das nicht.
Ansonsten erkläre mal deinen Schaltungsverhau im
Gesamtaufbau vom 27.08.2016 16:21.

von Jobst M. (jobstens-de)


Lesenswert?

@ Daniel B.

Wenn Du es nicht hinbekommst, dann lasse ich Dir gerne einen einfachen 
AT89S52-Flasher zukommen. Ich habe genug davon.
Mit seiner Hilfe wird über ein Terminalprogramm einfach ein HEX-file in 
den Controller geschoben.


Gruß

Jobst

von Jobst M. (jobstens-de)


Lesenswert?

Inkognito schrieb:
> Wenn du zwei Programmer benutzt, wundert das nicht.
> Ansonsten erkläre mal deinen Schaltungsverhau im
> Gesamtaufbau vom 27.08.2016 16:21.

Man sieht doch, dass er sich von dem einen nur Betriebsspannung holt ...


Gruß

Jobst

von Daniel B. (0xfeedc0de64)


Lesenswert?

Ich habe nur 1 usbASP und der ist am Computer und Microcontroller 
angeschlossen.

Der Arduino ist nur ein serieller Port am Computer und wird auch nicht 
verwendet. Ich habe ihn nur deshalb verwendet, um die 5V vom USB Hub zu 
bekommen.

Aber wie gesagt habe ich diesen beseitigt und verwende nur mehr den 
Programmer als Spannungsquelle. Dieser liefert an 2 Kontakten eh 5V. Nur 
mein AT89S52-Board nutzt diese Pins am 10-Pol-Stecker nicht, stattdessen 
soll man bei anderen Anschlüssen die Spannung anlegen. Das Board hat 
auch eine LED, an der man erkennt, dass eine Spannung da ist. Ich habe 
eine LED am allerersten IO-Port angehängt. Sie leuchtet halbhell und das 
ändert sich nicht während des Flashens. Ist das ein schlechtes Zeichen?

EDIT: Ich habe einfach mal zum Spaß 20 mal den Befehl zum Flashen 
ausgeführt. Und siehe da, irgendwann einmal ändert sich die Meldung! 
Allerdings gleich beim nächsten Versuch war es wieder der alte Fehler.
1
irgendjemand@irgendwo:~$ sudo avrdude -p 8052 -c usbasp
2
3
avrdude: AVR device initialized and ready to accept instructions
4
5
Reading | ################################################## | 100% 0.00s
6
7
avrdude: Device signature = 0x1e5206 (probably 8052)
8
9
avrdude: safemode: Fuses OK (E:FF, H:FF, L:FF)
10
11
avrdude done.  Thank you.

Ich glaube so langsam, dass der Chip vielleicht doch nicht defekt ist!

: Bearbeitet durch User
von Daniel B. (0xfeedc0de64)


Angehängte Dateien:

Lesenswert?

Nach endlos vielen Versuchen bekomme ich sogar noch mehr versprechende 
Ergebnisse! Siehe Anhang.

von R. M. (Gast)


Lesenswert?

Deutet zummindest darauf hin, das die Schaltung grundsätzlich schonmal 
richtig ist.
Falls Du wieder den Inverter mit dem NPN aktiv hast, könntest du auch 
versuchen, den Elko vom Resetanschluss zu entfernen. Der verzögert sonst 
nämlich das aktiv Werden des Resetsignals um 10 mS (1kiloOhm*10µF). Bei 
der Variante mit PNP, würde der Reset wärend der Pausen aktiv bleiben, 
was anscheinend bei mir keine Probleme verursacht. Der interne Pulldown 
des 8052 muss so einige 100k haben.
mfG

von Inkognito (Gast)


Lesenswert?

Daniel B. schrieb:
> Ich habe nur 1 usbASP und der ist am Computer und Microcontroller
> angeschlossen.

Du hast in dem Bild aber zwei Programmer am USB angeschlossen und
die werden vom PC auch beide wohl als angeschlossene Hardware
erkannt. Wenn die beiden Geräte aber von einer Programmiersoftware
bedient werden sollen kann es einen Konflikt geben. Bloß weil du
Ausgangsseitig ein Gerät nicht benutzt, heißt das nicht, dass die
Software nicht über USB versucht darauf zuzugreifen. Entweder
drücke ich mich nicht verständlich genug aus, oder die Verhältnisse
sind nicht so, wie angenommen. Max. ein Gerät, eine Programmiersoftware
und ein Adapter. Eine andere Konfiguration ist nicht abschätzbar.

von Daniel B. (0xfeedc0de64)


Angehängte Dateien:

Lesenswert?

R. M. schrieb:
> Bei der Variante mit PNP, würde der Reset wärend der Pausen aktiv bleiben,
was anscheinend bei mir keine Probleme verursacht.

Ich habe von dem chinesischen Programmier-Board den Wiederstand und 
Kondensator am Reset Pin komplett entfernt.
Ich habe wieder deine PNP Schaltung aufgebaut und dieses Mal auch 
zusätzlich eine LED zwischen dem Reset-Pin am AT89S52 und GND (nur beim 
1. Test; später ohne LED um Störungen zu vermeiden).

So wie es aussieht, invertiert sie gar nicht! Die LED geht nur kurz an 
während des Flashens und dann wieder aus. Sollte es nicht umgekehrt 
sein? Oder meintest du dass ich zuerst meine Invertierschaltung habe und 
zusätzlich deine PNP? Ich hoffe mein BC557C ist der richtige. Laut 
Datasheet ist es ein ganz gewöhnlicher PNP Transistor. Die 
Flash-Ergebnisse sind mit und ohne Umkehrens des Reset-Signals immer die 
gleichen. Bei jeden 17. Versuch gehts dann wieder ein wenig weiter als 
sonst. Aber dann auch nur Fehler.

Inkognito schrieb:
> Du hast in dem Bild aber zwei Programmer am USB angeschlossen

Ich habe nur 1 usbASP und die 2. große Platine mit dem Wort "MEGA" drauf 
ist ein Arduino Mega. Ein Arduino meldet sich nicht als Programmer 
(sondern als gewöhnlicher COM-Port) am Computer an. Der usbASP scheint 
kein COM-Port oder Ähnliches zu sein.
Somit gibt es ganz sicherlich keine Verwechslung, wenn ich avrdude 
anweise den Programmer usbasp zu verwenden. Mann sieht auch dass der 
usbASP blinkt während des Flashens.
Ausserdem habe ich den Arduino eh schon entfernt und beziehe die 
Spannung  während des Programmierens nur mehr ausschließlich aus dem 
usbASP Programmer. Diese Fehlerquelle ist somit schon beseitigt.

Ein Foto von meinem derzeitigen Setup mit der PNP-Schaltung hänge ich 
sicherheitshalber diesem Beitrag bei. Vielleicht mache ich ja 
irgendetwas komplett falsch. Wie gesagt, ich bin ein kompletter Anfänger 
in diesem Bereich und bedanke mich für eure Beitrage!

: Bearbeitet durch User
von Inkognito (Gast)


Lesenswert?

Daniel B. schrieb:
> Ein Foto von meinem derzeitigen Setup mit der PNP-Schaltung hänge ich
> sicherheitshalber diesem Beitrag bei. Vielleicht mache ich ja
> irgendetwas komplett falsch. Wie gesagt, ich bin ein kompletter Anfänger
> in diesem Bereich und bedanke mich für eure Beitrage!

Leider kann man nicht so gut Details deines Aufbaus erkennen.
Der obere Widerstand ist mit beiden Enden in der gleichen
Steckbrettzeile gesteckt? Zwei der Widerständedrähte müssten
aber in die zweite Zeile an die Basis des 557 gesteckt werden.

von R. M. (Gast)


Lesenswert?

Soweit ich erkennen kann, liegt die D1-LED an der Betriebsspannung, 
sollte also während der Prozedur eigentlich ständig leuchten. Wenn sie 
das nicht tut, könnte noch eine Verbindung fehlen.

von Daniel B. (0xfeedc0de64)


Lesenswert?

Inkognito schriebt:
> Zwei der Widerständedrähte müssten
aber in die zweite Zeile an die Basis des 557 gesteckt werden.

Ja der Widerstand geht von der Basis zu Emitter (auch 5V+). Die 
Schaltung am Breadboard ist mit Sicherheit 1-zu-1 die, wie sie im Bild 
von dir dargestellt wird. Mir fehlt halt nur irgendwie die Umkehrung des 
Signals, oder?

R. M. schrieb:
> sollte also während der Prozedur eigentlich ständig leuchten.

das tut sie auch! Mit der Spannungsversorgung stimmt soweit alles. Hab 
die Pins am Mircocontroller nachgemessen.

von R. M. (Gast)


Lesenswert?

Daniel B. schrieb:
> Mir fehlt halt nur irgendwie die Umkehrung des
> Signals, oder?

Der Reseteingang des 89S52 sollte während des Zugriffs, von 0 nach 1 
wechseln. Überprüfen kannst du das mit einer LED und Vorwiderstand gegen 
Masse. Die sollte dann kurz aufleuchten.

von Daniel B. (0xfeedc0de64)


Lesenswert?

R. M. schrieb:
> Der Reseteingang des 89S52 sollte während des Zugriffs, von 0 nach 1
wechseln.

Ist es nicht genau bei diesem Microcontroller umgekehrt? Deshalb eine 
extra Schaltung überhaupt erst, oder?

Der usbASP legt erst eine Spannung an, wenn er programmiert. Und so wie 
ich das auf allen anderen Seiten verstanden habe, ist das beim AT89S52 
genau umgekehrt. Wenn ich eh nicht umkehren soll, kann ich dann den 
usbASP-Reset Pin nicht direkt an den des Mikrocontrollers verbinden?

Auf dem Programmier-Board waren halt noch ein Kondensator und Widerstand 
zu GND und 5V+, die ich aber beide entfernt habe.

Wie soll ich es jetzt machen? Mit oder ohne den Bauteilen am Board und 
mit oder ohne Umkehrung?

von Inkognito (Gast)


Lesenswert?

Daniel B. schrieb:
> Wie soll ich es jetzt machen? Mit oder ohne den Bauteilen am Board und
> mit oder ohne Umkehrung?

Wenn es mit nicht geht, muss man es ohne versuchen, allerdings kann
ich mich damit nicht so recht anfreunden, dass da nur ein Elko
am Reset-Eingang sitzt. Ich würde noch einen 1-10k Widerstand
parallel schalten, damit der Transistor auch ein Last hat.

von R. M. (Gast)


Lesenswert?

Daniel B. schrieb:

> Ist es nicht genau bei diesem Microcontroller umgekehrt? Deshalb eine
> extra Schaltung überhaupt erst, oder?

Beim AVR liegt der Resetpin (durch den internen Pullup) normalerweise an 
plus, und wird während des Programmierens runtergezogen,

Beim 80S52 liegt der Resetpin (nurch den internen Pulldown) 
normalerweise an Masse, und muss während des Programmierens hochgezogen 
werden.

Das ist der Unterschied.

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


Lesenswert?

R. M. schrieb:
> Beim 80S52 liegt der Resetpin (nurch den internen Pulldown)
> normalerweise an Masse, und muss während des Programmierens hochgezogen
> werden.

So isses. Der genaue Ablauf steht auch im Kapitel 'Serial Programming 
Algorithm' (Absatz 20) im Datenblatt des AT89S52.

: Bearbeitet durch User
von Georg_G (Gast)


Lesenswert?

Wie wäre es mit etwas Systematik?

Schaltung mit Programmeriergerät auf den Tisch legen und einen 
Programmierversuch starten. Der schlägt fehl. OK. Nichts verändern.

Betriebsspannung am AT messen. Sind es 5V?
Takt am AT messen. Amplitude und Frequenz passen?
Pegel am Reset Pin messen. Sind es 0V? Wenn nein, Inverter ^1.

Wenn bis hierher alles passt, als nächstes die ISP Signale ansehen. Im 
Prinzip reicht es aus, dass sichergestellt wird, dass sie vorhanden 
sind.

von Inkognito (Gast)


Lesenswert?

R. M. schrieb:
> (nurch den internen Pulldown)

Dafür gibts im 38-seitigem Datenblatt keinen Hinweis.
Pullups für die Ports werden dagegen erwähnt.
Ich hab mal mit der Chipbezeichnung über Google-Bilder mir
ein paar Projekte mit dem 52 angeschaut und die haben immer
einen 10k-Pullup als externe Beschaltung am Reset.
Alles andere würde ich mal als Fiction bezeichnen.

von R. M. (Gast)


Angehängte Dateien:

Lesenswert?

Inkognito schrieb:
> R. M. schrieb:
>> (nurch den internen Pulldown)
>
> Dafür gibts im 38-seitigem Datenblatt keinen Hinweis.
> Pullups für die Ports werden dagegen erwähnt.

Steht etwas weiter hinten, in den elektrischen Eigenschaften.

Edit: Pullup am Reset wäre ziemlich kontraproduktiv, weil der Käfer dann 
nicht von selbst auf die Beine kommen würde ;-)

von Inkognito (Gast)


Lesenswert?

R. M. schrieb:
> Steht etwas weiter hinten, in den elektrischen Eigenschaften.
>
> Edit: Pullup am Reset wäre ziemlich kontraproduktiv, weil der Käfer dann
> nicht von selbst auf die Beine kommen würde ;-)

Ich finde das etwas seltsam, dass dort Werte von 50-300 kOhm angeben
sind, also kein typischer Wert, als wenn der frei wählbar wäre.
Wer sagt denn, das der Chip einen Internen hat? Das können ja auch
Werte sein die man extern wählen darf.
Eine externe Reset-Beschaltung ist doch so oder so zwingend.

von Jobst M. (jobstens-de)


Lesenswert?

Inkognito schrieb:
> Wer sagt denn, das der Chip einen Internen hat?

Weil es einfach mit einem Kondensator funktioniert!?

Ausserdem steht es im 334 seitigen MCS51 Familiendatenblatt, dass 
CMOS-Versionen diesen Widerstand haben. (Kapitel 'Power up')


Gruß

Jobst

von R. M. (Gast)


Lesenswert?

Das war aber auch schon beim Ururur-Intel-8051 so, mit dem gleichem 
Toleranzbereich. Damit ist man mit einem 1 bis 5 µF Elko gut 
ausgekommen. Einen externen 10k Pulldown zusätzlich anzuschließen steht 
natürlich frei, erfordert dann allerdings (bei gleicher 
Spannungsanstiegsgeschwindigkeit beim Einschalten) auch einen größeren 
Elko. Und der ist hier, im Gegensatz zum AVR auch zwingend erforderlich.

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

Vielleicht hilft dir mein (rudimentäres) Programm zum Flashen von 
AT89S52.

Ich hatte ein Programm zum Experimentieren mit SPI geschrieben gehabt, 
dem ich ein Flashprogramm für ISP MCS51 Controller aufgesetzt habe.

Ich habe es "uniface3" getauft und läuft AVR Controllern ATMega8 und 
ATmega48 bis Atmega328.

Wenn du einen Arduino hast, kannst du das Programm auch in einem Arduino 
laufen lassen um MCS51 Controller zu flashen (allerdings ist das 
Programm füer den Arduino kein "Sketch" sondern ein reines C Programm).

ZIP Datei auspacken und die Makefiles in den Ordner aufrufen (evtl. den 
Controllernamen bei Uniface3 anpassen... atmega328p für den Arduino). 
Aufruf von

make

in der Konsole generiert dir die Hex-Datei

Im Ordner flash51n ist das C-Consolenprogramm um einen AT89S52 zu 
flashen.

Auch hier Makefile aufrufen

make

Es entsteht ein Programm: flash51n

Rufe das Programm auf um zu sehen, welche Parameter notwendig sind,

Gruß Ralph

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

So, jetzt hab ich das mal zum Spaß aufgebaut und getestet und das Linux 
Konsolenprogramm noch minimal "modifiziert".

Unterschiedliche Bootloader des Arduino haben unterschiedliche 
Verweilzeiten im Bootloader bis die User-Firmware ausgefuehrt wird. D.h. 
es kann vorkommen, dass das Konsolenprogramm schon auf Antwort der 
Flasherhardware (i.d.F. der Arduino) erwartet, der aber noch nicht 
bereit ist. Aus diesem Grund habe ich die Wartezeit im Konsolenprogramm 
verlängert.

Im Anhang ist nun das Konsolenprogramm, die Firmware für den Arduino (um 
einen MCS-51 flashen zu können) und ein Testprogramm für einen AT89S52.

Die Zip-Datei auspacken und:

./install

als root aufrufen. Es werden das Konsolenprogramm, die Firmware und ein 
Blinkprogramm generiert.

Hierfür müssen auf dem Linux System GCC, AVR-GCC und SDCC (für den 
AT89S52) bereits installiert sein.

GCC und AVR-GCC sollten schon vorhanden sein, den SDCC bekommt man hier:

https://sourceforge.net/projects/sdcc/files/sdcc-linux-x86/3.6.0/

Wenn es ein Ubuntu Linux ist:

sudo apt-get update
sudo apt-get install sdcc

Das im Verzeichnis ./flash51n entstandene Programm am besten in ein 
Verzeichnis kopieren, das im Suchpfad des Systems ist, gut geeignet 
hierfür ist bspw. /usr/local/bin

----------------------------------------

Zum Aufbau des Flashers:

Grundsätzlich sollten die SPI - Leitungen zum Zielsystem kurz sein, denn 
diese sind durchaus kritisch. In die Leitungen (MOSI, MISO, SCK und RST) 
sind zur Bedämpfung Reihenwiderstände von 56 bis 100 Ohm nicht von 
Nachteil.

Für den AT89S52 gilt:

Grundsätzlich benötigt er einen Quarz, ich habe dieses hier jetzt mit 8 
MHZ - 20 MHZ getestet.

WICHTIG (weil gerne vergessen) !

Der Anschluss /EA Vpp (im 40 pol. DIL Gehäuse Pin 31) ist auf +Ub zu 
legen, ansonsten kann es sein, dass der Chip spinnt und temporär 
versucht wird, ein externes ROM zu lesen (was man ja nicht will).

Viel Spaß und viel Erfolg

von tommy_v (Gast)


Lesenswert?

Spendier der Platine aus Deinem Eingangspost doch mal
einen Abblockkondensator (100nF Keramik Vielschicht)
zwischen Vcc und GND.

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.