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?
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
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
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. |
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.
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
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!
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!
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.
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.
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.
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
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.
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
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.
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
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.
@ 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
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
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
Nach endlos vielen Versuchen bekomme ich sogar noch mehr versprechende Ergebnisse! Siehe Anhang.
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
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.
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
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.
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.
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.
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.
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?
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.
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.
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
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.
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.
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 ;-)
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.
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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.