Zeittakt mit Arduino statt "delay"!

OP (Firma: Pensionär-Altes-Eisen) #5720411
Hallo,
ich suche Tipss we ich in einem Arduino-sketch zeitmarken gewinnen kann, 
daher ein Programmabschnitt der ohne delay mit ungefähr alle sekunde 
oder alle 1/10 Sekunde ein Bit kippt.

Im Prinzip im loop einen 32-bit-Zähler inkremetieren, einige high bits 
ausmaskieren und wenn die gültigen bit 000000 habne das Taktbit 
invertieren. Bir wäre es egal ob 51ms oder 100ms, 510ms oder 1s 
letztendlich die Zeitmarke wäre.

Wie definiere ich 32-bit-worte, wie inkrimentiere ich, wie die Maske?

Gruß

PS.

16bit würde rechen wenn die Zykluszeit bei kurzen Programmen unter ca. 
16us wäre
Wolfgang S. schrieb:
> Hallo,
> ich suche Tipss we ich in einem Arduino-sketch zeitmarken gewinnen kann,
> daher ein Programmabschnitt der ohne delay mit ungefähr alle sekunde
> oder alle 1/10 Sekunde ein Bit kippt.

Mit einem Timer-Interrupt.

> Im Prinzip im loop einen 32-bit-Zähler inkremetieren, einige high bits
> ausmaskieren und wenn die gültigen bit 000000 habne das Taktbit
> invertieren. Bir wäre es egal ob 51ms oder 100ms, 510ms oder 1s
> letztendlich die Zeitmarke wäre.
>
> Wie definiere ich 32-bit-worte,

uint32_t my32bits;

> wie inkrimentiere ich

my32bits++;

>, wie die Maske?

my32bits &= 0xFF;

> 16bit würde rechen wenn die Zykluszeit bei kurzen Programmen unter ca.
> 16us wäre

Komisch, oben war noch von 2stelligen Millisekunden die Rede.

P S Zum Programmieren in C braucht es noch ein "wenig" mehr.
Arduino Fanboy D. schrieb:
> Wolfgang S. schrieb:
>> ich suche Tipss we ich in einem Arduino-sketch zeitmarken gewinnen kann,
> Schon eingebaut!
> wurde genannt: millis()

Nö. Das ist nur der tausendfach kopierte Würg-Around. Damit kann kann 
KEIN präzises Timing generieren, wie es eine gescheite Timer-ISR kann. 
Denn die kann mit deutlich besserer Zeitauflösung mit deutlich weniger 
Jitter deutlich besser arbeiten. War das jetzt deutlich genug? ;-)
Gast
Falk B. schrieb:
> War das jetzt deutlich genug? ;-)
Is klar....
Voll der Held...
Rum pääpen, aber  Anforderungen nicht gelesen:

Wolfgang S. schrieb:
> mit ungefähr alle sekunde
> oder alle 1/10 Sekunde ein Bit kippt.
> ...
> Bir wäre es egal ob 51ms oder 100ms, 510ms oder 1s
> letztendlich die Zeitmarke wäre.

Und jetzt du wieder!
Los, die nächste Blamage, nimm sie dir.

---
Ich vermute, dass Wolfgang S. erstmal lernen muss "nicht blockierende" 
Programme zu schreiben.
OP (Firma: Pensionär-Altes-Eisen)
Hallo,
nichtblockierend, genau deshalb, ich will mein Programm eben NICHT mit 
"delay" anhalten!

16us maximale Zykluszeit waren genannt damit nicht nach 65 000 
Durchläufen der Zähler überläuft bevor 1s vorbei wäre, deshalb evtl. 
32-bit-Schleifenzähler.

Gruß
Gast
Wolfgang S. schrieb:
> Hallo,
> nichtblockierend, genau deshalb, ich will mein Programm eben NICHT mit
> "delay" anhalten!
>
> 16us maximale Zykluszeit waren genannt damit nicht nach 65 000
> Durchläufen der Zähler überläuft bevor 1s vorbei wäre, deshalb evtl.
> 32-bit-Schleifenzähler.
>
> Gruß

Guck mal hier:

https://www.google.ca/search?source=hp&ei=HtRVXIjxG8iA0wLuuaTgBA&q=how+to+use+arduino+timer+interrupt&oq=how+to+use+arduino+timer+&gs_l=mobile-gws-wiz-hp.1.1.0i22i30l5.2878.9365..11554...0.0..0.114.2022.23j2......0....1.......5..41j0i131j0j46i131j46i131i275.J88SDC0Mp_w

Aus diesen Unterlagen sollte sich Nützliches adoptieren lassen.
Gast
Wolfgang S. schrieb:
> Hallo,
> nichtblockierend, genau deshalb, ich will mein Programm eben NICHT mit
> "delay" anhalten!
Es dreht sich also nicht um wirklich exakte Zeiten, sondern eher darum 
Nebenläufigkeiten zu realisieren.

In Datei->Beispiele->Digital findet sich das "BlinkWithoutDelay" 
Bespiel.
Das solltest du dir anschauen.
Meist reicht das.
Wolfgang S. schrieb:

> Hallo,
> nichtblockierend, genau deshalb, ich will mein Programm eben NICHT mit
> "delay" anhalten!

Schon klar.

> 16us maximale Zykluszeit waren genannt damit nicht nach 65 000
> Durchläufen der Zähler überläuft bevor 1s vorbei wäre, deshalb evtl.
> 32-bit-Schleifenzähler.

Falsch. Es müssen 16us MINDESTzykluszeit her, damit ein 16 Bit Zähler in 
1s nicht überläuft. Aber wenn du sowieso nur eine Auflösung von 1ms 
brauchst, bist du davon meilenweit weg.
Gast
Falk B. schrieb:
> Nö. Das ist nur der tausendfach kopierte Würg-Around. Damit kann kann
> KEIN präzises Timing generieren, wie es eine gescheite Timer-ISR kann.

Was meinst du denn, wie präzise es für "ungefähr alle sekunde oder alle 
1/10 Sekunde" sein müsste?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.