Forum: Mikrocontroller und Digitale Elektronik Atmega16 Ausgang verhält sich merkwürdig


von Pascal T. (Gast)


Lesenswert?

Hey Profis,

habe einen Atmega16 und daran eine ganz normale LED mit Widerstand 
angeschlossen. Wenn ich jetzt ein Programm laufen lasse geht die LED 
(meiner Meinung nach einen Schritt zu früh) an, allerdings danach sofort 
wieder aus - obwohl das Programm durch eine Endlosschleife ewig läuft.
1
LDI r16,  0xFF
2
OUT DDRA, r16
3
4
LDI r16,   0xFF     ; hier geht die LED an
5
OUT PORTA, r16      ; LED bleibt an
6
7
endlos: jmp endlos  ; LED geht aus

Das ist doch ganz und gar nicht normal, oder?
Hoffe ihr könnt mir weiterhelfen :)

lg e3onjz

von spess53 (Gast)


Lesenswert?

Hi

>Das ist doch ganz und gar nicht normal, oder?
>Hoffe ihr könnt mir weiterhelfen :)

Kommt darauf an, wie die LED angeschlossen ist und der REst vom Programm 
aussieht.

MfG Spess

von c-hater (Gast)


Lesenswert?

Jochen X. schrieb:

> LDI r16,   0xFF     ; hier geht die LED an

Entweder gibt es noch eine ISR oder eine relevante Außenbeschaltung, die 
du nicht mitgeposted hast oder du bist ein Troll.

Ich tippe auf letzteres.

von Sebastian R. (sepp1985)


Lesenswert?

Wenn du im Sink Betrieb arbeitest, leuchten die led's, sobald du dein 
DDR geladen hast.
Zu dem Zeitpunkt sind die Ports ja low. Sobald du die Ports setzt hast 
du auf beiden Seiten das gleiche Potenzial und die Led geht aus.

Ist jetzt nur ne Vermutung. Ohne Schaltplan und komplettes Programm 
können wir nur vermuten.


MfG
Sebastian

von Pascal T. (Gast)


Lesenswert?

Hey, vielen Dank für eure Antworten!!

Ne, Interrupts oder sonstige Schaltungen sind nicht verbaut!

Ein JTAG wurde hiernach http://www.rn-wissen.de/index.php/JTAG#Anschluss 
angeschlossen, ein Widerstand zwischen Reset und +, und ein Kondensator 
zwischen + und -.
Und natürlich auch die LED...

Ich versuche mal noch einen Schaltplan zu zeichen.

Was meinst du mit "Sink-Modus"?

von Markus (Gast)


Lesenswert?


von Pascal T. (Gast)


Lesenswert?

Es funktioniert! :)

Aber ich bin trotzdem noch verwirrt, - ich hatte meine LED so 
angeschlossen wie hier beschrieben ist: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen.

Wenn ich sie jetzt aber andersrum, in der Grafik von Markus als "Current 
Source" beschrieben, einbaue, funktionierts...

Wieso wurde dort dann der andere Weg beschrieben, mit genau dem gleichen 
Programm wie ich hatte?

Auf jedenfall vielen Dank euch! Jetzt kann ich mein Feierabendbier 
genießen ;)

P.S. Gibt es hier etwas wie "Thema gelöst?"

von Markus (Gast)


Lesenswert?

Jochen X. schrieb:
> Wieso wurde dort dann der andere Weg beschrieben, mit genau dem gleichen
> Programm wie ich hatte?

Was soll wo nicht stimmen?

Dein Programm entspricht ja nicht genau deinem verlinkten Beispiel
http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Assembler-Sourcecode

von Pascal T. (Gast)


Lesenswert?

Ich hatte die Schaltung zum Anschlus der LED genau wie dort beschrieben 
aufgebaut und das selbe Programm wie dort verwendet, nur halt mit 
anderen Ports.

Und ich musste jetzt, damits funktioniert die LED umdrehen und anstatt 
von +, zu - führen...

von Markus (Gast)


Lesenswert?

Dort steht aber
1
ldi r16, 0b11111100 ; 0b11111100 in r16 laden
2
out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben

Und damit werden die beiden ersten LEDs eingeschalten

von Helmut S. (helmuts)


Lesenswert?

Falls es immer noch nicht klar ist. Wenn eine LED am Vcc angeschlossen 
ist, muss eine 0 ausgegeben werden damit sie leuchtet.

: Bearbeitet durch User
von Pascal T. (Gast)


Lesenswert?

Entschuldigung! Schande über mich, kommt davon wenn man zu schnell über 
was drüber geht...

Dank dir! :)

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.