Forum: Mikrocontroller und Digitale Elektronik Atmega64C Output Pin wird nicht high


von Rene Strophff (Gast)


Lesenswert?

Grüße!

Ich habe hier einen seltsamen Effekt, der mich ein wenig irritiert:

An 2 Portpins eines Atmega sind jeweils eine LED über einem MOSFET 
angeschlossen. Wenn ich beide Pins per DDRx als Ausgang konfiguriere und 
per PORTx auf high schalte, leuchtet nur eine der beiden LEDs. Die 
andere bleibt dunkel.
Nach ein Probieren habe ich festgestellt, dass sich auch die zweite LED 
beleben lässt, wenn ich den Pin per DDRx als eingang konfiguriere. Das 
war mir erst etwas rätselhaft, bis ich im Datenblatt gelesen habe, dass 
bei einem Eingang über PORTx ein Pullup zugeschaltet wird. Das erklärt, 
wo die Spannung herkommt, der den MOSFET durchschaltet.
Nur: Warum klappt das nicht, wenn der Pin als Ausgang konfiguriert ist?
Ich würde zunächst annehmen, dass auch dabei genug Spannung am Ausgang 
steht, um den Mosfet zum durchschalten zu bewegen. Aber tatsächlich 
misst sich da mal so gar keine Spannung.

Vorschläge und/oder Erklärungen für dieses Problem?

von Felix A. (madifaxle)


Lesenswert?

Da du nicht die Pins genannt hast, bleibt nur zu vermuten, dass 
eventuell JTAG per Fuse aktiviert ist und einer der Pins ein JTAG-Signal 
führt.

von Felix A. (madifaxle)


Lesenswert?

Hättest du sonst eventuell einen Codeauszug oder wurde eine bestimmte 
Peripherie aktiviert?

von Rene Strophff (Gast)


Lesenswert?

Der Controller verfügt über kein JTAG. Es sind Pins 2 und 3 von PortD.
Sie doppeln sich allerdings mit dem In System Programmer. Allerdings 
debugge ich gerade per DebugWire und es sind auch nur der Reset Pin und 
Ground mit meinem Dragon hier verbunden. Die rumzickenden Pins sind 
nicht mit dem Dragon verbunden und sind auch sonst an nichts außer die 
Mosfets (und einen 10k Widerstand gen Ground) verbunden.

von Rene Strophff (Gast)


Angehängte Dateien:

Lesenswert?

Den Code habe ich mittlerweile auf

DDRD = 0xff;
PORTD = 0xff;

-> die eine LED bleibt dunkel

DDRD = 0x00;
PORTD = 0xff;
-> die LED leuchtet

reduziert.

Keine weitere Peipherie aktiviert. Außer Mosfet auch keine weitere 
Beschaltung.
Ich habe mal einen Ausschnitt aus dem Schaltplan angehängt.

von uwe (Gast)


Lesenswert?

> Der Controller verfügt über kein JTAG.
Klar hat der JTAG auf PF4-PF7 und der ist standardmäßig aktiviert also 
PF4, PF5 und PF7 sind immer Input bis du die JTAG Fuse deaktiviers.
Aber da du von Port D sprichst kann das nich sein (ich würde mir das 
aber trotzdem merken weil du ja warscheinlich auch später an Port F was 
dranbasteln möchtest). Quelltext zeigen.

von Felix A. (madifaxle)


Lesenswert?

Also wenn das mit DDRD = 0xFF und danach PORTD = 0xFF nicht geht, stimmt 
wirklich was mit dem Pin nicht ...

Probiere mal, ob du mit dem OC (PWM oder toggeln) die LED beeinflusst 
bekommst. Ich kann mir das zwar nicht vorstellen, aber man lernt ja nie 
aus.

von Rene Strophff (Gast)


Lesenswert?

uwe schrieb:
> Klar hat der JTAG auf PF4-PF7 und der ist standardmäßig aktiviert also
> PF4, PF5 und PF7 sind immer Input bis du die JTAG Fuse deaktiviers.

Ist kein Atmega64, sondern ein Atmega64C1. Eine Volltextsuche übers 
Datenblatt nach JTAG ergab 0 Treffer.


Ich habe hier zwei Boards mit identischem Aufbau. Der Effekt zeigt sich 
bei beiden. Wäre das nicht der Fall würde ich es auf einen defekten Pin 
schieben, abhaken und mit dem Funktionierenden weiterarbeiten.
Theoretisch könnte ich es auch einfach dabei belassen, den Port als 
Eingang zu konfigurieren und dann über Zu- und Abschalten des Pullups zu 
arbeiten. Ich würde mich aber nicht wohlfühlen, wenn sowas seinen Weg in 
eine Produktionsversion findet.

von Felix A. (madifaxle)


Lesenswert?

Ich finde im Datenblatt unter Punkt 9.3.4 eine Übersicht, unter welchen 
Bedingungen der Pin 0 ist. trifft da eventuell eine Kombi auf dein 
Programm oder den Controller zu, indem bestimmte Bits NICHT gesetzt 
wurden?

Beispiel: wenn DDOV (Pin Direction Override) gesetzt ist, ist der Pin 
automagisch Eingang oder so?!?

von BunterKulli (Gast)


Lesenswert?

Was passiert denn wenn du als Ausgang konfigurierst und auf low 
schaltest?

von Felix A. (madifaxle)


Lesenswert?

Mit dem ATmega32C1 gibt es laut Errata bis Rev. B das Problem, dass die 
vier Leitungen PD0..3 ein Problem aufweisen. Das müsste auch in deinem 
Datenblatt stehen.

Zum ATmega64C steht da nichts, aber vielleicht hast du da einen 
generellen Fehler gefunden. Eine Kontaktaufnahme mit Atmel könnte hier 
Klarheit bringen.

: Bearbeitet durch User
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.