Ich habe ein Problem mit Zeit und dem Arduino. Ich möchte jedes mal wenn Eingang 2 (Intterrupt) einen Impuls bekommt, einen Summer ansteuern. Das mache ich so: digitalWrite(SUMMER, HIGH); delay(1); //1mS wait; digitalWrite (SUMMER,LOW); Das funktioniert. Wenn ich den delay weglass, dann hört man es fast nicht. Problem: Wenn man viele Impulse bekommt, werden Pulse vergessen.Zb. bei 1500HZ werden nur ~900 Pulse angezeigt. Und das Display aktualsiert auch sehr schlecht. Ich glaube es ist zuviel Aufand würd den Arduino, kann man mit anderen Bauteilen eine Schaltung bauen welche auf eine Flanke vom Arduino den Summer 1mS ansteuert? Wenn ja, hat jemand einen Schaltplan?
Moor schrieb: > Ich glaube es ist zuviel Aufand würd den Arduino einfach einen Timer (PWM) sinvoll nutzen, dann kostest das auch keine Zeit im Arduino.
Mit PWM kann man doch nur z.b. töne am Summer machen? zb. analogWrite(SUMMER,200) ?
Hi, Es gibt Summer die den Ton selbst erzeugen, da kannst/musst du nur einen Pin mit digitalWrite() high setzen. Wenn du einen Summer hast der ein externes Frequenzsignal will, dann wäre es am einfachsten mit der tone() Funktion ( https://www.arduino.cc/en/reference/tone) von Arduino. Hoffe das hilft dir.
Moor schrieb: > Zb. bei 1500HZ > werden nur ~900 Pulse angezeigt. Ein MC kann keine negativen Zeiten erzeugen. 1ms Delay braucht 1ms, 1500Hz sind aber nur 0,67ms Zeit je Periode.
:
Bearbeitet durch User
Wie ich verstanden habe werden die Impulse auch gezählt. Ob bei jedem Impuls der Summer ertönt ist sicher nicht wichtig. Ich würde in der Interrupt Funktion eine globale Variable hochzählen (votaile nicht vergessen) und in der Loop Funktion diese auf Änderung prüfen. Bei Änderung wird der Summer betätigt und die Anzeige aktualisiert. Allgemein gilt, dass die Interruptfunktion möglichst kurz gehalten warden muss. Gruß JensM
Moor schrieb: > Das mache ich so: > > digitalWrite(SUMMER, HIGH); > delay(1); //1mS wait; > digitalWrite (SUMMER,LOW); Du hast doch wohl nicht etwa das delay in der Interruptroutine?!
Peter D. schrieb: > Ein MC kann keine negativen Zeiten erzeugen. Dafür braucht man halt schon einen schnellen Mehrkernprozessor, eventuell auch noch mit Unterstützung der Grafikkarte.
Nop schrieb: > Peter D. schrieb: > >> Ein MC kann keine negativen Zeiten erzeugen. > > Dafür braucht man halt schon einen schnellen Mehrkernprozessor, > eventuell auch noch mit Unterstützung der Grafikkarte. Ach, und damit kann man dann "negative Zeiten" erzeugen? ;-)
Marty McFly schrieb: > Nop schrieb: >> Peter D. schrieb: >> >>> Ein MC kann keine negativen Zeiten erzeugen. >> >> Dafür braucht man halt schon einen schnellen Mehrkernprozessor, >> eventuell auch noch mit Unterstützung der Grafikkarte. > > Ach, und damit kann man dann "negative Zeiten" erzeugen? ;-) nicht direkt, aber wenn man damit den Fluxkompensator steuert ;)
:
Bearbeitet durch User
Marty McFly schrieb: > Ach, und damit kann man dann "negative Zeiten" erzeugen? ;-) Ja klar, sofern man einen Linuxkernel mit Echtzeiterweiterungen installiert hat. :-)
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.