Forum: Mikrocontroller und Digitale Elektronik at89.falsche Software?


von Timmy Jimmy (Gast)


Angehängte Dateien:

Lesenswert?

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

von Timmy Jimmy (Gast)


Angehängte Dateien:

Lesenswert?

tut mir leid, hab die Anhänge nicht auf einmal hinbekommen

von Timmy Jimmy (Gast)


Lesenswert?

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

von Timmy Jimmy (Gast)


Angehängte Dateien:

Lesenswert?

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.)

von Ralf (Gast)


Lesenswert?

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

von Timmy Jimmy (Gast)


Lesenswert?

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

von Ralf (Gast)


Lesenswert?

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

von Timmy Jimmy (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

@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.

von Peter D. (peda)


Lesenswert?

/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

von Timmy Jimmy (Gast)


Lesenswert?

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.

von Klaus (Gast)


Lesenswert?

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!

von Ralf (Gast)


Lesenswert?

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

von Timmy Jimmy (Gast)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

> 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

von Timmy Jimmy (Gast)


Lesenswert?

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.

von Ralf (Gast)


Lesenswert?

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

von Timmy Jimmy (Gast)


Lesenswert?

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.

von Timmy Jimmy (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.