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
Ja. Wenn's phasenidentisch sein muss ... ausm FPGA heraus erzeugen. Alternativ gibt's n'chip, der das bereits macht, den AD5932.
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
Vielen Dank für die Tipps. Ich denke der AD5932 ist für reproduzierbare Messreihen eine gute Wahl. Damit werde ich mich mal näher beschäftigen. Gibbet davon Beispielcode? Werde ich mich wohl mal auf die Suche nach machen. Grüsse
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.