mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom Programmierung Blinklichter


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Schaut euch mal das Video hier an:

http://www.modellbau-buers.de/Ebay/drehleiter.wmv

Wie man sieht blinken die LEDs auf dem dach komplett unabhängig 
voneinander.
Hat jemand ne Ahnung wie ich sowas in Bascom hinbekomme?
Ein Doppelblitz bekomme ich mit WaitMS hin, aber sobald ich zwei 
unabhängige LEDs habe funktionierts nicht mehr.

Hat jemand eine Idee?


Dank im Voraus,

Alex

Autor: Marco (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie ich das sehe, sind die LEDs aber nicht unabhänig voneinander. Die 
beiden oberen haben den gleichen Takt und die unteren auch.

Mit waitms kommst du da aber nicht sehr weit, weil das warten den AVR 
blockiert. Du solltest dazu einen Timer verwenden.

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hat jemand eine Idee?

Ja.  Vergiß "WaitMS".  Lerne, was Timer sind und wie man sie einsetzt 
und was für wunderbare Sachen man damit anstellen kann (nämlich 
Multitasking).

Konfigurier einen Timer so, dass er (ungefähr) alle 20 ms einen 
Interrupt auslöst.  Richte zwei Variablen "a" und "b" ein. Schreib in 
den Interrupthandler diesen Beispielcode (Anpassung auf Basic ist Deine 
Aufgabe):
TimerInterrupt:

  Inc(a);
  IF (a==20) a = 0;

  IF ((a>0) AND (a<3)) OR ((a>6) AND (a<9))
    {
    [LED 1 einschalten]
    }
  ELSE
    {
    [LED 1 ausschalten]
    };


  Inc(b);
  IF (b==23) b = 0;

  IF ((b>0) AND (b<3)) OR ((b>6) AND (b<9))
    {
    [LED 2 einschalten]
    }
  ELSE
    {
    [LED 2 ausschalten]
    }

  reti

Herauszufinden, wie und warum das zwei tolle unabhängig voneinander 
blitzende Lichter ergibt, überlass ich Dir :-).

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Mit den Timern habe ich mich beschäftigt.
Was bdeutet das:

IF (b==23) b = 0;  ?

Wie werden die Variablen Hochgezählt?
Die LEDs sollen Zweimal ganz kurz Blinken und dann etwas länger ausgehen 
(2x 20ms an und dann ca. 150ms aus)

Gruss

Alex


Autor: Unbekannter Nr.6 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
B=23 würde bedeuten die Variable B nimmt den Wert 23 an.
B==23 ist ein Vergleich: ist der Inhalt der Variable B 23?

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Wenn B = 0 soll er B auf 20 setzen?
Was ergibt daa für einen Sinn?

Gruss

Bernd

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mit den Timern habe ich mich beschäftigt.

:-)

>IF (b==23) b = 0;  ?

Das bedeutet "Prüfe, ob die Variable b den Wert 23 hat; wenn das 
zutrifft, setze b auf den Wert 0".

>Wie werden die Variablen Hochgezählt?

Durch die Zeilen Inc(a) und Inc(b).  "Inc" = "inkrementiere" = zähle um 
Eins hoch.  Wenn Du Inc nicht magst, kannst Du es genausogut mit "a = a 
+ 1" resp. "b = b + 1" erledigenn.

>Die LEDs sollen Zweimal ganz kurz Blinken und dann etwas länger ausgehen
>(2x 20ms an und dann ca. 150ms aus)

Das Anpassen der Werte (20, 23, 3, 6, 9 etc.) an Deine Wünsche solltest 
Du alleine hinkriegen können.

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kaum zu glauben,
Das funktioniert tatsächlich!
Vielen vielen Dank!
Jetzt muss ich nur noch diese größer kleiner Sache umgehen, da das für 
einen Tiny zu viel Speicherplatz frisst.
Das ist ja das Problem bei Hochsprachen, eine Zeile in Bascom (Oder auch 
C) ist oft 100 Zeilen in Assembler.

Gruss

Ale

Autor: AVRFan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kaum zu glauben,
>Das funktioniert tatsächlich!

lach Das freut mich.  Aber ich möchte Dir ans Herz legen, auch 
versuchen zu verstehen, warum das so funktioniert, d. h. den Sinn des 
Timers und der Zählvariablen a und b, und inwiefern hier zwei Tasks 
parallel ablaufen (je einer für jede LED nämlich).  Setz Dich ruhig 
einmal damit auseinander.

>Jetzt muss ich nur noch diese größer kleiner Sache umgehen, da das für
>einen Tiny zu viel Speicherplatz frisst.

Oh - dann wechsel doch zu Assembler.  Soooooo wahnsinnig schwierig ist 
das nun auch wieder nicht.  Außerdem kannst Du ja hier um Rat fragen, 
wenn was nicht klappt.

Gruss zurück

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.