Atmega64C Output Pin wird nicht high

Gast #4372046
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?
Gast
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.
Gast
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.
Angehängte Dateien:
Gast
> 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.
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.
Gast
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.
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?!?
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.