Forum: Mikrocontroller und Digitale Elektronik Timer in ms - LED an bei voller Sec


von Anfänger :-) (Gast)


Lesenswert?

Hallo,

ich habe in Bascom einen Timer laufen, der mir in jeder ms eine Variable 
hochzählt.(diese Springt bei 65000 wieder auf 0 und geht dort weiter)


Jetzt möchte ich das eine Led angeht, sobald der ms Zähler ne 1000er 
Marke erreicht hat.

Also bei 1000, 2000, 3000, usw.


Wie kann ich das machen, ausser über eine ewig lange If Then 
Anweisung...

von Sebastian B. (mircobolle)


Lesenswert?

Anfänger :-) wrote:
> Hallo,
>
> ich habe in Bascom einen Timer laufen, der mir in jeder ms eine Variable
> hochzählt.(diese Springt bei 65000 wieder auf 0 und geht dort weiter)
>
>
> Jetzt möchte ich das eine Led angeht, sobald der ms Zähler ne 1000er
> Marke erreicht hat.
>
> Also bei 1000, 2000, 3000, usw.
>
>
> Wie kann ich das machen, ausser über eine ewig lange If Then
> Anweisung...
1
static unsigned char zaehler_variable = 0;
2
3
zaehler_variable += 1;
4
zaehler_variable = zaehler_variable % 1000; 
5
/* Modulo 1000 --> wenn zaehler variable 1000 erreicht wird durch modulo 1000 der wert wieder auf 0 gesetzt*/
6
7
if (zaehler_variable == 0){
8
 /* fuehre deinen Code aus */
9
}


achsooo BASCOM... wie man das in bascom realisiert weiß ich leider 
nicht!
Das war c ...

von Anfänger :-) (Gast)


Lesenswert?

Mhh - kann ich so leider in Bascom nicht einsetzten...

von Matthias L. (Gast)


Lesenswert?

1
zaehler_variable += 1;
2
zaehler_variable = zaehler_variable % 1000; 
3
if (zaehler_variable == 0)
4
{
5
 ...

Das ist natürlich sehr gut für die Auslastung.
Sinnvoller wäre das:
1
if ( ++zaehler_variable == 1000 )
2
{
3
  zaehler_variable = 0;
4
  ...

Aber in Bascom musst du das selbst übersetzen

von Ulli (Gast)


Lesenswert?

Noch weniger rechenintensiv, da nicht bei jedem Durchlauf auf == 1000 
geprüft werden muss:
1
if (zaehler_variable) zaehler_variable--;
2
 else {
3
  zaehler_variable = 1000;
4
  ... DEIN CODE
5
 }

von Matthias L. (Gast)


Lesenswert?

>Noch weniger rechenintensiv, da nicht bei jedem Durchlauf auf == 1000
>geprüft werden muss:

Hm.. Wo ist der Unterschied, ob ich auf Null oder 1000 prüfe?

von Ulli (Gast)


Lesenswert?

Auf 0 prüfen geht wesentlich schneller als auf 1000 (als 16-Bit-Zahl). 
Funktionell geht natürlich beides.

von Matthias L. (Gast)


Lesenswert?

>Auf 0 prüfen geht wesentlich schneller als auf 1000 (als 16-Bit-Zahl)

Wesentlich? Ich glaube, du sparst 2 asm-Befehle...
Dafür ist bei dir ein else dabei...

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.