Servus miteinand Also ich hoffe bei euch werde ich geholfen :-) Erstmal ein paar Infos für euch: - at89s51 (ein 8051er) - Sprache: Assembler - Prog-Software: Prog-Studio von Batronix - Win XP - Atmel ISP-Programmer Version 3.0 (Muhammad Asim Khan) - Prog-Hardware siehe Anhang (der Pin der an Vcc geht hab ich mitsamt Transistor weggelassen; Vcc direkt angeschlossen; EA weggelassen; 10 MHz Oszillator) Also ich hab vor einiger Zeit auf einem Steckbrett testweise die Hardware aufgebaut und es tatsächlich geschafft eine Hex-Datei (glaub von Atmel) auf den µC zu brennen. Jetzt hab ich mir ein Experimentierboard (Programmierkabel) zusammengelötet; also die normale Hardware plus ein paar Dioden, Taster und Anschlüsse. Das Board wird auch zu 50% der Versuche erkannt. Das ist aber im Moment relativ unwichtig. Wenn es erkannt wird kann ich eine Datei ohne Probleme auslesen und öffnen. Aber ich versuche die ganze Zeit mit Prog-Studio ein mini-Programm zu schreiben um 4 LEDs auf dem Board zum Leuchten zu bringen, dazu 0 auf Pins ausgeben. INCLUDE ".\Atmel\AT89X51.mc" ORG 0h MOV Port1,#00h Finalize: JMP finalize Ich hab die Datei mal angehängt: -µC: Datei aus µC Ich kann die Datei aus dem µC ohne Probleme wieder auf den µC schreiben Aber wenn ich versuche die selbstgeschriebene Datei zu brennen kommt folgende Fehlermeldung: Program Verify Error @ Address 0000 Data Read = 6E Prog Data = D2 Könnt ihr mir die Fehlermeldung deuten bzw. erklären??? Liegt das an der Software mit der ich das Programm schreibe? habe ja eine Datei aus dem Internet vor längerem erfolgreich gebrannt (als Test) Ich bin mal auf Antworten gespannt Vielleicht gibts ja mehrere Leute mit dieser Hard-Software-Kombination Gute Nacht
Tja da anscheinend niemand mir helfen konnte und ich meine Fehler nach langer Suche doch noch gefunden hab will ich kurz erläutern was man bei den AT89S51/52/53 beachten sollte. Man sollte darauf achten, dass die Spannungswandler richtig herum angelötet wurden. Hab meinen versehentlich falsch herum eingelötet Folge 9V anstatt 5V. :-) Parallelport; µC und Quarz habens aber erstaunlicherweise überlebt. Resetbeschaltung beachten: Kondensator gegen Vcc und Widerstand gegen GND, da ist Asims Schaltplan noch zu verbessern EA/Vpp ständig an Vcc Hab Pin 5 am Parallelport komplett weggelassen Ich habe beim Ausprobieren den RST-Pin direkt auf GND gelegt, weil ich das Datenblatt so interpretiert habe, da muss man als Anfänger erst mal draufkommen, dass da ein Widerstand hingehört. Zumindest geht es dann. Hab beim Programmieren den Pin direkt auf Vcc gelegt (so laut Datenblatt), das ging dann auch. Tja jetzt funktionierts jippy
Hi Leute jetzt brauch ich aber wirklich eure Hilfe ich weiß nicht mehr weiter. Ich habe mir eine kleine Platine zusammengelötet um damit zu experimentieren. Diese ging zunächst nicht, weshalb ich auf ein kleines Breadboard (ihr wisst schon diese Dinge, auf den man stecken anstatt löten kann) den µC gesteckt hab, nur mit Quarz und 7805. Das ging wirklich gut. Jetzt will ich den Fehler auf meiner Platine finden. Auf der befinden sich auch nur 4 LEDs an Pins P1.0, 1.1, 1.2, 1.3 gegen GND geschaltet und an P2.0, 2.1, 2.2, 2.3 4 SMD-Taster auch gegen GND mit je einem 10k Widerstand als Pullup gegen Vcc(wie im AVR-Tutorial) Meine Frage: Dürfen sich während ISP jetzt doch keine LEDS, Pullup-Wiederstände etc. an den Pins befinden oder kann das an der Streifenrasterplatine liegen. Ich habe echt schon alles gemessen und hab auch mein Oszilloskop benutzt. (so gut wie ich eben damit zurechtkomme) Antwortet bitte. Im Anhang befindet sich meine Datei(wenn P2.0 gedrückt soll P1.0 leuchten usw.)
Hi, > Auf der befinden sich auch nur 4 LEDs an Pins P1.0, 1.1, 1.2, 1.3 gegen > GND geschaltet und an P2.0, 2.1, 2.2, 2.3 4 SMD-Taster auch gegen GND > mit je einem 10k Widerstand als Pullup gegen Vcc(wie im AVR-Tutorial) Tja, da wirst du Pech haben, denn ein genaues Datenblatt-Studium des 8051ers (egal welcher) wird dir sagen, dass der Strom, der bei High aus einem Port fließt, etwa 400µA beträgt (je nach Derivat verschieden). Der 8051 kann nur gegen low relativ große Ströme treiben, etwa 2mA. Das heisst: LEDs + Vorwiderstand an VCC, mit Low auf Pin wird die LED eingeschaltet Eine einigermaßen gute Beschreibung findest du bei Atmel: http://www.atmel.com/dyn/resources/prod_documents/doc4316.pdf http://www.atmel.com/dyn/resources/prod_documents/doc0509.pdf Falls du weitere Fragen hast, nur her damit :) HTH Ralf
Danke für deine Antwort Tut mir leid ich kenne das mit dem Sink/Source Problem. Ich hab da irgendwas verwechselt. Also die LEDs hab ich natürlich mit Widerstand an Vcc angeschlossen. Taster gedrückt - 0 am Pin 0 an Pin ausgeben - LED leuchtet So war mein Gedankengang und so ist auch mein Programm geschrieben, das im Anhang ist Weiß vielleicht jemand ob eine Beschaltung beim ISP-Programmieren stört?? Ich hab einfach mal alles durchgezwickt was unnötig ist und schon wurde der µC relativ häufig erkannt
Hi Timmy, > Also die LEDs hab ich natürlich mit Widerstand an Vcc angeschlossen. > Taster gedrückt - 0 am Pin > 0 an Pin ausgeben - LED leuchtet > > So war mein Gedankengang und so ist auch mein Programm geschrieben, das > im Anhang ist Okay, muss gestehen, dein Programm habe ich mir nicht angesehen, nach der obigen Beschreibung wär das eben ein Fehler gewesen :) Und deswegen hab ich nicht weitergelesen, wozu auch, wenn die Hardware schon nicht richtig ist, wozu die Software ansehen :) Dann sehen wir mal... Du könntest dein Programm etwas leserlicher (und kürzer) schreiben, wenn du die Abfrage so gestaltest: mainl: mov c,P2.0 //Pinzustand in Carry-Flag mov P1.0,c //Carry-Flag auf Pin ausgeben mov c,P2.1 mov P1.1,c mov c,P2.2 mov P1.2,c mov c,P2.3 mov P1.3,c jmp mainl So, jetzt mal zu deinem Schaltplan... Wie ist denn das jetzt genau, mit was wird denn jetzt programmiert? Über den Parallelport oder über den ISP-Connector? Jedenfalls darf jeweils nur eins von beiden gleichzeitig angeschlossen sein. Du verwendest einen relativ langsamen Quarz. Wie schnell programmierst du das Teil? Die maximale Geschwindigkeit des Programmierens über die SPI-Schnittstelle ist abhängig vom verwendeten Quarz! Ausserdem mixt du jetzt zwei Sachen durcheinander, was funktioniert denn jetzt nicht? Schon das Programmieren oder "nur" dein Programm nicht? Ralf
Hey danke dass du dich meiner annimmst. Also ich hab mal ne Skizze angehängt. Ein 7805 liefert 5V. Beim Programmieren hab ich Reset auf Vcc gelegt (um sicher zu gehen). SCK, MISO und MOSI sind an den Parallelport angeschlossen. Der Stecker sieht folgendermaßen aus: Pin 2 mit Pin 12 verbunden Pin 25 ist mit GND verbunden Pin 6 SCK Pin 7 MOSI Pin 10 MISO (erster Eintrag auf dieser Seite hat den Anhang, ich hab jedoch Pin5 und Pin9 weggelassen. Siehe diesen Anhang) Ich benutze ISP-Flash Programmer von Muhammad Asim Khan V3.0 -Carry-Flag benutzen? Muss ich erst noch lernen bin Anfänger -Ich kann durch die Software keinen Einfluss auf die Geschwindigkeit nehmen -Schon das Programmieren funktioniert nicht. Auf jeden Fall mit dem Schaltplan in diesem Anhang. - Das Programm selbst ist im Moment egal. - Ich habe vor ein paar Tagen die gleiche Schaltung auf einem Breadbord aufgebaut jedoch ohne LEDs und ohne Taster(also alle Pins frei). Da ging es. Ich vermute deswegen dass es an der Beschaltung liegt.
@Timmy Jimmy Deine LED's sind laut Skizze falsch eingezeichnet. (gegen Vcc anstatt GND) Du solltest folgende Signale: ALE, /PSEN und /EA mit jeweils 10K gegen VCC schalten. Ein 10µF an Reset gegen VCC schalten. Der darf niemals in der Luft hängen sonst Resetet der Controller unkontrolliert oder fäng an zu spinnen.
/EA an VCC ALE, PSEN sind Ausgänge, also freilassen. An ALE müssen etwa 2..3V zu messen sein, der taktet ständig. An PSEN muß 5V zu messen sein, ansonsten versucht er auf externen Programmspeicher zuzugreifen (z.B. wenn der Flash leer ist). Die LEDs sind falschrum. Peter
Hallo danke ja stimmt die LEDs sind falschherum eingezeichnet, ich habe sie jedoch richtig herum eingebaut. Der Reset-Pin liegt nicht in der Luft. Zum Programmieren unteren Schalter betätigen -> Vcc an Resetpin zum normalen Laufen oberen Schalter betätigen und da ist ein Kondensator. Ich dachte das würde sich selber erklären. Entschuldigung. Es geht aber immer noch darum dass bei dieser Schaltung, ich nenne es mal "Mini-Testboard" (mir reichen die paar LEDs fürn Anfang) der µC von der Software nicht erkannt wird, jedoch ohne Pin-Beschaltung schon. Frage nochmal: Brauchen Port1 und Port2 eine besondere "Behandlung" beim Programmieren? Ich habe im Datenblatt folgendes gefunden, was mich weiterbringen könnte? "Port 2 also receives the high-order address bits and some control signals during Flash programming and verification." Aber AT89S51 ist doch ISP also in Zielschaltung programmierbar.
Port 0 und Port 2 werden für externen Speicher verwendet sofern man
sowas
vorsieht.
Port 0 hat keine Pullups soviel ich weiss.
>Brauchen Port1 und Port2 eine besondere "Behandlung" beim Programmieren?
Soviel ich weiss nicht!
Ich könnte mir vorstellen, dass der Parallelport das SPI-Programmieren schneller taktet, als es der Controller mit 4MHz kapieren kann. Versuch doch mal einen schnelleren Quarz, so um die 16MHz oder 22.1184MHz. Ralf
Gut danke schonmal ich dachte die beeinflussen irgendwie den Programmiervorgang. Die Originalschaltung hat ein 4MHz Quarz vorgesehen, ich hab 8MHz. Ich kann meins ja mal austauschen. Aber 8MHz sollten doch eigentlich besser sein? Im Datenblatt steht SCK sollte eine Frequenz weniger als 1/16 von XTAL Frequenz sein. Also je höheres Quarz umso besser.
> Im Datenblatt steht SCK sollte eine Frequenz weniger als 1/16 von XTAL > Frequenz sein. Genau. Hast du mal angeguckt, wie schnell SCK am Controller ankommt? Ralf
Ich kann ja mal schauen aber unwahrscheinlich, da ja die Originalschaltung mit 4Mhz schon laufen sollte und ich 8Mhz benutze. Da ich keine Pegeltreiber o.ä. benutze checke ich noch mal alles durch. Ich verkürze noch mal die MISO,MOSI,SCK-Leitung und nehme ein Twisted Cable, überprüfe nochmals Lötstellen. Auch wenn ich mich wiederhole :) Auf einem Steckbrett klappt es! Da hängen allerdings auch alle Pins in der Luft. (Ja ich halte immer noch an der Geschichte fest, dass die Beschaltung daran schuld ist) :-) Vielleicht hat ja jemand eine Zeichnung von einem Experimentierboard die er mir schicken könnte.
Lt.Datenblatt Seite 19 muss nix speziell beachtet werden, ausser den Timings für RST, usw. Das heisst, wenn es aufm Steckbrett tut, und aufm richtigen Board nicht, dann, hast du vielleicht irgendwo ne Leitung vergessen oder falsch angeschlossen. Schwingt der Quarz immer an? Wenn der unsauber anschwingt, also mal geht, mal nicht, dann könnts das sein. Mess das mal nach. Und mach eine Vergleichsmessung aller Signale zwischen Steckbrett und Board. Ralf
Oh maaaaaaaaan Auf Vergleichsmessungen bzw. allgemein auf einen Vergleich hätte ich doch auch kommen können. Naja danke jetzt hab ich schon mal einen Ansatz wie es weitergeht.
Ich hab mit dem Oszi gemessen. Bei ALE/PROG kommt bei Betrieb eine Rechteckspannung heraus; bei RST High kommen 5V raus. Quarz schwingt sauber. Ich habe die Datenleitung auf 4cm gekürzt und ein gedrilltes Kabel genommen, bei dem die andere Leitung auf GND liegt. Danke für deine Hilfe Ralf, funktioniert jetzt einwandfrei. Sogar das geschriebe Programm funktioniert und es ist mein erstes. :-)
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.