Forum: Mikrocontroller und Digitale Elektronik Sinus in cHz genau mit Atmega162


von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

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

von Purzel H. (hacky)


Lesenswert?

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 ?

von Icke (Gast)


Lesenswert?

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.

von eProfi (Gast)


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.