PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega 168 schaltet Pin immer high



the_Ghost666
18.05.2008, 20:32
Moin zusammen.
Mein erstes größeres Projekt mit einem Atmega ist jetzt in der Elektronik fertig, sodass ich die Software testen wollte.
Ich nutze den GCC-Compiler und habe ein StandardLCD im 4-bit Modus. An Pin PD0 (Pin Nr.2) liegt ein BC818 NPN Transistor, der über einen Basisvorwiderstand die Hintergrundbeleuchtung gegen Masse schalten soll, um sie an und abzuschalten.
Ich hab nun eine bereits komplexere Software geschrieben, aber erstmal alles auskommentiert, die Main besteht nur aus den Befehlen
DDRD |= (1<<DDD0);
PORTD &= ~(1<<PD0);
while(1);
welche dien Transistor ausschalten sollten.
Ist der Controller nicht programmiert, so bleibt die Beleuchtung aus. Aber wenn ich das Programm rüberlade, bleibt die Beleuchtung an. Selbst wenn ich die Main komplett leere, bleibt das Licht an!
Ausserdem wird der Controller nach einiger Zeit handwarm, das Display zieht 230mA, was für den Transistor mit 800mA Dauerstrom in Ordnung ist, aber dann sollte sich doch nicht der Controller im Sockel (PDIP28) erwärmen!
Das ganze läuft über den internen 8Mhz Takt.

McJenso
18.05.2008, 20:53
Hallo,

das ist ein Hardwareproblem. Bitte prüfe in deiner Schaltung alle Anschlüsse, insbesondere die Gnd und Versorgung. Was ist mit dem ISP, während der Controller warm wird? Angesteckt, abgesteckt, egal? Wie sieht die Versorgung aus?

Wie jetzt? Das Display zieht 230 mA. Die Hintergrundbeleuchtung? Das komplette Display? Der Schaltplan muss her.

Gruß

Jens

Besserwessi
18.05.2008, 21:14
Die tatsache, das die LEDs im Resetzustand aus sind, spricht schon mal dafür, das da kein so großes Hardware Problem da ist. Der Controller sollte aber wirklich nicht warm werden. Bei 5 V 8 MHz sollte der nur etwa 8 mA Aufnehmen und 40 mW sind nicht viel.
Könnte ein Problem mit der Masse sein, sonst sollte ein Pin der eigentlich low ist keinen Transistor treiben können.

the_Ghost666
18.05.2008, 23:24
Das mit dem Hardwareproblem seh ich ähnlich, ohne Programm läuft die Beleuchtug nicht, danach immer. Ich habe auch einen zweiten Mega168 eingebaut, gleiches Problem. Ich dachte kurzfristig auch das Problem gelöst zu haben, hab die Schleife mit einem Toggle gefüllt, und das Display wurde dunkler, bin aber wohl scheinbar nur an den Drehregler der Spannung gekommen, worauf die nurnoch 3,6V war und entsprechend dunkler.
Die 230mA zieht die komplette Schaltung, welche momentan nur aus einem Controller, dem Display, 4 Taster und nem Spannungsteiler für den Displaykontrast besteht. Ohne Programm, und damit mit abgeschalteter Displaybeleuchtung, zieht die Schaltung 10-20mA.
Normalweise sind doch alle Pins inputs, oder?

the_Ghost666
18.05.2008, 23:44
Die PinchangeInterrupts haben keine Auswirkung oder? D.h. dass dadurch die Dinger auf Input mit Pullups stehen. Ich habe für die Tasten an PortC die PinchangeInterrupts freigeschaltet und in PCICR das Bit PCIE gesetzt. Allerdings nichts direkt auf PortD.
Die andere Doppelbelegung wäre nur das USART, welches standardmäßig aus ist. Ich habe es dennoch mal probiert TXEN0 und RXEN0 zu löschen. Keine Verbesserung. Laut Simulator sollte es auch gehen. Das Oszilloskop sagt definitiv konstante High-Pegel. Und den Transistor hab ich mal durchgemessen, der dürfte in Ordnung sein. Ebenso der Kontakt vom Pin zu benachbarten. Es liegt Massefläche drumherum, sodass selbst bei einer Brücke nichts passieren sollte.. das warm werden kann ja nur an nem Stromfluss liegen, der Thermische Widerstand zwischen Platine und Gehäuse sollte zu groß sein. Dh irgendwo liefert ein Pin dauerhaft Strom gegen Masse.. ich werde nochmal die Leitungen ums Display prüfen. Wie sieht das mit der Analogen Referenzspannung aus? Ich brauchte die nicht, hab sie aber nicht auf Masse gezogen, sondern frei hängen lassen. Jetzt fällt mir auf, dass ichs wohl besser auf Masse gelegt haben sollte.

the_Ghost666
21.05.2008, 00:53
Ich hab die Schaltung nochmal genauer betrachtet... ein Pin hat einen Masseschluss gehabt (Lötzinnspritzer zwischen Pin und 5V) und demnach immer dann, wenn der Datenpin auf Low ging immense Ströme gesinkt. Mit voller Beleuchtung nimmt die Schaltung auch nurnoch 150mA auf. Dh. Knapp 80mA wurden über die Pins gegen Masse geschaltet, kein Wunder, dass es Warm wurde.
Das Problem mit dem Schalten lag auch nciht an der Software, sondern daran, dass AVR Studio das letzte Hex-File in der Programmiermaske behält, unabhängig vom Projekt... das Hex-File hieß richtig, stammte aber aus dem falschen Ordner, veränderte sich also nie..
Das Display lässt sich initialisieren, das Zeichen schreiben will aber noch nicht. Ich mess nochmal den Pin mit dem Masseschluss durch.

Und Bingo, das Display lässt sich ansteuern. Der Controller und das Display bleiben angenehm warm (also kaum), das Display zu initialisieren klappt nun nach jedem Reset.