Hallo, ich möchte ein Sinussignal zwischen 63,00 und 65,00Hz auf cHz genau ausgeben. In der Anordnung habe ich einen Atmega 162 auf STK500. Das Sinussignal hat nur 24 Stützstellen, da der Aktor, der damit betrieben werden soll entsprechend träge ist. Sinus wird mit Timer2(8Bit) fast PWM, kein prescale sowie Timer3 (16Bit) kein prescale über OCR3A fürs Auslesen der LUT erzeugt. Das Sinussignal lasse ich zum Einen auf dem Oszi darstellen, zum Anderen wandle ich das Signal mit einem Schmitt Trigger und füttere damit die ICP von Timer 1 (prescale256). Dazu lasse ich mir die Ergebnisse der Messung in ms*100, also für 15,873 dann 15873 über UART ausgeben. (Periodendauer) Ich hatte vor, damit eine Wertetabelle zu erstellen, indem ich die OCR3A Werte manuell verändere und dann den Periodendauern gegenüberstelle. Daraus wollte ich eine Funktion ableiten, die dann im Projektprogramm aus entsprechenden Messergebnissen die korrekte Frequenz erzeugt. Allerdings bringen die Änderungen des OCR3A in Einzelschritten, also zB. von 2332 zu 2333 keine Änderung in den UART Ergebnissen. Erst nach einigen weiteren Einzelschritten verändert sich auch die Anzeige der ms*100 Im Oszi sind die Änderungen wg der Auflösung auch nur sprunghaft zu sehen. Kann es sein, dass Interruptkonflikte UART/ICP/OCR eine Ursache sind, oder gehe ich das Ganze völlig falsch an? Würde mich über einen Tipp freuen Thomas
Ich denke du geht das Problem falsch an. Ein DDS hat immer 2^N Stuetzstellen. Und wenn man eine hohe Aufloesung will, dann sowieso. Was soll das Messen am ICP ? Zurueckmessen was man ausgegeben hat ?
O.. oha Jetzt ! schrieb: > Ich denke du geht das Problem falsch an. Ein DDS hat immer 2^N > Stuetzstellen. Macht man zwar Sinnvollerweise meist so ist aber kein muss.
Hacky: Er verwendet gar keine DDS! Würde ich aber an dieser Stelle machen! Er gibt immer alle 24 Stützstellen aus, aber mit variabler Ausgabefrequenz. Thomas: Gib mal auf der Seriellen den Timerwert aus, fällt Dir was auf? Verbesserung: 1. DDS verwenden (Jesper's Poor Man DDS) 2. Taktfrequenz erhöhen.
ich wollte es so einfach wie möglich machen, da hier definitiv kein Hifi Sound benötigt wird, sondern nur ein einfaches Signal... @hacky klar wollte ich die Ausgabe messen, mein Oszi löst das nicht auf. @e-profi Du meinst die Timerwerte von welchem Timer? Den PWM oder den Timer 3? Gruß Thomas
@ e-profi Danke, habe es begriffen!!! Typischer Anfängerfehler: Habe das korrekte Ergebniss von Timer1 in Menschenzeit umrechnen lassen und dann rumgenölt, dass es dann eine klar definierte Menge (je nach prescaler)an Rundungsfehlern gibt. Wenn ich µC Zeit messe kann ich ja um rumzuspielen außerhalb des µC daraus machen was ich will, also auch ms mit float soviel ich will und mein PC hergibt ;-)) Das Forum hat mir schon super geholfen! Danke Thomas Achso: Frohes Neues an alle!
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.