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.
Wolfgang S. schrieb: > ich suche Tipss we ich in einem Arduino-sketch zeitmarken gewinnen kann, Schon eingebaut! wurde genannt: millis() Wolfgang S. schrieb: > einen 32-bit-Zähler inkremetieren, Schon eingebaut. Falk B. schrieb: > Mit einem Timer-Interrupt. Kann man machen, wenn einem die eine vorhandene Timer ISR nicht reichen tut.
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? ;-)
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.
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ß
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.
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.
Christoph M. schrieb: > Gerade wollte ich den Link posten: > https://www.arduino.cc/en/tutorial/BlinkWithoutDelay Und du glaubst, das jemand der, ich zitiere "Wie definiere ich 32-bit-worte, wie inkrimentiere ich, wie die Maske?" nachfragt, damit klar kommt?
Naja... Vielleicht nicht unmittelbar. Aber wie immer: Kompetenz ist keine Konstante. Kann also noch werden....
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.