Hi, wie ich Frequenzen mit einem ATTiny ausgebe, habe ich in der Doku gesehen. Allerdings will ich jetzt keine stabile Frequenz abgeben, sondern diese variabel gestalten, also dass diese nach jeder Periode um einen gewissen Betrag größer oder kleiner wird. Jedes mal die Register neu programmieren klappt nicht, das ist zu langsam. Deswegen meine Frage: kann man das auch den ATTiny machen lassen, also dass dieser selbsttätig die PWM-Parameter (linear) so ändert, dass sich die Frequenz entsprechend ändert? Ach ja, alles ist 50% Duty Cycle, kleine Abweichungen im Puls-Pause-Verhältnis wären auch kein Problem. Danke!
Schau mal nach ctc Modul. Damit kannst am besten variable Frequenzen erzeugen, und Beim Überlauf des Timers eine neuen Wert setzten. Gruß Matthias
Der schwierigste Teil ist das Studium der zu Grunde liegenden Prinzipien, aber DDS gibt 'ne Menge Treffer hier im Forum, dem Netz und den einschlägigen Online-Nachschlagewerken.
Hi Vielleicht sagst du erst mal um welchen Frequenzbereich und um welchen ATTIny es hier geht. MfG Spess
Squeezer schrieb: > Ach ja, alles ist 50% Duty Cycle, kleine Abweichungen im > Puls-Pause-Verhältnis wären auch kein Problem. Dann solltest du das nicht PWM nennen und die Leser verunsichern ...
spess53 schrieb: > Vielleicht sagst du erst mal um welchen Frequenzbereich und um welchen > ATTIny es hier geht. Es ist ein ATTiny85 und die höchste zu erreichende Frequenz sollte bei mindestens 10 kHz liegen, gerne auch mehr. Weniger als 5 Hz am unteren Ende sind nicht nötig.
1. die Kombination aus "höchste zu erreichende Frequenz" und "mindestens" ist nicht sinnvoll. 2. Im Datenblatt steht ganz sicher, mit welchem Takt der/die Timer versorgt werden koennen. Wenn Du dann den Timer auf 1 stellst und jeweils einen Ausgangspin umschalten laesst, sollte 0,5*Takt als hoechste Frequenz herauskommen. wendelsberg
Dietrich L. schrieb: > Squeezer schrieb: >> Ach ja, alles ist 50% Duty Cycle, kleine Abweichungen im >> Puls-Pause-Verhältnis wären auch kein Problem. > > Dann solltest du das nicht PWM nennen und die Leser verunsichern ... Wollte ich auch schon sagen. Er will offenbar die Frequenz ändern, aber nicht das Tastverhältnis. Genau das Gegenteil von dem, was man mit einer PWM normalerweise macht. wendelsberg schrieb: > 1. die Kombination aus "höchste zu erreichende Frequenz" und > "mindestens" ist nicht sinnvoll. Warum nicht? > 2. Im Datenblatt steht ganz sicher, mit welchem Takt der/die Timer > versorgt werden koennen. Wenn Du dann den Timer auf 1 stellst und > jeweils einen Ausgangspin umschalten laesst, sollte 0,5*Takt als > hoechste Frequenz herauskommen. Dann allerdings nur in extrem groben Schritten verstellbar.
wendelsberg schrieb: > 1. die Kombination aus "höchste zu erreichende Frequenz" und > "mindestens" ist nicht sinnvoll. Was ist daran nicht sinnvoll? Es geht um einen darzustellenen Frequenzbereich, dessen oberes Ende (=höchste zu erreichende Frequenz) bei 10 kHz liegen soll (=mindestens), aber auch mehr sein darf (=mindestens). Ich habe mir den CTC-Modus jetzt mal angesehen: https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR#CTC_Clear_Timer_on_Compare_Match_.28Auto_Reload.29 beschreibt fast genau was ich haben will, allerdings möchte ich das ohne Auto-Reload machen (um in der ISR den nächsten, anderen Couter-Schwellwert setzten zu können und erst dann den Timer wieder loslaufen zu lassen). Wie kann ich den Auto-Reload also abschalten? Oder läuft der Timer generell nicht weiter, so lange ich mich in der ISR befinde? Danke!
Hi >Es ist ein ATTiny85 und die höchste zu erreichende Frequenz sollte bei >mindestens 10 kHz liegen, gerne auch mehr. Der ATTiny hat eine integrierte PLL. Da kann der Timer1 mit 64 MHz laufe. Das ergibt ein maximale Frequenz bei CTC von 32MHz. Reicht das? > allerdings möchte ich das ohne >Auto-Reload machen (um in der ISR den nächsten, anderen >Couter-Schwellwert setzten zu können und erst dann den Timer wieder >loslaufen zu lassen). Wie kann ich den Auto-Reload also abschalten? Oder >läuft der Timer generell nicht weiter, so lange ich mich in der ISR >befinde? Der Timer läuft weiter. Aber wo ist das Problem? MfG spess
spess53 schrieb: > Der Timer läuft weiter. Aber wo ist das Problem? Es ist ein Rechenzeitproblem: sollte bei höheren Frequenzen der Code in der ISR aus irgend welchen Gründen nicht rechtzeitig den neuen Timer-Compare-Wert berechnen können, so ist es besser, wenn der nächste Takt etwas verzögert beginnt als wenn der letzte Takt noch mal wiederholt werden würde (was ja theoretisch passieren könnte, wenn der Timer sofort weiterläuft). Außerdem stellt sich mir die Frage: was passiert, wenn der Timer weiterläuft, wieder den Timer-Compare-Wert erreicht aber der Code die ISR vom vorherigen Takt noch nicht verlassen hat? (Ja ich weiß dass ISR-Code so kurz wie möglich sein soll, ich würde es halt nur gerne wissen).
Hi Erkläre einfach mal genau was du vor hast oder was das werden soll. MfG Spess
Das ist schnell erklärt: ich will einen Schrittmotor ansteuern (Step/Direction-Signale mit Anfahr- und Abbremsrampen).
Squeezer schrieb: > Das ist schnell erklärt: ich will einen Schrittmotor ansteuern > (Step/Direction-Signale mit Anfahr- und Abbremsrampen). Und du denkst, daß es da zwingend erforderlich ist, daß die Frequenz nach jedem einzelnen Step neu berechnet wird? Glaubst du ernsthaft, daß dein Schrittmotor es merken wird, ob du seine Geschwindigkeit 10.000 mal pro Sekunde änderst oder "nur" 1.000 mal pro Sekunde?
Nein, das merkt er nicht, aber ich muss die Anzahl der Schritte mitzählen, um die aktuelle Position zu ermitteln.
Das Zählen kannst du in der ISO machen und bei 10kHz seh ich da kein Problem. 10.000 Schritte pro Sekunde wird er eh nicht schaffen. ;)
Hi >Das ist schnell erklärt: ich will einen Schrittmotor ansteuern >(Step/Direction-Signale mit Anfahr- und Abbremsrampen). Gibt es schon von Atmel: AppNote: http://www.atmel.com/Images/doc8017.pdf Software: http://www.atmel.com/images/AVR446.zip MfG Spess
spess53 schrieb: > Gibt es schon von Atmel: Hm, ich weiß nicht, was diese Impementierung genau macht, aber die verwendet 4 Ausgangsleitungen - mit einer Step/Direction-Steuerung hat das scheinbar nix zu tun.
Hi >Hm, ich weiß nicht, was diese Impementierung genau macht, aber die >verwendet 4 Ausgangsleitungen - mit einer Step/Direction-Steuerung hat >das scheinbar nix zu tun. Das hat nur mit der Schrittmorsteuerung zu tun. Die befindet sich in den Dateien sm_driver.c/h. Die eigentlich Berechnung der Rampen findet in speed_ctl.c/h statt. Also einfach die Schrittmotorsteuerung ändern und fertig ist die Laube. MfG Spess
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.