Forum: Mikrocontroller und Digitale Elektronik Anfänger: AVR-Tutorial, LED leuchtet nur schwach


von Bernd S. (caveman)


Lesenswert?

Hallo,
bin neu hier und hab einen guten Eindruck von diesem Forum, viele 
hilfsbereite Mitglieder, viele gute Artikel ... einfach toll.

Ich will in die Mikrocontroller-Welt einsteigen und hab mir das 
Evaluationboard 2.0 von Pollin bestellt und auch scheinbar richtig 
zusammengebaut :-)
Ich verwende einen ATmega16. Das Testprogramm von Pollin konnte ich 
erfolgreich auf den Controller laden und es funktioniert einwandfrei.
Nun hab ich das erste ASM Programm aus dem AVR-Tutorial (entsprechenden 
Port für mein Board geändert) hochgeladen, aber die LED´s leuchten 
leider nur ganz schwach.
1
.include "m16def.inc"       ; Definitionsdatei einbinden, ggf. durch
2
                             ; 2333def.inc ersetzen
3
 
4
         ldi r16, 0xFF       ; 0xFF ins Arbeitsregister r16 laden
5
         out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben
6
 
7
         ldi r16, 0b00110000 ; 0b11111100 in r16 laden
8
         out PORTD, r16      ; r16 ins IO-Register PORTB ausgeben
9
 
10
ende:    rjmp ende           ; Sprung zur Marke "ende" -> Endlosschleife

Was mache ich hier falsch?

Viele Grüße,
Bernd

von Stefan Salewski (Gast)


Lesenswert?

>out PORTD, r16      ; r16 ins IO-Register PORTB ausgeben

Was denn nun, Port B oder Port D?

von Bernd S. (caveman)


Lesenswert?

Port D meine ich, habe vergessen den Kommentar zu verändern (hab den 
einfach aus dem Beispiel übernommen)

von Andrew (Gast)


Lesenswert?

Der Kommentar is ja wurscht, aber
>out DDRB   <- Hier Port B
>out PORTD  <- Hier Port D

von Stefan Salewski (Gast)


Lesenswert?

>Port D meine ich, habe vergessen den Kommentar zu verändern
>out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB ausgeben

Na wenn Du Port D verwenden willst, muss es wohl auch

out DDRD, r16       ; Inhalt von r16 ins IO-Register DDRD ausgeben

heissen? Ich kenne dein Board nicht, und mein AVR-Assembler ist auch 
derzeit etwas eingerostet, sorry.

von Bernd S. (caveman)


Lesenswert?

Es klappt jetzt :-)
vielen Danke für die schnellen Antworten....

Zum Verständnis:

Wieso leuchtet denn die LED schwach wenn ich das verwechsele?
Wird die LED irgendwie ständig an und ausgeschaltet? (da ich ja den Port 
D benutzt habe ohne vorher die entsprechenden Pins auf Ausgang zu 
schalten)

Gruß,
Bernd

von Stefan Salewski (Gast)


Lesenswert?

>Wieso leuchtet denn die LED schwach

Wenn Du den Port auf Eingang mit aktiven internem Pullup schaltest, und 
die LED zwischen diesem Port und Masse liegt, kann ein sehr kleiner 
Strom fließen, so das die LED glimmt. Nur eine Vermutung, kenne ja deine 
Schaltung nicht.

von Christian Erker (Gast)


Lesenswert?

Ich habe das Board auch ..

Die 2 LEDs hängen an PD5 und PD6. Er schaltet die Pullups an PD5 und PD4 
an, und nur den (völlig unbelegten) Port B auf Ausgang.

An den Threadersteller, vorausgesetzt es ist noch aktuell, probier mal:
1
.include "m16def.inc"       ; Definitionsdatei einbinden, ggf. durch
2
                             ; 2333def.inc ersetzen
3
 
4
         ldi r16, 0x60       ; 0x60 ins Arbeitsregister r16 laden
5
         out DDRD, r16       ; Inhalt von r16 ins IO-Register DDRD ausgeben
6
 
7
         ldi r16, 0x60       ; 0b01100000 in r16 laden
8
         out PORTD, r16      ; r16 ins IO-Register PORTD ausgeben
9
 
10
ende:    rjmp ende           ; Sprung zur Marke "ende" -> Endlosschleife

Gruß,
Christian

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.