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?
Schalte mal direkt über die Versorgungsspannungspins der Chips jeweils einen 100nF Kondensator. Hängt der Quarzausgang am richtigen Eingang des AT89S52? Kai Klaas
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 ;)
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.
Da es nicht so aussieht, als hättest Du ext. Programmspeicher, würde ich mal /EA auf High legen.
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.
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.
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
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.
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.