Forum: Mikrocontroller und Digitale Elektronik problem mit oszillator und at89s52


von Sven G. (glitch)


Angehängte Dateien:

Lesenswert?

hallo,

habe heute meine erste steckboard-schaltung mit nem 8052er von atmel 
aufgebaut. es ist ein at89s52 und ich nutze einen quarzoszillator mit 
2.4756 mhz um ihn zu betreiben -zumindest versuche ich das :-(.
die schaltung soll im prinzip nur eine testschaltung sein, um mit der 
mcu vertraut zu werden und nebenbei ein paar led´s anzusteuern.
aber leider funktioniert es nicht:

die cpu arbeitet irgentwie nicht. bei stromzufuhr sollte nach einem 
kurzen reset z.b. port 1 komplett auf high liegen. passiert aber nicht.
ich habe die mcu mit nem leaper-48 programmiert, er zeigte mir auch an, 
das alles korrekt lief. vorher hab ich das kompilierte programm(intel 
hex) und die gesamte schaltung auch in proteus simuliert -ging auch 
alles einwandfrei.

der oszillator scheint bei stromzufuhr korrekt zu arbeiten, wenn ich mit 
dem multimeter die frequenz messe- stimmt sie exakt.
wenn ich dann allerdings den ausganz des oszillators mit xtal1 der mcu 
verbinde, geht die frequenz auf ca. 3.9 mhz hoch und bleibt so mit 
schwankungen in der 3. nachkommastelle. xtal2, ale und psen hab ich wie 
alle ports nicht beschaltet. einzige ausnahme ist p1.2, für eine 
test-led ansteuerung. beschaltet sind: vcc, gnd, ea, rst, xatl1

weis jemand, was ich da falsch gemacht habe?

von master.andre (Gast)


Lesenswert?

Hallo Sven,
hast du nen Pulldown am Reset-Port ?

Gruß Andre

von Kai Klaas (Gast)


Lesenswert?

Schalte mal direkt über die Versorgungsspannungspins der Chips jeweils 
einen 100nF Kondensator.

Hängt der Quarzausgang am richtigen Eingang des AT89S52?

Kai Klaas

von Flo (Gast)


Lesenswert?

würde mal den erwähnten Pulldown-Widerstand reinbauen.

Dann am besten die Leitungen für den Takt kürzer machen,
kannst ja den Quarz rechts vom Prozessor stecken, und dann die 
KAbellänge minimieren.
Sind ja immerhin 2,5 MHz, die du einigermaßen sauber durch die LEitung 
schicken willst ;)

von Sven G. (glitch)


Lesenswert?

hab alle 3 tips probiert -geht immernoch nicht.

1. hab parallel zum vcc der mcu einen 100nF kondensator geschaltet
2. hab einen 10k pulldown am reset-taster angeschlossen
3. hab das signalkabel des oszi zu xtal1 extrem verkürzt -ist jetzt ca 
1cm lang

wenn ich die schaltung unter strom setze, reagiert die mcu nicht. 
versorgungsspannung ist exakt 5v (5.00), aber auf den ports, die mit 
masse verbunden sind, liegen ca. 0.005v-0.007v an. k.a. ob das was 
ausmacht.
beim brennvorgang des mcu-speichers hat mein programmiergerät alle nicht 
benutzten speicherzellen mit 0xffh ausgefüllt. könnte es daran liegen, 
ich meine könnten da nicht irgentwelche spezial-konfig register mit 
falschen werten bezüglich takt oder rest-verhalten initialisiert werden?

wenn ich den takt messe, der an xtal1 anliegt, sind es jetzt sogar ca. 
4.9mhz. keine ahnung, warum er so hoch geht.

von Kai Klaas (Gast)


Lesenswert?

Du hast ja gar keinen Power-On-Reset, oder?

Kai Klaas

von Robert W. (rweber)


Lesenswert?

Da es nicht so aussieht, als hättest Du ext. Programmspeicher, würde ich 
mal /EA auf High legen.

von Icke (Gast)


Lesenswert?

Das Foto ist etwas undeutlich, aber sieht für mich so aus, als hättest 
du am Oszillator die Anschlüsse vertauscht. So gehörts richtig:

1 - unbelegt (gehört kein Vcc ran)
7 - GND
8 - Takt
14 - Vcc

