Forum: Mikrocontroller und Digitale Elektronik Probleme mit Reset Pegel Atmel AT89S52


von Florian W. (duensch)


Angehängte Dateien:

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

von E. B. (roquema) Benutzerseite


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

von Florian W. (duensch)


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.

von schudi (Gast)


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

von Florian W. (duensch)


Lesenswert?

Mit der Diode erreiche ich, dass ich den Controller ISP programmieren 
kann und der Galep Programmer den Reset handeln kann, ohne dass der 
LM810 Schaden nimmt.
Habe ich in der Form bereit in 3 Schaltungen erfolgreich eingesetzt und 
hat bisher keine Probleme gemacht.

von schudi (Gast)


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

von Florian W. (duensch)


Lesenswert?

Hallo Lothar,

ja das werde ich auf jeden Fall versuchen. Wie muss ich den Controller 
dann mit dem LM 810 verschalten um ihn dennoch ISP programmieren zu 
können?

Vielen Dank für ne gute Idee ;-)

Mfg Florian

von Florian W. (duensch)


Lesenswert?

Also mittlerweile bin ich eigentlich echt davon überzeugt, dass die 
Charge Controller nen Knacks weghat. Jetzt hab ich hier ein Exemplar, 
des es netmal packt nen Transistor BC849 über nen 10k Widerstand 
anzusteuern.
Des kann doch iwie kein generelles Problem sein oder?

von Ralf (Gast)


Lesenswert?

Kannst du mal die gesamte Schaltung posten?

Ralf

von schudi (Gast)


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

von Peter D. (peda)


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

von Florian W. (duensch)


Angehängte Dateien:

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

von Florian W. (duensch)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

mit dem Quarz hab ich grad n Scheiss erzählt. Der Quarz hängt gar net 
direkt am u-C sondern an einem Transceiver. Der Clock wird einfach beim 
u-C eingekoppelt.

von Matthias (Gast)


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.

von Florian W. (duensch)


Lesenswert?

Der Grund für den kleinen sind einfach Kosten, der kostet ca. 1 Euro und 
der AT89S8352 halt bissl über 2 Euro.

von Matthias (Gast)


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.

von Ralf (Gast)


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

von Florian W. (duensch)


Lesenswert?

@Ralf: Das Symbol ist selbst gemalt. Ja sieht jetzt net super aus aber 
erüllt seinen Zweck.
Wie meinst des mit 2 Dioden und Widerstand? Wie müsste ich das 
verschalten? Kann mir das gerade nicht vorstellen.
Vielen Dank.

von Ralf (Gast)


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

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.