mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sweep von 10Hz bis 120Hz erzeugen


Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ?? (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Wenn's phasenidentisch sein muss ... ausm FPGA heraus erzeugen. 
Alternativ gibt's n'chip, der das bereits macht, den AD5932.

Autor: Daniel W. (pegasus)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nils (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.