Forum: Mikrocontroller und Digitale Elektronik Led einschalten


von M. K. (bob13)


Lesenswert?

Ich hab mal wieder ein Anfängerproblem.
Und zwar will ich eine LED zum leuchten bringen. Ich verwende den 
Atmega8515.
Mein Code sieht so aus:
1
.include "m8def.inc"
2
3
   sbi DDRD,PD0
4
   sbi PORTD,PD0
5
loop: 
6
   rjmp loop
Nach dem ausführen des Codes passiert einfach nichts...
Liegt der Fehler vielleicht an den Ports?
Zumindest sind die Kabel an meinem STK500 so gesteckt, wie es im 
Online-Handbuch beschrieben wird.

von Peter (Gast)


Lesenswert?

Und in welche Zeile glaubst du wird die LED eingeschaltet?

Schreibe am beste mal hinter jede Zeile was sie macht.

von Peter (Gast)


Lesenswert?

oh sorry, war auf dem falschen dampfer. Vergiss mein Kommentar

von holger (Gast)


Lesenswert?

>   sbi PORTD,PD0

Versuch mal

   cbi PORTD,PD0

Ich meine die LED werden am STK500 gegen Masse geschaltet.

von M. K. (bob13)


Lesenswert?

funktioniert nicht :(

von Peter (Gast)


Lesenswert?

gut so schlecht war mein Kommentar doch nicht

sbi DDRD,PD0 ;setzt Bitnummer und schaltet die LED somit ein

falsch, legt fest welches Bit als ausgang genutzt werden soll

sbi PORTD,PD0 ;macht das gleiche (?)
auch falsch, setzt das Bit 0 auf 1 (wenn dort die LED gegen masse dran 
ist wird sie leuchten)

loop:
   rjmp loop ;sorgt dafür, dass die LED immer an bleibt.

fast richitg, ist eine schleife damit der Prozessor definert etwas 
macht.

von Hmm... (Gast)


Lesenswert?

Du hast das Datenblatt, insbesonders die Beschreibung zu den SFR "DDRx" 
und "PORTX" schon gelesen, oder?

Kurz gesagt kann jeder Pin Eingang ODER Ausgang sein. Was er konkret 
sein soll, muss ihm der Programmierer (DU!) erst sagen. Dazu dient 
"DDRx". Welchen Zustand er als Ausgang dann annimmt, legst du mit 
"PORTx" fest.

Und die Funktion der Assembler-Befehle (sbi und co) kannst du sicher 
hier dem Tutorial entnehmen.

Auszug aus dem Datenblatt:

Each port pin consists of 3 Register bits: DDxn, PORTxn, and PINxn. As 
shown in “Register
Description for I/O Ports” on page 65, the DDxn bits are accessed at the 
DDRx I/O address, the
PORTxn bits at the PORTx I/O address, and the PINxn bits at the PINx I/O 
address.
The DDxn bit in the DDRx Register selects the direction of this pin. If 
DDxn is written logic one,
Pxn is configured as an output pin. If DDxn is written logic zero, Pxn 
is configured as an input
pin.
If PORTxn is written logic one when the pin is configured as an input 
pin, the pull-up resistor is
activated. To switch the pull-up resistor off, PORTxn has to be written 
logic zero or the pin has to
be configured as an output pin. The port pins are tri-stated when a 
reset condition becomes
active, even if no clocks are running.
If PORTxn is written logic one when the pin is configured as an output 
pin, the port pin is driven
high (one). If PORTxn is written logic zero when the pin is configured 
as an output pin, the port
pin is driven low (zero).

von M. K. (bob13)


Lesenswert?

ja, stimmt...
Inzwischen hat sich mein problem erledigt.
Weiß selbst nicht, wie es geklappt hat, aber es geht jetzt ^^

von holger (Gast)


Lesenswert?

>Ich meine die LED werden am STK500 gegen Masse geschaltet.

Damit meinte ich sie werden an der Kathode geschaltet.
D.h. 1 ist aus, 0 ist an.


>funktioniert nicht :(

Sicher?

   sbi DDRD,PD0
   cbi PORTD,PD0
loop:
   rjmp loop

von Hmm... (Gast)


Lesenswert?

> ja, stimmt...
> Inzwischen hat sich mein problem erledigt.
> Weiß selbst nicht, wie es geklappt hat, aber es geht jetzt ^^

Fehlt nur noch der Ehrgeiz deinerseits herauszufinden, WARUM es jetzt 
klappt und was vorher der Fehler war....

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.