Zeittakt mit Arduino statt "delay"!

OP (Firma: Pensionär-Altes-Eisen) #5720411
Lesenswert?

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
#5720470
Lesenswert?

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.
#5720515
Lesenswert?

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 #5720518
Lesenswert?

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.
Gast #5720583
Lesenswert?

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 #5720602
Lesenswert?

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.
#5720641
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren