Guten Tag,
ich habe einen ATmega162, und wollte alle I/O Ports als Ausgang
deklarieren und auf high setzen (meine persönliche Art der
Funktionsprüfung). Habe, wie es sich gehört, alle DDRx-Register und alle
PORTx-Register auf high gesetzt (Nebenbei: JTAG habe ich abgeschaltet,
um diese Ports auch nutzen zu können).
Nun das Problem: Messe ich an den Ausgängen die Spannung mittels
Multimeter, zeigt mir das Messgerät 4,95V an. Schließe ich an einen
Ausgang eine LED (1.9V, 2mA) mit Vorwiderstand (R=1,5kΩ) an, sinkt die
Spannung auf ca. 1,8V ab. Dies ist aber nur bei den Ports PA, PB, PC und
PD so, der Port PE bleibt stabil.
Habe es auch mit einem anderen – auch ATmega162 – versucht. Bei ihm das
gleiche Problem. Mit einem ATmega16 habe ich es auch versucht. Der hat
zwar kein Port PE, aber ansonsten genau das Gleiche.
Die Versorgungsspannung bleibt stabil (Netzteil: 5V, 5A).
Der Sourcecode ist natürlich relativ simpel.
Woran liegt das und was muss ich machen?
Der mit den Bytes tanzt schrieb:
> Was sind !%$“§ Kompatibilitäts-Fuse und ...?
Sorry, da war ich gerade mit den Fingern schneller als mit dem
Datenblatt Lesen: Die Mega162 haben zwar eine '161-compatibility Fuse,
womit der extended-IO-Bereich dem RAM zugewiesen werden kann, aber die
ist von Hause aus unprogrammiert (anders als die 'berüchtigte'
'103er-Kompatibilität beim Mega64).
Die Schaltung, die einige von euch sehen wollen, ist auch ganz simpel.
Zur Erinnerung: Die LED-Schaltung, die ich anschließe, zieht ca. 2mA.
Ich schließe jeweils auch immer nur eine LED an. Zudem kann ein Ausgang,
laut Datenblatt Seite 264, jeweils 40mA liefern.
Ist das Teil auch mal nach dem Start resettet worden? So, wie der Reset
beschaltet ist, wird jedenfalls beim Anlegen der Betriebsspannung kein
Reset durchgeführt.
Ansonsten würde ich der (Über-)Korrektheit halber bei Ausgängen erst die
Ports auf einen definierten Startwert setzen und danach die Ports als
Ausgänge konfigurieren.
Ich habe was Wichtiges hinzuzufügen. Ich habe mittels des PUD-Bit
(SFIOR-Register) ALLE Pull-Ups abgeschaltet. Beim Messen an den Ports
lag dann nicht mehr das erhoffte Potential von ca. 5V an, sondern ca.
0,1V – also Low-Pegel. Ich habe den Source-Code so gelassen, wie vorher;
aber habe halt, wie gesagt, die Pull-Ups „gesondert“ abgeschaltet. Das
heißt, irgendwie funktioniert das mit dem Ausgang-Deklarieren nicht
(denke ich mal).
@Michael S. : Ja, ich resete – mittels Drahtbrücke – jedes Mal.
> bei Ausgängen erst die Ports auf einen definierten Startwert setzen
Wie geht dieses „auf definierten Startwert setzen“?
Michael S. schrieb:
> Ist das Teil auch mal nach dem Start resettet worden? So, wie der Reset> beschaltet ist, wird jedenfalls beim Anlegen der Betriebsspannung kein> Reset durchgeführt.
Doch, der Kondensator ist optional.
Nein, die Widerstände sind korrekt gewählt, die Platine hat auch keine
Kurzschlüsse usw. Ich habe den Strom, der durch die LEDs fließt, schon
zu Beginn gemessen. Beim Anlegen von 5V an die LED-Widerstand-Schaltung,
fließen ca. 2,16mA.