Hi! Zum Entwickeln von Mikrocontroller-Programmen (für Atmel 89C2051) verwende ich eine kleine Versuchsplatine, auf der sich unter anderem eine primitive Reset-Schaltung befindet. Die Reset-Schaltung besteht aus einem Kondensator auf +5 V (für einen Power-up Reset) und einem Pulldown Resistor (6,8 kOhm). Der Kondensator kann mit einem Taster überbrückt werden. Und jetzt kommt's: [b]Wenn ich während des Betriebs den Reset-Taster drücke, läuft das Programm fehlerfrei los. Nach dem Einschalten der Betriebsspannung allerdings wird eine Variable innerhalb des Prozesses nicht so initialisiert, wie es im Programm steht.[/b] Um auszuschließen, dass das Problem mit dem RC-Glied zusammenhängt, habe ich während des Power-ups den Reset-Taster gedrückt gehalten und erst ein paar Sekunden später losgelassen. Aber dennoch macht der µC nicht, was er sollte. Im Anhang der Schaltplan der Versuchsplatine. Ich habe keine Ahnung, warum sich der Mikrocontroller so seltsam verhält und freue mich über hilfreiche Tipps. mfg Christian
Ich würde auf einen Softwarefehler tippen. Dem 7805 solltest Du noch eingangsseitig einen 100nF spendieren. In Reihe zu RT sollte noch ein 100 Ohm, um die Funkenbildung zu vermeiden. Eventuell kann dieses ganze S1-3...S1-6 Geraffel den Quarz zu stark bedämpfen und er kommt schlecht auf die Hufe. Peter
Hallo Christian, ich hatte mit dem Reset bei den 89cxxxx-Controllern auch schon jede Menge Probleme. Wenn Du das Problem wirklich lösen willst, mißt Du am besten mal mit einem Digiscope das Verhalten der gesamten Schaltung beim Einschalten. Da treten nette Effeke auf, wenn der Oszillator noch nicht eingeschwungen ist und der µC schon seinen Reset hinter sich hat. Schau mal ins Datenblatt, wie lange der Takt vor dem Ende des Resets anliegen muß. Hast Du kein Digiscope zur Hand, hilft auf jedenfall ein Resetcontroller (ich habe oft den MAX811 oder 812 (weiß gerade nicht, welcher welche Reset-Polarität hatte) eingesetzt.) Problem ist, daß der Preis eines Resetcontrollers den des 89C2051 übersteigt. Na, aber Muster gibt es bei MAXIM ja für lau.... Gruß, Markus_8051
Es kommen hier immer wieder irgenwelche Gerüchte über einen schlecht funktionierenden Reset beim 89C2051. Ich hatte diese Probleme noch nie, obwohl ich immer nur einen 100nF Kondensator zwischen Vcc und Reset hänge. Falls es doch mal Probleme gab, dann lag es eigentlich immer an einem Fehler im Aufbau oder an einem Softwarefehler. Mit jeder normalen Stromversorgung sollte man es eigentlich hinbekommen, die Spannung schnell genug einzuschalten, damit der Quarz läuft. Wenn ich mal ganz faul bin, dann stecke ich den AT89C2051 in ein Steckbrett, einen 22,1184MHz Quarz daneben und den nächstbesten Kondensator (im Moment 330pF) zwischen Pin 1 und 20. Und es läuft (zumindest nachdem ich den Fehler in der Software behoben hatte...) Das einzige was man nicht machen darf, ist die Spannung in 10s von 0 auf 5V hochzudrehen.
@Benedikt: Das sind leider keine Gerüchte! Meine Mustergeräte und Prototypen liefen am Labornetzteil auch immer hervorragend. Von der Serienproduktion hatten wir jedoch etliche Rückläufer, da die Geräte "draußen" mit einem Steckernetzteil betrieben wurden. Zu den Steckbrettern: hier ist es so, daß man auf den Steckboards die Kondensatoren am Quarz oft weglassen kann, da die Kontaktschienen schon eine ausreichende Kapazität gegeneinander aufweisen. Na, soweit zu Theorie und Praxis... Markus_8051
@Markus_8051 Das mit dem Steckbrett war nur ein Beispiel. Ich habe mindestens 10 AT89C8051 im ganzen Haus im Einsatz, und hatte noch nie Probleme mit dem Reset. Und alle AT89C2051 laufen auch mit billigen Steckernetzteilen. Aber bei Seriengeräten ist das natürlich was anderes. Da werden dann meistens TL7705 und Co verwendet. Was ich damit sagen will: Der einfache Reset beim AT89C2051 kann sicher nicht mit der Brown out detection von ATtinys und ATmegas mithalten, aber so schlecht ist er auch wieder nicht, wie einige behaupten. PS: Den Pulldown/Up Widerstand am Reset braucht man nicht, alle neueren 8051er und AVRs haben Widerstände eingebaut.
@peter dannegger: Softwarefehler ist (kann ich zu 100 % sagen) keiner drin. Ich hatte nur ein kleines Versuchsprogramm geschrieben und wenn man den Controller mit einem C-Compiler programmiert, ist das Programm so übersichtlich, dass man einen Fehler auf den ersten Blick erkennt. Der 7805 ist nicht unbedingt optimal beschaltet, da stimme ich dir zu. Widerstand und Kondensator habe ich jetzt auf 68 kOhm / 100 nF abgeändert, da laut Datenblatt der Pulldown-Widerstand mindestens 50 kOhm haben muss (es leuchtet mir allerdings nicht ein, warum. Aber man kann sich ja trotzdem daran halten.). Die Lösung des Problems war schließlich die Einstellung der Schalter. Danke Peter, du hast mich darauf aufmerksam gemacht! Nach dem Kauf des Sets waren alle Schalter auf ON, und das ist natürlich fatal, denn EP1-5 und EP3-5 wirken bei angeschlossenem Flachbandkabel wie Antennen. Über die Einstellung der Schalter hatte ich mir bis jetzt keine großen Gedanken gemacht, das war natürlich ein Fehler :) . @Markus_8051, Benedikt: Für eine Anwendung, bei der die Betriebsspannung zwangsläufig nur langsam ansteigt (an die 2 Sekunden), habe ich mir eine 1A-Resetschaltung mit dem günstigen NE555 aufgebaut, und die Schaltung hat super funktioniert. Aber bei der Versuchsplatine eine solche Schaltung dazuzubauen, ist mir zu viel Aufwand (einerseits bestünde die Platine dann aus zwei Platinen und andererseits war die Reset-Schaltung zum Glück nicht das ursächliche Problem). Der Reset muss jedenfalls nur zwei Zyklen gehalten werden (entspricht 1 µs). Jedenfalls vielen Dank für eure Beiträge! Ihr habt mich auf den richtigen Weg gebracht! mfg Christian
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.