Die fehlenden Stützkondensatoren wurden ja schon bemängelt.

von Sven G. (glitch)


Lesenswert?

also EA hab ich auf high.
wegen dem oszillator und der beschaltung war ich nicht sicher.
zu pin 1 stand in meinem datenblatt "NC/ENABLE".
zuerst hatte ich den nicht beschaltet  -kein signal
dann auf masse -kein signal
dann auf 5v -takt wurde generiert.

dann hatte ich es halt so gelassen. der oszillator war von konrad,
katalognummer: 158097.

von Kai Klaas (Gast)


Lesenswert?

Auf die Gefahr, daß ich dich mit meiner Frage langweile:

>Du hast ja gar keinen Power-On-Reset, oder?

Für den Anfang reicht eine RC-Schaltung. Später solltest du aber einen 
guten Reset-Controller verwenden.

Kai Klaas

von Icke (Gast)


Lesenswert?

Klarer Fall, im zugehörigen Datenblatt bei Conrad ist die Pinbelegung 
falsch eingezeichnet. Pin 1 ist an der Ecke, die als einzige 
rechtwinklig (nicht rund) aussieht. Von oben gesehen, da wo ein Punkt 
aufgedruckt ist.

von Sven G. (glitch)


Lesenswert?

jetzt funktionierts! es lag tatsächlich an der falschen beschaltung des 
oszillators. echt zum kotzen, wenn datenblätter nicht stimmen, der oszi 
hätte ja auch kaputt gehen können.

zum power on reset: ich hatte es bis jetzt nicht eingebaut, die 
schaltung geht zum glück auch so. allerdings wäre das für die zunkunft 
gut zu wissen, wie ich das am besten mache/was da die beste lösung 
darstellt. gibt es da einen speziellen baustein, der so ein signal (egal 
ob vcc oder gnd) für gewisse zeit generiert?

von Kai Klaas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Sven,

>gibt es da einen speziellen baustein, der so ein signal (egal
>ob vcc oder gnd) für gewisse zeit generiert?

Oh ja, da gibt es ein ganze Industrie, die diese Dinger herstellt. Oft 
sind diese Chips sogar teurer als der Mikrocontroller selbst, aber 
absolut wichtig für Mikrocontroller mit Flash-Code-Memory, da diese bei 
unsauberen Reset-Zuständen mit Datenverlust reagieren können. ATMEL 
selbst handelt das Thema mit ein einigen interessanten Application Notes 
ab: Wann immer die Versorgungsspannung des Mikrocontroller unter den 
Nominalwert fällt, muß ein stabiler Reset generiert werden!

Für den AT89S52 verwende ich gerne eine Schaltung wie im Anhang. Der 
MAX1232 enthält einen eigenen Watchdog, den ich mit P1.4 füttere. Der 
Stecker links und der Jumper am Reset-Eingang des AT89S52 dienen der 
ISP-Programmierung. Die Pull-ups am Reset-Eingang sollen dafür sorgen, 
daß auch bei ganz niedrigen Versorgungsspannungen ein zuverlässiges 
Reset-Signal erzeugt wird, in einem Bereich also, in dem der MAX1232 ein 
High-Signal nicht mehr selbst erzeugen kann.

Die gezeigte Schaltung funktioniert seit Jahren absolut zuverlässig. 
Allerdings gibt es heute Chips, die das Ganze mit geringerem Aufwand 
ermöglichen. Ein Watchdog besitzt der AT89S52 ja selbst...

Kai Klaas

von Sven G. (glitch)


Lesenswert?

ok, danke für die schaltung. aber geht das nicht irgentwie einfacher? 
ich brauche ja nur für ca. 500ms-1s ein high-signal -danach nichts mehr. 
zusätzliche porzessorpins kann ich auch nicht entbehren(nicht in dieser 
schaltung, aber in meiner eigentlichen die ich bauen möchte). das 
problem mit dem verlorengehen des cpu-flash inhalts kann ich ignorieren, 
da in meiner eigentlichen schaltung der code entweder von einem externen 
eeprom ausgeführt wird, oder von einem externen speichermedium geladen 
werden soll.
schön wäre natürlich, wenn es einen baustein gäbe, der ohne grosse 
zusätzliche beschaltung alles löst.

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.