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.pdfhttp://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. :-)