Hallo, ich würde gerne an einem Pin eines ATmega32M1 ein Rechtecksignal mit einer Frequenz von ca. 100kHz und einem Ein-Aus-Verhältnis von 1/1 ausgeben. Machmal soll jedoch eine Flanke verzögert oder früher kommen. Danach soll jedoch die Frequenz wieder stimmen. Meine Idee ist jetzt den Timer im im CTC Modus laufen zu lassen und in dem Falle der Änderung den das OCR0A Register zu ändern, den Interrupt zu aktivieren und in der ISR den Wert wieder zurück zu setzten. Fällt euch eine bessere Lösung ein? Vielen Dank Simon
Ich bin nicht sicher ob dies die zeitlich optimale Lösung ist. Gibt es vielleicht noch einen PWM Modus der dies eleganter löst? Ein anderer Weg wäre den Zählerwert selbst zu manipulieren. Den müßte man "nur" auslesen, verändern und wieder zrück schreiben. dafür würde jedoch die ISR wegfallen.
AVR Laie schrieb im Beitrag #3217418: > Machmal soll jedoch eine Flanke verzögert oder früher kommen. Danach > soll jedoch die Frequenz wieder stimmen. Das ist keine eindeutige Aussage.. Wenn eine Flanke zu früh kommt, soll sie dann dafür kürzer sein als die anderen "on-Phasen" oder soll sie gleich lang sein wie alle normalen "on-Phasen"? Siehe dazu auch meine Abbildung im Anhang. Gruss
Dave Chappelle schrieb: > Das ist keine eindeutige Aussage.. Da hast du Recht. Danke für die Mühe, womit hast du so schnell die Zeichnung gemacht? Ich brauche den oberen Ablauf.
AVR Laie schrieb im Beitrag #3217584: > Danke für die Mühe, womit hast du so schnell die Zeichnung gemacht? Kein Problem :) Darf es fast nicht sagen aber solche einfachen Zeichnungen erstelle ich mit Eagle :) Auch einfache Blockdiagramme etc. lassen sich damit meiner Meinung mach in einer angemessenen Zeit realisieren. Was du brauchst ist wie schon erwähnt die CTC Funktion des Timers. Bei jedem Erreichen des Compare-Wertes Toggelst du einen Pin. Wenn du einen Takt früher/später auftreten lassen möchtest, musst du lediglich den Compare-Wert ändern. Da der versetzte Takt aber die gleiche Länge haben sollte wie alle anderen, musst du in dem Moment in dem die aufsteigende Flanke der verzögerten/nacheilenden auftritt den Compare Wert gleich wieder auf deinen Anfangswert setzen. Gibt bestimmt noch andere Lösungen, so würde ich aber vorgehen. Gruss EDIT: Habe mir gerade nochmals das Anfangsposting durchgelesen, das ist ja eig. schon deine Idee. Ich würde also auch so vorgehen wie du.
Super, vielen Dank! Dann werde ich das so machen. Gruß
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.