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?
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.
Hättest du sonst eventuell einen Codeauszug oder wurde eine bestimmte Peripherie aktiviert?
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.
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.
> 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.
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?!?
Was passiert denn wenn du als Ausgang konfigurierst und auf low schaltest?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.