Forum: Mikrocontroller und Digitale Elektronik Bascom Programmierung Blinklichter


von Bernd (Gast)


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

von Marco (Gast)


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.

von AVRFan (Gast)


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):
1
TimerInterrupt:
2
3
  Inc(a);
4
  IF (a==20) a = 0;
5
6
  IF ((a>0) AND (a<3)) OR ((a>6) AND (a<9))
7
    {
8
    [LED 1 einschalten]
9
    }
10
  ELSE
11
    {
12
    [LED 1 ausschalten]
13
    };
14
15
16
  Inc(b);
17
  IF (b==23) b = 0;
18
19
  IF ((b>0) AND (b<3)) OR ((b>6) AND (b<9))
20
    {
21
    [LED 2 einschalten]
22
    }
23
  ELSE
24
    {
25
    [LED 2 ausschalten]
26
    }
27
28
  reti

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

von Bernd (Gast)


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


von Unbekannter Nr.6 (Gast)


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?

von Bernd (Gast)


Lesenswert?

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

Gruss

Bernd

von AVRFan (Gast)


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.

von Bernd (Gast)


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

von AVRFan (Gast)


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

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.