www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lauflicht


Autor: Tobias Halenka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich bin neuling und versuche ein einfaches lauflicht zu Programieren.
Ich weiß aber nicht wie ich das Programm schreiben soll. Das Lauflicht
soll immer nur in eine Richtung Laufen. Die LED´s sind mit dem PORTB
verbunden! Nur habe ich keine Ahnung wie meinem AT90S2313 sagen kann
das er einen Pin weiter springen soll!
Danke schon mal

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uint8_t c = 1;
DDRB = 0xff;
for (;;) {
  PORTB = c;
  if (c == 0x80) c = 1;
  else c <<= 1;
}

Autor: formtapez (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich nicht weiss in welches Programmiersprache Du programmierst erklär
ich es mal so:

$01 in eine Variable speichern
Variable an PortB ausgeben
Warten
Variable linksschieben (oder rechts ...)
Variable an PortB ausgeben
Warten
Variable linksschieben (oder rechts ...)
Variable an PortB ausgeben
Warten
usw.

Alles klar ? ;)

MfG
formtapez

Autor: Tobias Halenka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jörg Wunsch
Sorry ich arbeite mit dem AVR Studio!
Ich gleub dien Programm ist in C oder? Ich werde aber erstmal weiter
mit AVR Arbeiten weil ich nur ungern jetzt wo ich es einigermaßen
verstanden habe mit C anfangen möchte! Trotzdem Danke für die Antwort!
@formtapez
Das mit der Variable habe i´ch verstanden aber wie veschiebe ich sie
nach Links oder rechts! Und wie bringe ich meinem Atmel bei zu warten?

Autor: Andreas Hesse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bits schieben in Registern kannst Du mit den Befehlen
lsl (=Logical shift left)
lsr (=Logical shift right)
rol (=links rollen, der nimmt das Carry Flag mit)
ror (=rechts rollen, der nimmt das Carry Flag mit)
Genaueres steht im Instruction Set Summary von Atmel.

Verzögerungsschleifen können so aussehen:
(wartet etwa 0,5 s bei 4 MHZ)
;*************************************************
;*** Delay: 2000000 Cycles
;*************************************************
;*** inner loop: 196
;*** middle loop: 188
;*** outer loop: 18
;*** difference: 2
;*************************************************
           ldi R16, 18
DelayLoop0:
           ldi R17, 18
DelayLoop1:
           ldi R18, 19
DelayLoop2:
           dec R18
           brne DelayLoop2
           dec R16
           brne DelayLoop1
           dec
           brne DelayLoop0

Kann man aber auch mit Timern machen

Gruss
Andreas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.