Sweep von 10Hz bis 120Hz erzeugen

Gast #1358682
Lesenswert?

Hallo,

ich stehe glaube ich ein bißchen auf dem Schlauch. Ich möchte einen 
Sweep erzeugen der von 10Hz bis 120Hz in 10Sek läuft. Ganz wichtig ist 
es dabei, das jeder sweep identisch (deckungsgleich) und genau 10sek 
lang ist. Derzeit habe ich das mit einer DDS versucht zu realisieren, 
jedoch bringt das nicht den gewünschten erfolg der genauen 
Reproduzierung, bedeutet die Phasen waren bei jedem Sweep etwas 
verschoben. Womit könnte ich das gewünschte Ergebnis erzielen? Ich hatte 
jetzt gedacht das vielleicht mit einem DAC zu machen und einer LUT zu 
machen, jedoch habe ich keine Ahnung wie ich eine LUT im Flash ablege um 
dann aus dem Programm auf den Bereich zugreifen zu können. Als zweites 
habe ich ein problem mit der Umsetzung in ein Programm. Gibt es dazu 
Beispiele?

Danke für Eure Info
#1358691
Lesenswert?

Hi Nils,

dieses BASCOM Code-Beispiel (für Atmega8) erzeugt eine gewünschte 
Frequenz
von 50 bis 400 Hz!

Jede Sekunde wird die Frequenz automatisch um 50 Hertz erhöht.  Sind 400 
Hz erreicht, fängt die Frequenz wieder bei 50 Hz an.

$regfile = "M8def.dat"
$crystal = 1000000

Drehzahl Alias Portc.5
Config Drehzahl = Output

Dim Myfrequency As Long
Dim Timervorspannung As Long
Dim Jederzweite As Byte
Dim Tmp As Single

Config Timer0 = Timer , Prescale = 64

Config Timer1 = Timer , Prescale = 8
On Timer1 Togglehorst
Enable Timer1

On Ovf0 On_ovf0
Enable Ovf0
Enable Interrupts
Myfrequency = 50

Do
Loop
End

On_ovf0:
Toggle Drehzahl
Timer0 = Timervorspannung
Return

Togglehorst:
Timer1 = 2975 'Timer1 auf 2975 (von 65535 möglichen) vorladen, um 1s zu
erzeugen
If Jederzweite = 0 Then Jederzweite = 1 Else Jederzweite = 0
If Jederzweite = 0 Then Goto Bravo
Myfrequency = Myfrequency + 50
If Myfrequency > 400 Then Myfrequency = 50 'Maximalfrequenz von 30,5
bis  7812 Hertz möglich

Tmp = 1000000       'Quarzoszillator 1 MHz
Tmp = Tmp / 64      'Timer0 Prescale = 64
Tmp = Tmp / Myfrequency
Tmp = Tmp / 2       'Korrektur, um Halbwelle in Vollwelle umzuwandeln
Tmp = Tmp - 1
Tmp = 256 - Tmp     'Timer0 mit einem Wert 0-255 vorladen
Tmp = Round(tmp)    'aus 2.3 wird 2  und  aus 2.8 wird 3
Timervorspannung = Tmp

Bravo:
Return

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren