Probleme mit Reset Pegel Atmel AT89S52

#1309510
Lesenswert?

Hallo,

ich habe ein Problem mit dem Atmel AT89S52 Controller. Ich habe eine 
bestehende Schaltung, in der urspünglich der AT89S8253 Controller 
eingesetzt wurde. Da die Software radikal gekürzt wurde, bin ich auf den 
pinkompatiblen kleinen Bruder AT89S52 umgestiegen.
Als erstes hatte ich Probleme mit der Detection meines Tasters. Der 
Portpin P1.1 lag dauerhaft über einen 10k Widerstand auf GND und wurde 
über den Taster direkt auf 5 Volt gezogen. Diese Schaltung funktionierte 
mit dem AT89S8253 einwandfrei. Bei manchen AT89S52 Exemplaren (nicht bei 
allen, bei einigen funktioniert es, bei anderen immerhin manchmal) wird 
zwar der 5 Volt Pegel erreicht, aber nicht der GND Pegel, sondern 
stattdessen ein zwischen Pegel von ca. 2,5 - 3 Volt. Kontaktiere ich den 
Pin mit der Messspitze des Oszis fällt der Pegel auf 0 Volt ab und der 
Controller erkennt auch den Pegelwechsel. Ich habe daraufhin den 
Widerstand verkleinert bis letzendlich auf 500 Ohm und selbst mit diesem 
kräftigen Pull Down blieb immer ein Restpegel von ungefähr 1 Volt. Hab 
dann den Port direkt auf GND gelegt und den Strom gemessen, es fließen 
kleine 15 mikro Ampere. Ist mir Rätselhaft wieso der Pin nicht 
runtergezogen wird.
Hab dann einfach nen Transistor dazwischengeklemmt und gedacht, ok 
komisches Phänomen aber mitm Transistor hart auf GND gezogen, des klappt 
schon.
Jetzt hatte ich heute eine Schaltung auf der der Controller nicht 
anlaufen wollte. Hab daraufhin den Resetpin Pegel beim Starten 
beobachtet und siehe da, ich hab ein ähnlcihes Phänomen entdeckt. Der 
Resetbaustein (Schaltung seht ihr im Anhang) zieht ordentlich den Pegel 
rauf auf 5 Volt, wartet ein bisschen und der Pegel wandert dann auf 2,5 
Volt (und nicht wie gewöhnlcih auf 0 Volt). Messe ich direkt am Ausgang 
des LM810 sehe ich wie erwartet 5 Volt und danach 0 Volt. Es scheint 
also, dass der Controller den Pegel oben halten will.
Nun bin ich total verwirrt, denn sowas hab ich noch nie gesehen. Die 
Resetbschaltung ist Standard, die hab ich schon ewig oft verwendet und 
auhc bei anderen Leuten gesehen.
Hat jemand eine Idee, was da los sein könnte, bzw. was ich machne könnt 
um der Sache auf den Grund zu kommen? Ich bin total ratlos.

Vielen Dank für Eure Ideen und Anregungen
Angehängte Dateien:
Persönliche Seite #1309614
Lesenswert?

Florian W. schrieb:

> Als erstes hatte ich Probleme mit der Detection meines Tasters. Der
> Portpin P1.1 lag dauerhaft über einen 10k Widerstand auf GND und wurde
> über den Taster direkt auf 5 Volt gezogen. Diese Schaltung funktionierte
> mit dem AT89S8253 einwandfrei. Bei manchen AT89S52 Exemplaren (nicht bei
> allen, bei einigen funktioniert es, bei anderen immerhin manchmal) wird
> zwar der 5 Volt Pegel erreicht, aber nicht der GND Pegel, sondern
> stattdessen ein zwischen Pegel von ca. 2,5 - 3 Volt. Kontaktiere ich den
> Pin mit der Messspitze des Oszis fällt der Pegel auf 0 Volt ab und der
> Controller erkennt auch den Pegelwechsel. Ich habe daraufhin den
> Widerstand verkleinert bis letzendlich auf 500 Ohm und selbst mit diesem
> kräftigen Pull Down blieb immer ein Restpegel von ungefähr 1 Volt. Hab
> dann den Port direkt auf GND gelegt und den Strom gemessen, es fließen
> kleine 15 mikro Ampere. Ist mir Rätselhaft wieso der Pin nicht
> runtergezogen wird.
Du hast einen Spannungsteiler mit internem Pullup und Deinem 10k 
Widerstand.
Bei 8051 sollte man einen Taster von Pin nach GND schalten, die Ports 
haben interne Pullups. Alles andere is nix.
Siehe:
http://www.atmel.com/dyn/resources/prod_documents/doc4316.pdf
Seite 74

> Jetzt hatte ich heute eine Schaltung auf der der Controller nicht
> anlaufen wollte. Hab daraufhin den Resetpin Pegel beim Starten
> beobachtet und siehe da, ich hab ein ähnlcihes Phänomen entdeckt. Der
> Resetbaustein (Schaltung seht ihr im Anhang) zieht ordentlich den Pegel
> rauf auf 5 Volt, wartet ein bisschen und der Pegel wandert dann auf 2,5
> Volt (und nicht wie gewöhnlcih auf 0 Volt). Messe ich direkt am Ausgang
> des LM810 sehe ich wie erwartet 5 Volt und danach 0 Volt. Es scheint
> also, dass der Controller den Pegel oben halten will.
> Nun bin ich total verwirrt, denn sowas hab ich noch nie gesehen. Die
> Resetbschaltung ist Standard, die hab ich schon ewig oft verwendet und
> auhc bei anderen Leuten gesehen.
> Hat jemand eine Idee, was da los sein könnte, bzw. was ich machne könnt
> um der Sache auf den Grund zu kommen? Ich bin total ratlos.
Ordentliche 5V Versorgung?
Ordentliche Masse, auch beim Messen.
Pin /EA auf 5V? Läuft denn das Programm?
...
> Vielen Dank für Eure Ideen und Anregungen
#1310102
Lesenswert?

Versorgung wird von nem Low Drop Festspannungsregler gemacht (5 Volt), 9 
Volt und Masse kommen entweder von Netzteil oder 9 Volt Block, ändert 
aber nichts am Verhalten.
Das Programm läuft an, sobald ich mit der Messspitze den Reset Pin 
berührt habe???
Die restliche Beschaltung des Controllers passt auf jeden Fall, da die 
selbe Schaltung bereits 10 mal mit dem AT89S8253 aufgebaut habe und 
immer zuverlässig läuft.
Gast #1310112
Lesenswert?

Hallo Florian,

was soll eigentlich die Diode D1 bewirken.
Meines Erachtens gehört sie nicht dahin, da sie einen regulären 
Stromfluss vom Reset-Pin nach GND verhindert und somit nur ein sehr 
geringer Sperrstrom fließen kann, der den Reset-Pin in einem mehr oder 
weniger undefinierten Zustand hält.

mfg

Lothar
Gast #1310549
Lesenswert?

Hallo Florian,

das mag sein, daß es 3 mal funktioniert hat. Aber es bedeutet noch lange 
nicht, daß die Schaltung deswegen richtig ist. Die Ports der Controller 
streuen jedenfalls in ihren Werten von Exemplar zu Exemplar und von Typ 
zu Typ. In Deinem Fall "sperrt" die Diode zu gut = sehr geringer 
Sperrstrom, wodurch der interne Pullup-Widerstand des Controller-Ports 
am Reset-Eingang nicht genügend Spannungsabfall erzeugt, um den Portpin 
wieder auf Low zu bringen. Dadurch bleibt der Controller im Dauerreset.
Entferne die Diode und es sollte funktionieren.

mfg

Lothar
Gast #1316122
Lesenswert?

Hallo Florian,

einen NPN Transistor kannst Du mit einem Standard 8051-Port nur sehr 
eingeschränkt ansteuern, da die Ports High-Side aufgrund ihrer Bauart 
nur einen geringen Strom sourcen können. Du müßtest dann noch einen 
externen Pullup-Widerstand (min. 330 Ohm) nach Vcc schalten. Um einen 
größeren Strom treiben zu können, ist es besser einen PNP-Transistor zu 
benutzen, da der Ausgangsport bei Low-Pegel mind. ca. 20 mA sinken kann.

Ein Datenblatt- bzw. Literaturstudium liefert hierzu nähere 
Erkenntnisse.

mfg

Lothar
#1316177
Lesenswert?

Florian W. schrieb:
> Als erstes hatte ich Probleme mit der Detection meines Tasters. Der
> Portpin P1.1 lag dauerhaft über einen 10k Widerstand auf GND und wurde
> über den Taster direkt auf 5 Volt gezogen. Diese Schaltung funktionierte
> mit dem AT89S8253 einwandfrei.

Das kann garnicht funktionieren, warscheinlich hast Du 1k Widerstände 
benutzt.

Die 8051 haben 3 Pullup-Transistoren:
Der starke (~5mA) ist bei einem Ausgangswechsel von 0-1 für 2 Takte 
aktiv.
Der mittlere (~0,5mA) ist bei einem offenen High-Pin aktiv.
Der schwache (~50µA) ist bei einem High-Pin aktiv, der extern auf low 
gezogen wird.

Der Pulldown muß also sicher den mittleren auf Low ziehen. Daher ist 10k 
völlig unbrauchbar, 1k sollte gerade so gehen.

99,99% der 8051-Programmierer schalten deshalb Tasten nach GND ohne nen 
externen Widerstand.


> Jetzt hatte ich heute eine Schaltung auf der der Controller nicht
> anlaufen wollte.

Könnte sein, daß der Quarz schlecht anschwingt. Welche Frequenz und 
welche Kondis hast Du denn genommen?

20ms Anschwingzeit ist aber normal. Der Reset-IC sollte daher >50ms 
Resetpuls erzeugen.
Ich benutze den MAX813L (200ms).

Du kannst mit dem Signal vom Reset-IC triggern und dann aufm Oszi sehen, 
wann an ALE die Frequenz stabil ist (nicht am Quarz antasten).


Peter
#1327656
Lesenswert?

Hallo,

entschuldigt bitte, dass ich so lange nicht geantwortet habe, ich war 
ausser Haus.
Zuersteinmal vielen Dank an alle, die sich so viele Gedanken gemacht 
haben :-)
Nun zu den Themen. Im Anhang ist meine ursprüngliche Schaltung, wie sie 
mit dem AT89S8253 funktioniert.
Nach der Umstellung auf den kleineren AT89S52 gab es folgende Effekte:
1) Der Pegel vom Button wurde nicht mehr detektiert. Ich habe daraufhin 
die Transistorschaltung (im Bild rot Änderung) dazwischengehängt, Fall 
erledigt.(dachte ich)
2) Daraufhin habe ich weitere Schaltungen aufgebaut. Dann kam der 
Effekt, dass der Reset nicht sauber auf GND gezogen wurde von LM 810, 
ich habe daraufhin die Diode gebrückt, dann funktionierte auch das. 
Jedoch benötige ich diese Diode (oder eine andere Schaltung), denn der 
COntroller soll ISP Programmierbar sein. Ich muss also den LM810 von 
Resetbin entkoppeln, damit ich den Reset extern ausführen kann.
@Peter: Ich benutze 18pF Kondensatoren. Die Arbeitsfrequenz des Quarzes 
ist 16 MHz. Wenn die Diode zwischen LM810 und Reset ist, kann ich an ALE 
nur einen konstanten High Pegel messen. Wird die Diode gebrückt sehe ich 
den Takt ab dem Zeitpunkt an welchem der Resetpin von High nach Low 
gezogen wird. Kann man den Takt am ALE Pin messen, wenn kein Reset 
durchgeführt wurde oder schaltet der Controller erst nach erfolgreichem 
Reset den Takt durch?
3) Ein Exemplar schaltete sich direkt nach Loslassen des Tasters wieder 
aus. Ich habe daraufhin die Pegel nachgemessen. Transistor T3 schaltete 
nicht, daraufhin schaltete die Hold Schaltung ab.

Im Prinzip kann ich einfach den NPN aus der HoldSchaltung gegen einen 
PNP austauschen, dann bleibt mir nur noch das Problem mit dem Reset.
Vielen Dank schonmal für die kommenden Anregungen.
MfG Florian
Angehängte Dateien:
Gast #1327718
Lesenswert?

AT89S8253 hat internen Power-On-Reset. Benötigt also keinen externen 
Reset-Baustein. AT89S52 ist veraltet, diesem fehlt diese wichtige 
Funktion. Bleibt die Frage, warum Du downgraten willst, 
Preisunterschiede sind gering. EMV-mässig ist der AT89S8253 auch besser. 
Würde ich in einem kommerziellen Produkt auf jedem Fall vorziehen.

Zu Deinen Fragen:
Für T5 einen n-Kanal MOSFET nehmen (2N7000 etc.) oder der 
Transistorvariante einen zusätzlichen Pullup-Widerstand (5-10k) vom 
Portpin zu VCC geben.

Am RST-Pin einen Pulldown-Widerstand in gleicher Größenordnung vorsehen 
und die Diode ggf. durch einen Schottky ersetzen.
Gast #1328083
Lesenswert?

Dafür brauste den LM810 eigentlich nicht. Der ist nicht gerade billig. 
Vermutlich war in der Schaltung mal der Vorgänger AT89S8252 drin, der 
noch keinen internen Power-On-Reset hatte. Da machte der externe 
Reset-IC sinn.
Gast #1328095
Lesenswert?

Wenn du unbedingt den Reset entkoppeln willst, wie wärs dann mit dem 
MAX812, der hat einen highaktiven Resetausgang, und einen lowaktiven 
Eingang für einen Taster, der dann ebenfalls den Reset auslösen kann.
Wenn du den LM810 unbedingt behalten willst, dann halt zwei Dioden und 
einen Pull-Down-Widerstand dazu.

BTW: Dein Symbol für den µC ist erstens komisch gezeichnet und zweitens 
ist der Reset highaktiv, dein Resetpin zeigt aber lowaktiv :)
Von wo her hast du das Symbol?

Ralf
Gast #1328159
Lesenswert?

> Wie müsste ich das verschalten?
Aaaaalso... Ich geh jetzt von zwei Reset-Quellen aus. Einmal dein LM810, 
und dein ISP-Tool. Beides highaktiv, push-pull.

Quelle 1 ---|>|--
                +-----+---Reset-Eingang
Quelle 2 ---|>|--     |
                      -
                     | | Pull-Down
                      -
                      |
                     GND

Auf diese Weise sind beide Quelle gegeneinander entkoppelt, nur die 
High-Zustände werden durch die Dioden durchgelassen, der Low-Zustand der 
Quellen kommt nicht durch, wird aber durch den Pull-Down-Widerstand 
gemacht.

> Kann mir das gerade nicht vorstellen.
Klappts jetzt? :)

Ralf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren