mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzen Wobbel´n


Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe mir mit dem AD9835 einen DDS Funktionsgenerator gebaut, 
der auch soweit läuft. Ich wollte noch die Funktion des Wobbeln´s mit 
einfügen, weiss aber nicht so recht wie. Die eingabe der Start und 
Endfrequenz ist ja kein problem, aber wie schaffe ich es, das der MC 
kontinuirlich zwischen diesen Frequenzen hin und her wandert ?
Programmiert ist das ganze mit Bascom.

Bitte um hilfe !

Danke!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer aufsetzen, der in regelmässigen Zeitabständen
einen Interrupt auslöst. Im Interrupt die Vorgabefrequenz
um einen bestimmen Betrag erhöhen oder erniedrigen.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich die Zeitabstände im Programm ändern ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob du das kannst, weis ich nicht :-)
Prinzipiell kann man das, klar.

Ich empfehle mal einen Blick ins Handbuch bzw.
die online Hilfe zu werfen.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich die Wobbelgeschw. in Hz angebe, wie berechne ich daraus die 
Timerwerte ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu musst du erst mal sagen, in welchem Modus du den
Timer betreiben willst.
Wenn's nicht BASCOM wäre, hätte ich den CTC Modus des
Timer 1 vorgeschlagen (Timer zählt bis zu einem
vorgegebenem Wert, wenn Wert erricht: Timer auf 0 zurücksetzen
und Interrupt auslösen). Wie dieser Modus bei BASCOM heist
musst du schon selbst rausfinden.

Um auszurechnen wie weit der Timer zählen soll und welchen
Vorteiler:
Du hast die Wobbelfrequenz. In einem Wobbeldurchgang
muss die Freuenz einmal von langsam nach schnell und
wieder zurück verändert werden. In wievielen Stufen
gedenkst du das zu tun?
Wenn du das weist, kannst du dir ausrechnen, wieviel
Zeit von einer Freuenzänderung zur nächsten vergehen muss.
DIe Taktfrequenz deines µC kennst du. Du jetzt weist
in welchen Zeitabständen du einen Interrupt brauchst
kannst du über die Prozessorfreuenz (und einem ev. Vorteiler)
ausrechnen wie weit der Zähler zählen muss. Diesen Wert
als Endwert für den CTC Modus vorgeben und fertig.

Keine Angst: Die notwendigen Berechnungen gehen über
die 4 Grundrechnungsarten nicht hinaus. Mit ein
bischen nachdenken folgt eins völlig logisch aus dem
anderen. Man muss nur ein bischen nachdenken was man
da eigentlich tut und was man erreichen möchte.

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im angehangenen Testprogramm zählt er zwar hoch, aber nicht runter ????
Warum ??? Ist nicht leicht mit den Timern....


$regfile = "m8def.dat"
$crystal = 7372800

Dim Fstart As Long , Fende As Long , F1 As Long
Dim I As Byte , Z As Byte

Cls

Fstart = 1000
Fende = 2000
I = 0
Z = 10


Config Timer1 = Timer , Prescale = 64
On Timer1 Timer_irq
Const Timervorgabe = 54016

Enable Timer1
Enable Interrupts


Do
Upperline
Lcd "F=" ; F1
Loop

Timer_irq:
  Timer1 = Timervorgabe

  If I = 0 Then
   F1 = Fstart
   Fstart = Fstart + Z

      If Fstart = Fende Then
         I = 1
      End If
  End If

  If I = 1 Then
   Fstart = Fstart - z
      If Fstart = F1 Then
         I = 0
      End If
   End If

Return

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Timer_irq:
>   Timer1 = Timervorgabe
>
>   If I = 0 Then
>    F1 = Fstart
>    Fstart = Fstart + Z
>
>       If Fstart = Fende Then
>          I = 1
>       End If
>   End If
>
>   If I = 1 Then
>    Fstart = Fstart - z
>       If Fstart = F1 Then
>          I = 0
>       End If
>    End If

Lass die Werte für Fstart und Fende in Ruhe.
Du willst nur in jedem Timerinterrupt F1 hochzählen
oder erniedrigen.

Wenn das Richtungsflag auf 'nach oben' steht, willst du
F1 erhöhen. Erreichst du dadurch Fende, dann wird die
Richtung auf 'nach unten' umgeschaltet. Wird beim
Runterzählen wieder Fstart erreicht, wird die Richtung
wieder auf 'nach oben' umgestellt.

In keinem Fall musst du aber Fstart oder Fende verändern.
Das willst du auch nicht, denn das sind deine Eckdaten
an denen die Richtung umgestellt wird.

Im übrigen: Ist garantiert, dass Fstart + n * z
(n ganzzahlig, z beliebig) immer Fende ergibt?
Ich denke mal: eher nicht. Das heist es wird nicht
sehr schlau sein, die Richtungsumschaltung dann zu machen
wenn F1 exakt Fende ist.
Bsp:
  FStart 1000
  FEnde  2000
  z       300

F1 nimmt dann die Werte an:
   1000
   1300
   1600
   1900
   2200

Mit 2200 bist du schon grösser als die geforderten 2000.
Allerdings war F1 niemals exakt gleich 2000 und daher wird
auch die Umschaltung auf 'nach unten' nie durchgeführt.



Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mag ja vieleicht blöd klingen, aber wie stelle ich die zählrichtung um ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine Grundidee war doch gar nicht schlecht.
Nur die Ausführung war lausig :-)


 Timer_irq:
   Timer1 = Timervorgabe

   If I = 0 Then
     F1 = F1 + z
     if F1 >= Fende then
       I = 1
     end if

   else
     F1 = F1 - z
     if F1 <= Fstart then
       I = 0
     end if
   end if



Wenn der Wobbler eingeschaltet wird, setzt
du F1 auf Fstart und I auf 0

Autor: Mr-400-Volt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh klasse, danke dir für deine hilfe............Er Wobbelt :-))

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.