Forum: Mikrocontroller und Digitale Elektronik Grosse Probleme mit STK500 (betrifft Ansteuerung von LEDs)


von Philipp K. (phil)


Lesenswert?

Hallo,

vorweg sei gesagt: Bin absoluter Anfaenger. Habe zwar schonmal etwas
mit Assembler herumgespielt, allerdings versagen hier meine Kenntnisse.
Gleichzeitig vermute ich das Problem auch eher irgendwo im
elektronischen Bereich. Anyway, ich beschreib 'mal worum es geht:

Besitze ein STK500 mit einem AT90S8515. Eigentlich geht es mir nur
darum, alle (!) der 8 LEDs (LED0-LED7) anzusteuern. Nichts
schwieriges, sollte man meinen. Nungut, ich habe also mein
Nullmodemkabel angeschlossen, und eine Verbindung zwischen den
PBX-Registern (ist Register der korrekte Begriff) und den Anschluessen
fuer die LEDs auf dem Board hergestellt. (Sorry fuer die
moeglicherweise falsche Ausdrucksweise, ich hoffe ihr wisst, was ich
meine). Zum besseren Verstaendnis habe ich den Aufbau nochmal als Bild
hochgeladen: http://www.flickr.com/photos/66358509@N00/59076167/

Habe aus einem Gespraech mit mehreren Leuten im IRC gestern Nacht
folgenden, aus dem Tutorial abgewandelten, Source kreiert. Nach den
Angaben im IRC sollten hiermit alle acht LEDs leuchten:
--snip--
.include "8515def.inc"       ;Definitionsdatei einbinden, ggf. durch
                             ;2333def.inc ersetzen

         ldi r16,0xFF        ;0xFF ins Arbeitsregister r16 laden
         out DDRB, r16       ;Inhalt von r16 ins IO-Register DDRB
ausgeben

;         ldi r16, 0b11111100 ;0b11111100 in r16 laden
         ldi r16,0b01010101
         out PORTB, r16      ;r16 ins IO-Register PORTB ausgeben

ende:    rjmp ende           ;Sprung zur Marke "ende" ->
Endlosschleife
--snap--
Kommentare bitte ignorieren, ist einfach aus dem Tutorial uebernommen
und nicht abgeaendert.

Ebenfalls habe ich mir den Sourcecode aus dem AVR-ASM-Tutorial aus der
Linksammlung geschnappt:
http://www.avr-asm-tutorial.net/avr_de/quellen/test1.asm
Leider leuchten auch mit diesem Source nicht alle Lampen; ebenfalls
blinken sie nicht. Stattdessen ist, wie auf dem Foto zu sehen, konstant
LED1 an.

Ich versteh das nicht .. Ich hab derzeit absolut keinen Ansatzpunkt,
warum das nicht funktioniert. Als ich das Multimeter an die LED PBX
Ports angelegt habe, kamen auch einige interessante Werte raus.
Waehrend PB0 gute 5V (schaetze so etwa 5,4V) liefert, liefern alle
anderen PBs nur knapp unter 5V (etwa 4,5V) (sorry, habe nur ein
analoges Multimeter, wo man das net so ganz gescheit ablesen kann). Mag
sein, dass ich das falsch sehe, aber sollten die LEDs nicht trotzdem
zumindest ansatzweise (schwach) leuchten?

Irgendwelche Ansatzpunkte, wo ich nun fortsetzen koennte, wo ich nach
(Denk-)fehlern suchen koennte?

Vielen Dank im Voraus und Entschuldigung fuer die vermutlich daemliche
Frage,
phil

von SiO2 (Gast)


Lesenswert?

ldi r16,0

von The Daz (Gast)


Lesenswert?

Phil,

  ldi r16,0xFF        ;0xFF ins Arbeitsregister r16 laden
  out DDRB, r16

stellt die Datenrichtung von Port B so ein, dass alle pins Ausgaenge
sind.

  ldi r16,0b01010101
  out PORTB, r16

schreibt nun auf Port B das Bitmuster 01010101. Damit werden jede
zweite LED eingeschaltet, die anderen bleiben ausgesschaltet.

Mit

  ende:    rjmp ende

schickst du den uC in die Endlosschleife, er macht also NIX mehr ausser
Strom zu verbrauchen.

Das heisst, nachdem der Prozessor einmal Port B initialisiert hat tut
er nix mehr. Damit die LEDs blinken muss er aber ein Schleife
abarbeiten und sie abwechselnd an- und ausschalten.

