mikrocontroller.net

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


Autor: Anfänger :-) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sebastian B. (mircobolle)
Datum:

Bewertung
0 lesenswert
nicht 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...
static unsigned char zaehler_variable = 0;

zaehler_variable += 1;
zaehler_variable = zaehler_variable % 1000; 
/* Modulo 1000 --> wenn zaehler variable 1000 erreicht wird durch modulo 1000 der wert wieder auf 0 gesetzt*/

if (zaehler_variable == 0){
 /* fuehre deinen Code aus */
} 


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

Autor: Anfänger :-) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mhh - kann ich so leider in Bascom nicht einsetzten...

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zaehler_variable += 1;
zaehler_variable = zaehler_variable % 1000; 
if (zaehler_variable == 0)
{
 ...

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

Aber in Bascom musst du das selbst übersetzen

Autor: Ulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch weniger rechenintensiv, da nicht bei jedem Durchlauf auf == 1000 
geprüft werden muss:
if (zaehler_variable) zaehler_variable--;
 else {
  zaehler_variable = 1000;
  ... DEIN CODE
 }

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Ulli (Gast)
Datum:

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

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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...

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.