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
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
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.
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
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.
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
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
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?
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
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
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
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.
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.
Der Grund für den kleinen sind einfach Kosten, der kostet ca. 1 Euro und der AT89S8352 halt bissl über 2 Euro.
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.
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
@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.
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.