Nix für Ungut, ich empfehle dir, erstmal die Grundlagen des
Programmierens zu erlernen, dann dich mit dem AVR Assembler (Tutorial
gibts hier und bei Atmel) zu befassen und dann mit den Details der uC
hardware.

  Daz

von HerrMueller (Gast)


Lesenswert?

Hi,
Wenn Dein Link-Bild tatsächlich Dein Aufbau zeigt, ist klar, warum nur
eine Led leuchtet. Du hast das Kabel zu den Leds verdreht. Die rote
Markierung am Kabel sollte immer an Pin 1 sein ( an beiden Seiten).
Bitte überprüfen.
Das Programm ist so schon ok, ausser dass es nicht blinkt. Beim Blinken
auf jeden Fall an Zeitverzögerung denken, sonst sieht man nix.

Gruss Christian

von Florian (Gast)


Lesenswert?

Hier ein einfaches Blinkprogramm mit einer Pause




.include "8515def.inc"


ldi r16,$ff
out ddrb,r16

main:
ldi r16,$00
out portb,r16



pause1:
inc r17
brne pause1
inc r18
brne pause1
inc r19
cpi r19,$70
brne pause1
clr r19


ldi r16,$ff
out portb,r16


pause2:
inc r17
brne pause2
inc r18
brne pause2
inc r19
cpi r19,$70
brne pause2
clr r19


rjmp main

von Philipp K. (phil)


Lesenswert?

Wie eben auch im IRC festgestellt, habe ich die Kabel nun vertauscht.
Anscheinend nun korrekt:
http://img120.imageshack.us/img120/2280/cimg36890pv.jpg

Jetzt leuchtet allerdings nichts mehr.

von Philipp K. (phil)


Lesenswert?

Mit Florians Programm passiert leider das gleiche. Naemlich nichts. :(

von HerrMueller (Gast)


Lesenswert?

Es kann natürlich sein, dass der 8515 nicht mehr funktioniert, da Du
wohl laengere Zeit die Ports mit Vcc und GND kurzgeschlossen hast.

von Florian (Gast)


Lesenswert?

Ich kenne das stk 500 leider nicht und daher weiß ich auch nicht, auf
welchem Port die Leds angeschlossen sind....

probiere mal anstatt portb -->porta und anstatt ddrb --> ddra

einfach im code umändern..

kann aber auch portc und ddrc oder portd und ddrd sein...

Keine Ahnung...

Gruß Florian

von Philipp K. (phil)


Lesenswert?

Hat leider auch keine Aenderung gebracht. :-(

von Florian (Gast)


Lesenswert?

Wie spielst du denn das Programm rüber? Mit dem PonyProg? Oder hat da
Atmel etwas eigenes?

von Philipp K. (phil)


Lesenswert?

Mit dem AVRstudio ("Program FLASH").

von Florian (Gast)


Lesenswert?

Steht bei den Leds nichts aufgedruckt?  z.B.: PB0 PB1?

von Florian (Gast)


Lesenswert?

ups... Port B...habs gerade gesehen

von HerrMueller (Gast)


Lesenswert?

@Florian Beim STK500 sind alle Ports auf Pfostenstecker gelegt und
werden dann je nach Bedarf mit dem LED-Stecker verbunden. Da aber wohl
längere Zeit das Kabel verdreht war, lag in der Zeit an PB0 +5V und an
PB1 Masse (Led leuchtete). Wenn PB0 als Ausgang auf 0 lag, gab es wohl
einen längeren Kurzschluss. Es waere möglich, dass das der Prozessor
nicht mochte.

von Florian (Gast)


Lesenswert?

ok, dann ab mit ihm in den µ-controller Himmel, :-)

Ein letztes Gebet noch...



und tschüss

von Philipp K. (phil)


Lesenswert?

Problem geloest.

Danke an alle hier und an alle Leute im IRC, im speziellen c-logic. :)

Lag einmal daran, dass das Kabel zum ISP nicht/falsch aufgesetzt war,
und dass ich die diesbezuegliche Einstellung im AVRstudio falsch
gesetzt hatte.

von HerrMueller (Gast)


Lesenswert?

Dann hast Du tatsächlich Glück gehabt, dass das Programm mit falsch
aufgestecktem Portkabel nicht geladen wurde und der Port nicht auf
Ausgang ging.

Viel Spass beim weiteren Testen
christian

von Florian (Gast)


Lesenswert?

Ja, Glück im Unglück....

von Hannes L. (hannes)


Lesenswert?

Ist zwar OT, aber vielleicht hilft es ja etwas:
http://www.mikrocontroller.net/forum/read-1-38592.html#250868

Bit- & Bytebruch...
...HanneS...

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.