Guten Abend mitteinander,
ich sollte mich beruflich ein bisschen mit den 8051er auseinandersetzen.
Irgendwie komm ich damit nicht so ganz klar.
Ich habe einen AT89S52 von Atmel mit dem folgendem Programm beschrieben:
Nach anfänglichen Schwierigkeiten mit dem flashen (über das Atmel Kabel
AT89ISP), habe ich es nun endlich geschaft, den Prozessor zu
programmieren.
Leider macht er aber keinen Mucks mit dem obigen Programm. Im Simulator
(MIDE-51) funktioniert es einwandfrei.
An P0.0 ist eine LED über einen Vorwiderstand gegen Plus angeschlossen.
Diese sollte eigentlich blinken, leuchtet aber noch nicht einmal. Am
Prozessor selbst ist ein 12 MHz Quarz mit zwei 33pF Kondensatoren
angeschlossen, am Reset PIN sind ein 8,2k Widerstand gegen Masse und ein
1µF Kondensator gegen Plus angeschlossen.
Ich wäre sehr dankbar, wenn mir jemand auf die Sprünge helfen kann. Wo
ist da der Wurm drin?
-Marcus
Achso,
2 Dinge noch.
Auch wenn Du die Interruptvectoren hier nicht benutzt, so schließe sie
sicherheitshalber mit RETI ab und leg die Startadresse deines Programmes
auf die Speicheradresse jenseits des Vector-Bereichs.
Um zu sehen, ob Dein µC wirklich arbeitet, schalte die LED
einfach mal nur über den Befehl
clr P0.0
loop
sjmp loop
ketzt müsste die LED gegen 0 geschaltet werden.
Wenns das nicht ist, dann läuft auch das Programm nicht.
@Joe: Die LED hängt an VCC, sollte also ok sein.
@Dirk: Ich glaube die Delay-Funktion verzögert nur um ein ca. 1ms...
also sollte das Blinken nicht sichbar sein. Aber die LED sollte etwas
leuchten.
Gruß,
SIGINT
Ich danke euch für die Antworten.
Bin leider noch nicht dazu gekommen die Tipps auszuprobieren. Im Moment
sind leider andere Dinge dringender.
Sobald ich wieder mehr Luft habe, werde ich, so wie Dirk geschrieben
hat, einfach nur den Ausgang setzen und schauen was passiert.
Interrupts sind im Moment noch nicht freigegeben, dürfte ja ansich auch
nichts passieren? Der nächste Schritt wäre dann die Verzögerung mit dem
Timer zu realisieren.
Wo finde ich eigentlich die Interrupt-Vektoren? Die Datenblätter von den
8051er sind mir irgendwie nicht ganz geheuer. Mir kommt es so vor, als
ob hier schon einiges Wissen vorrausgesetzt wird. Bei den AVRs ist alles
immer schön ausführlich beschrieben und damit komme ich meistens ganz
gut klar.
@Peter:
Muß ich EA an VCC legen, damit der Prozessor überhaupt arbeitet? Im
Moment hängt der PIN in der Luft.
Sonnige Grüsse
Marcus
Marcus Göttler wrote:
> Ich danke euch für die Antworten.>> Bin leider noch nicht dazu gekommen die Tipps auszuprobieren. Im Moment> sind leider andere Dinge dringender.>> Sobald ich wieder mehr Luft habe, werde ich, so wie Dirk geschrieben> hat, einfach nur den Ausgang setzen und schauen was passiert.>> Interrupts sind im Moment noch nicht freigegeben, dürfte ja ansich auch> nichts passieren? Der nächste Schritt wäre dann die Verzögerung mit dem> Timer zu realisieren.> Wo finde ich eigentlich die Interrupt-Vektoren? Die Datenblätter von den> 8051er sind mir irgendwie nicht ganz geheuer. Mir kommt es so vor, als> ob hier schon einiges Wissen vorrausgesetzt wird. Bei den AVRs ist alles> immer schön ausführlich beschrieben und damit komme ich meistens ganz> gut klar.>> @Peter:> Muß ich EA an VCC legen, damit der Prozessor überhaupt arbeitet? Im> Moment hängt der PIN in der Luft.>>> Sonnige Grüsse> Marcus
EA muß!! auf VCC sonst versucht er das Programm vom externen (nicht
vorhandenen) Speicher auszuführen.
Bei den Atmel C51ern mußt Du Dir die Datenblätter teilweise als
Fragmente zusammensetzen, wobei die Beschreibung der PINS im
Hauptdatenblatt relativ am Anfang gut beschrieben ist.
Dirk
Guten Morgen,
am Freitag hatte ich mal wieder Gelegenheit, mich mit dem 89S52 zu
beschäftigen.
Als erstes habe ich EA auf VCC gelegt und das Programm getestet. Leider
ohne Erfolg. Beim anlegen der Spannung leuchtet die LED mal heller, mal
dunkler oder gar nicht.
Als nächstes habe ich das Programm abgeändert:
Auch bei diesem Programm, hat die LED nicht immer zuverlässig, beim
einschalten, geleuchtet. Anstatt clr P0.0 habe ich auch setb P0.0
ausprobiert. Auch hier das selbe Problem: mal leuchtet die LED, mal
wieder nicht.
Langsam vermute ich das der Prozessor gar nicht arbeitet. Entweder
verrennt er sich irgendwohin (vielleicht falsch initialisiert? Stack?),
kein richtiger Reset (vielleicht falsch beschaltet mit 8k2 und 1µF?),
oder der Quarz schwingt nicht an. Wenn ich mit dem Tastkopf vom Oszi an
den Quarz gehe, messe ich nichts. Wenn ich mich recht entsinne, konnte
ich bei einem Mega16 den Quarz schwingen sehen.
Vielleicht hat jemand von euch noch eine Idee?
-Marcus
jack wrote:
> Laß doch den Stack in Ruhe. Wieso willst Du den auf 60h legen?
Was ist den daran falsch, den Stack zu setzen. Der steht nach Reset auf
07h, also nach Registerbank 0.
In seinem Beispiel ist es zwar egal, trotzdem setzt man den Stack auf ne
andere Adresse.
Zum Beispiel in den indirekt adressierbaren Bereich zwischen 80-FF
@Marcus
Mach vielleicht mal eine Skizze von Deinem Schaltplan und posten.
Dirk
Reseteingang ist beschaltet:
von GND ein 8k2 Widerstand auf Reset, von Reset ein 1µF Kondensator
gegen VCC
An XTAL1 und XTAL2 ist ein 12 MhZ Quarz mit zwei 33pF Kondensatoren
gegen Masse angeschlossen.
EA mittlerweile an VCC ;)
Der 89S52 ist auf einer SMD-Adapterplatine eingelötet (PLCC44 auf
Buchsenleisten). An Stifleisten ist die LED, der Quarz, der ISP-Stecker
und die Reset Beschaltung angeschlossen und auf den Sockel aufgesteckt.
Foto kann ich leider keines machen, da die Schaltung in der Firma liegt.
Marcus Göttler wrote:
> Reseteingang ist beschaltet:> von GND ein 8k2 Widerstand auf Reset, von Reset ein 1µF Kondensator> gegen VCC>> An XTAL1 und XTAL2 ist ein 12 MhZ Quarz mit zwei 33pF Kondensatoren> gegen Masse angeschlossen.>> EA mittlerweile an VCC ;)>> Der 89S52 ist auf einer SMD-Adapterplatine eingelötet (PLCC44 auf> Buchsenleisten). An Stifleisten ist die LED, der Quarz, der ISP-Stecker> und die Reset Beschaltung angeschlossen und auf den Sockel aufgesteckt.>> Foto kann ich leider keines machen, da die Schaltung in der Firma liegt.
Also ich bin von einem RC-Glied am Reset Eingang des AT89S52 nicht so
begeistert. Da gab es schon manche Probleme. Ich mach hier immer nen
kleinen
Reset IC von Micrel oder ETC ran.
Ganz wichtig. Du solltest den Reset Eingang vom Programmer kommen mit
einer
Diode zum Reset anschluss entkoppeln. Hast Du das gemacht ?
Dirk
Hallo Dirk,
nein, eine Diode habe ich keine drin. Die Schaltung ist so aufgebaut wie
oben gezeichnet. Nach erfolgter Programmierung habe ich in der
Atmelsoftware immer auf "Run target" geklickt, die Spannnung weggenommen
und den ISP Stecker abgezogen. Danach wieder Spannung dran.
Das mit den Problemen mit dem RC-Glied am Reset, könnte doch hier auch
durchaus sein, oder? Würde zumindest erklären, warum die LED mal
leuchtet und mal wieder nicht.
Ich zweifel langsam an mir selbst. So eine popelige Schaltung nebst
Programm und ich bekomms nicht hin.
hallo,
also beschalte deinen reset eingang mal rischtisch, dann funzt das
au!!!!
du hast da nen hochpass und da kann keine gleichspannung durch!!!!!
mach da mal nen tiefpass raus, dann klappts auch mit deinem nachbarn
atmel!!!
gruss fubu
fubu1000 wrote:
> hallo,> also beschalte deinen reset eingang mal rischtisch, dann funzt das> au!!!!> du hast da nen hochpass und da kann keine gleichspannung durch!!!!!> mach da mal nen tiefpass raus, dann klappts auch mit deinem nachbarn> atmel!!!>> gruss fubu
Quark mit Soße
Die Beschaltung grundsätzlich richtig. Der 89S52 hat nen highaktiven
Reset wie alle 51erKlone und der wird während Poweron und etwas länger
über den C auf High gezogen und fällt danach auf Low. Leider braucht der
52 aber ne bessere Resetbeschaltung, mit speziellen Resetbausteinen
welche eine definierte Flanke und ein ordentliches Brownoutverhalten
aufweisen. Sonst hängt er sich gerne auf.
hallo,
shame on me. wer lesen kann iss klar im vorteil!!!!
habe an atmega müll gedacht.
@winfried: gerade datenblatt angeschaut vom 89s52 und du hast recht!!!!
bitte um entschuldigung für meinen bes...... beitrag!!!
gruss fubu
Hallo,
häng die LED doch mal an einen anderen Portpin, P1 oder P3. Vielleicht
ist ja irgendwas mit dem Port nicht in Ordnung.
In solchen Fällen mache ich immer
label:
inc PortX
jmp label
da kann man jeden Port mit dem Oszi auf doppelte oder halbe frequenz
überprüfen.
Du schreibst in Deinem Programm:
delay:
mov 2,#16
delay_1:
mov 1,#144
delay_2:
djnz 1,delay_2
djnz 2,delay_1
versuch mal folgendes:
delay:
Mov r2,#16
delay_1:
mov r1,#144
delay_2:
djnz r1,delay_2
djnz r2,delay_1
Ich hatte mit der Atmel-Programmiersoftware auch oft Probleme, jedoch
beim AT89S53, solange beim brennen der Kondensator am Reseteingang dran
war. Versuchs mal ohne oder schalte noch einen Widerstand von einigen
100 Ohm dazu in Reihe. Der Programmieradapter schafft es möglicherweise
nicht, den Reset-Pin zeitnah auf H zu ziehen.
Eine deutlich bedienfreundlichere Programmiersoftware findest Du hier:
http://www.amwaw.edu.pl/~adybkows/elka/ispprog.html
Deinen Adapter kannst Du weiterverwenden, es können dort verschiedene
einstellt werden.
Gruß
Matthias
Sodele, mal wieder Neuigkeiten.
Ich Danke allen die mir versucht haben zu helfen.
Es lag, wie von Dirk vermutet, am Reseteingang. Geht aber nur wenn ich
in der Atmel Software auf "Run target" gehe. Sobald ich den ISP Stecker
abziehe, oder die Spannung einschalte hängt er sich auf. Der braucht
scheinbar wirklich ein extra Reset IC.
Komische Knilche, die 51er.