Forum: Compiler & IDEs STK500 LED AUsgabe Problem


von Tim A. (computerengineer65)


Lesenswert?

Hi,

habe vor kurzem mit dem Mikrokontroller programmieren begonnen mit dem 
STK500 und bin jetzt auf ein Problem gestoßen, dass mich verwirrt.

Benutzter Controller = atmega8515 (der Mitgelieferte)
Das Problem habe ich in Assembler und in C

Ich wollte programmieren, dass die erste LED leuchtet

Meiner Meinung nach sollte es so funktionieren, hatte es aber nicht:

DDRB = 0xff;
PORTB = 0x01;

Nach dem Befehl "DDRB = 0xff" leuchten bereits alle LEDS und nach meinem 
Befehl "PORTB = 0x01" schaltet sich die erste LED aus. Im Prinzip habe 
ich das 1er Komplement von meiner gewollten Ausgabe.

Irgendwo hier im Forum habe ich jetzt gelesen, dass das STK500 die 
Ausgänge zur LED inventiert. Bedeutet dies, dass die LEDS im Prinzip nur 
aktiv low sind? Habe ich an dem Kontroller trotzem an den PORTB Pins das 
gewünschte Bitmuster 0x01 und somit am Ausgang PB0 5V?

Ich bitte um Hilfe

von Grrrr (Gast)


Lesenswert?

Tim A. schrieb:
> Irgendwo hier im Forum habe ich jetzt gelesen, dass das STK500 die
> Ausgänge zur LED inventiert.

Das stimmt so nicht. Vielmehr muss man, um die LEDs, die zwischen Vcc 
und dem Portpin angeschlossen sind, eine 0 ausgeben. D.h. man muss das 
Bit selbst invertieren, wenn 1 = LED an und 0 = LED aus bedeuten soll. 
Mann kann aber wahlweise auch definieren, dass 0 = LED an und 1 = LED 
aus bedeuten soll.

Tim A. schrieb:
> Habe ich an dem Kontroller trotzem an den PORTB Pins das
> gewünschte Bitmuster 0x01 und somit am Ausgang PB0 5V?

Ja, das hast Du.

von Torsten G. (wawibu)


Lesenswert?

Grrrr schrieb:
> Mann kann aber wahlweise auch definieren, dass 0 = LED an und 1 = LED
> aus bedeuten soll.

Im STK500? Habe das Teil zwar schon eine Weile, aber mich nie damit 
beschäftigt, ob man die LEDs auch umdefinieren kann. Wäre also 
interessant zu wissen. Denn auch mich verwirrt es im ersten Moment, wenn 
die LEDs das Komplement von dem Anzeigen, was ich zur Ausgabe gegeben 
habe.

Also wenn man dem STK500 das anders beibringen kann, dann her mit dem 
Code - außer mit dem Lötkolben :)

Gruß
Torsten

von Karl H. (kbuchegg)


Lesenswert?

Torsten Giese schrieb:
> Grrrr schrieb:
>> Mann kann aber wahlweise auch definieren, dass 0 = LED an und 1 = LED
>> aus bedeuten soll.
>
> Im STK500? Habe das Teil zwar schon eine Weile, aber mich nie damit
> beschäftigt, ob man die LEDs auch umdefinieren kann.

LOL.
Das war offenbar mehr gedacht als:
Ab 0 jetzt LED ein oder LED aus bedeutet, ist nur eine willkürliche 
Konvention. Die Definition findet im Kopf statt, nicht durch Umstecken 
von Jumpern.

von Grrrr (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> LOL.
> Das war offenbar mehr gedacht als:
> Ab 0 jetzt LED ein oder LED aus bedeutet, ist nur eine willkürliche
> Konvention. Die Definition findet im Kopf statt, nicht durch Umstecken
> von Jumpern.

Genau.

Ich will jetzt keine linguistischen Diskussionen lostreten, aber 
"Definitionen" (im fraglichen Sinn) finden immer im Kopf statt. Wenn man 
über Jumper die Festlegung ändern kann, welcher Pegel die LED leuchten 
läßt, dann ist das eine "Konfiguration".

von Karl H. (kbuchegg)


Lesenswert?

Torsten Giese schrieb:

> interessant zu wissen. Denn auch mich verwirrt es im ersten Moment, wenn
> die LEDs das Komplement von dem Anzeigen, was ich zur Ausgabe gegeben
> habe.

Irgendwann, wenn der Leidensdruck groß genug ist, kommt jeder 
Programmierer drauf, dass ja eigentlich er der Herr im Haus ist, und er 
schreibt sich flugs ein paar Funktionen/Makros, die dieses Detail vor 
dem Rest der Welt verstecken. Fortan arbeitet er bei LED nicht mehr mit 
0 und 1, sondern mit mit Funktionen und/oder Makros mit so sinnigen 
Namen wie LEDEin() oder LEDAus() und es herrscht wieder Frieden im 
Lande. Alle sind glücklich und wenn sie nicht gestorben sind, dann 
blinken sie noch heute.

von Tim A. (computerengineer65)


Angehängte Dateien:

Lesenswert?

Danke für die Antworten. Damit wäre schon mal diese Frage geklärt. 
Allerdings ist dadurch gleich noch eine weitere entstanden.

Im Anhang befindet sich der Quelltext zu einem Assemblerprogramm.

Im Prinzip holt sich der der Mikrocontroller die Eingabe von den Tastern 
und zeigt sie (solange der Taster noch gedrückt) auf den LEDs an.

Meine Frage hierzu: Warum zeigt er das jetzt nicht inventiert an? Heißt 
das für mich das bei der gewollten Eingabe 0x01 tatsächlich 0xfe 
aufgenommen wird? Das wäre die einzige Erkärung für mich warum jetzt die 
erste LED aufblinkt bei Betätigung des ersten Tasters.

von Grrrr (Gast)


Lesenswert?

Lieber Tim,

[ironie]
als angehender "computerengineer" hast Du das Recht Dir die Schaltpläne 
vom STK500 selbst anzusehen.
Wir verlangen keine Lizenz dazu von Dir. Tatsächlich könnten wir Dich 
garnicht daran hindern es zu tun, denn die Beschreibung wird mit dem 
AVRStudio mitgeliefert.
[/ironie]

;-)

von AVRli (Gast)


Lesenswert?

Ich hab mich am Anfang auch schwer getan diese Drehung 0=EIN 1=AUS zu 
verinnerlichen. Auch bei Tastenabfragen hat sich das nun bewährt. War 
auch bei den ersten Schaltungen der Meinung ich seid er Herr der Platine 
und hab dann irgendwas auch gemerkt das die Leute sich was dabei gedacht 
haben wenn Sie die LED nach Masse zum leuchten bringen. :-D

Beim STK500 kann man da nicht's umstöpseln höchstens den Lötkolben 
anwerfen.

Der Vorteil ist auch das man eben viel mehr Strom in Richtung Masse dem 
PIN zumuten kann. Datenblatt ist da immer zu Rate zu ziehen.

Gruß AVRli...

von Thomas K. (muetze1)


Lesenswert?

Vor allem ist diese Lösung die mit dem geringsten Aufwand und trotzdem 
reibungslosen Betrieb bei unterschiedlichen (und frei wählbaren) Target 
Spannungen geschuldet.

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.