Hallo, ich stehe vor folgendem Problem das ich 4 Verbraucher schalten will und das ganze mit einem 16 Bit Timer machten will um eine große Genauigkeit zu haben. Weiß aber nicht so richtig wie ich das machen soll. Ich habe mir überlegt immer den nächsten Zeitpunkt ans Output Match zu übergeben und müsste aber irgendwie der Interrupt-Routine übergeben was an der Reihe ist. Kann mir jemand sagen ob meine Überlegung Erfolg verspricht oder gibt es da einen einfacheren Weg wie man das machen sollte.
Hallo, Überschrift pass tnicht mehr so zum geänderten text da ich erst überlegt hat 2 Timer einzusetzten was aber einen anderen AVR nötig gemacht hätte. Also im extrmsten Fall sind die schwarzen Balken 6 mSek lang.
> Also im extrmsten Fall sind die schwarzen Balken 6 mSek lang.
6ms maximale oder minimale Länge? "Extremfall" kann beides
bedeuten...
Hallo, minimale Länge, es kann aber passieren das sich die Überschneidung verringert wenn der erste Impuls kürzer wird oder der 2te später erfolgen soll und da denke ich wird dann die Probleme geben oder ist es wirklich damit getan einfach eien neune Wert ins Compare Mtch Register zugeben und beim nächsten Takt wird schon drauf reagiert. Deshalb meinte ich evtl. 2 Timer dann hätte man ja genug abstand wenn z.b. Timer 1 Nur Impuls 1 und 3 steuert und Timer 2 nur Impuls 2 und 4.
Was willst du überhaupt damit steuern? - Denn vielleicht geht es ja viel einfacher, als du momentan denkst. Und gib mal minimale UND maximale Schaltzeit an. Wenn 6ms minimal sind, dann hast du ja bei 1MHz sechstausend Takte Zeit. Da bietet es sich an, mittels Timer einen Zeittakt von z.B. 0,1ms zu erzeugen und Register als "Zeitzähler" zu verwenden. Der Vergleich der 4 (8, für ein und aus?) Schaltzeiten kann dann ja per Software erfolgen, falls der AVR nicht noch mit UART, LCD und weißderGeierwas zu kämpfen hat. Wodurch sollen die Impulse ausgelöst werden? Also wonach richtet sich Impulsbeginn, -Dauer und -Überlappung? Was muss der AVR noch alles machen? ...
Hallo, wollte das Projekt eigentlich garnicht nennen, da man das als Überforderung meinerseits abstempeln wird. Wobei ich ja garkeine fertige Lösung suche sondern nur ein paar Tips obs so überhaupt gehen würde. Ich konnte aber auch größere Aktoren nehmen dann reicht eine kleienre Zeit als 6mSek udn es gäbe dann keine Überschneidung mehr. Es geht ja eigentlich nur um ein paar Takte die ich dazwischen Zeit haben müsste um einen neuen Wert in Comare Match Reister zu schreiben. Es sid 4 Aktoren die abwechselnd angesteuert werden die Zeiten betragen zw. 140mSek bis 6mSek bzw. auch kürzer gemacht werden könne wenn ich größere Aktoren nehme.
ms sind Welten Welten für einen MC. Mach es entweder so, wie Hannes es gesagt hat (der Timer erzeugt einen Grundtakt in der geforderten Auflösung), der Rest ist Software. Eine Alternative wäre die Nutzung des OC-Interrupts, bei der du in der OC-ISR folgendes machst: -einen Zähler erhöhen -aufgrund dieses Zählers verzweigen, was zu tun ist -OC mit der Zeit bis zum nächten Ereignis laden. state++ switch (state){ case 1: PIN1=1;OCR1A+=xxx;break; case 2: PIN2=1;OCR1A+=xxx; break; case 3: PIN2=0;OCR1A+=xxx;break; . . } in der letzten Anweisung setzt du "state" wieder auf 0, dann geht der Kram von vorne los. Die passenden OCR-Werte musst du dir ausrechnen, hängen vom Vorteiler und Takt ab.
Hallo, ja der Grundtakt ändert sich aber ständig in der Frequenz sowohl auch in der Pulsweite. Er ist abhängig von einer Scheibe die sich immer dreht, umso schneller sie dreht desto schneller wird auch die Frequenz da an einer bestimmten Stelle der Scheibe was ausgelöst werden soll. Aber ihr habt mir schon geholfen, ich muss jetzt nur schauen das ich die Überschneidung wegbekomme und dann hätte ich ja genug Zeit jedesmal den OC neu zu setzten und in der Interruptroutine mit einem Zähler das ganze zu lösen.
Hallo, @HanneS: Das ganze richtet sich nach einem Kennfeld das die Zeitpunkte abgelegt hat. Im Prinzip kann man sagen höhere Drehzahl längere Impulse. Dazu spielen dann noch ein paar andere Faktoren rein die das ganze dann verkürzen oder auch etwas verlängern.
Hallo Thomas! So wie du das beschreibst (höhere Drehzahl, längere Impulse), klingt das nach einer PWM.
klingt mir eher nach Einspritzung :-) Auch die Überschneidung ist kein Problem: Pin1 setzen, OCR +4,9ms Pin2 setzen, OCR +0,1ms Pin1 aus, OCR +5ms Damit wird der Pin mit 5ms angesteuert, 0,1ms Überlappung.
Hallo, @Santa Klaus. Ne nichts kriminelles. @Crazy Horse hat recht, worum es geht. Ich will da was flexibles machen wo nicht nur die Impulslänge nach hinten verändert wird sondern auch der Beginn der Einspritzung um mich je nach Strömungsverhältnissen anpassen zu können damit z.b. kein Sprit in der Überschneidung verloren geht usw hat viele Gründe die dafür sprechen.
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.