Hallo,
ich möchte einen Oszillator bauen, den ich mit meinem AVR steuern kann.
Ich habe nur keinen blassen Schimmer, wie ich das machen soll.
Es ist egal, in welchem Frequenzbereich der Oszillator liegt, ich möchte
nur ein bisschen rumprobieren. 25, 50, oder 100khz Raster ist auch in
Ordnung.
Greetz, HFfreak
P.S.: Super wäre auch eine Erklärung der Schaltung.
HFfreak schrieb:> ich möchte einen Oszillator bauen, den ich mit meinem AVR steuern kann.> Ich habe nur keinen blassen Schimmer, wie ich das machen soll.> Es ist egal, in welchem Frequenzbereich der Oszillator liegt, ich möchte> nur ein bisschen rumprobieren. 25, 50, oder 100khz Raster ist auch in> Ordnung.
Also ein DDS-Generator? Dann solltest Du danach googlen, bzw. die
Suchfunktion des Forums nutzen.
Gruss
Harald
HFfreak schrieb:> ich möchte einen Oszillator bauen,
Welche Wellenform?
- Sinus
- Dreieck
- Sägezahn
- Rechteck (am einfachsten!)
> den ich mit meinem AVR steuern kann.>25, 50, oder 100khz Raster ist auch in Ordnung.
Wenn dir ein Rechteck am Ausgang reicht, kannst du das Ganze mit einem
AVR in Minimalbeschaltung realisieren, indem du den integrierten
Timer benutzt.
HFfreak schrieb:> Hallo,>> ich möchte einen Oszillator bauen, den ich mit meinem AVR steuern kann.> Ich habe nur keinen blassen Schimmer, wie ich das machen soll.> Es ist egal, in welchem Frequenzbereich der Oszillator liegt, ich möchte> nur ein bisschen rumprobieren. 25, 50, oder 100khz Raster ist auch in> Ordnung.>>> Greetz, HFfreak>> P.S.: Super wäre auch eine Erklärung der Schaltung.
Na servas... und nun suchst Du einen Privatlehrer hier in diesem
Forum, der Dir
- die Schaltung sucht
- erklärt
- und auch für Rückfragen zur Verfügung stehen soll?
Nicht schlecht, dieser Anspruch..... Naja, was zahlst Du für die
öffentliche Lehrstunde?
Oder hast Du eh schon die üblichen Varianten wie DSS, VCO oder was sonst
noch so zur Verfügung steht mittels der Suchmaschine Deines geringsten
Mißtrauens abgesucht und hast nix gefunden, was dir weiterhilft? Wenn
das so ist - was hast Du gefunden und warum taugt es nicht für Dein
bischen rumprobieren?
Du könntest Dir jedenfalls zuerst einmal die AN14 von Linear Technology
zu Gemüte führen. Die beantwortet Deine Frage zwar nicht vollständig,
ist aber dennoch eine elegante und schöne Versammlung von Schaltungen,
wie einstellbare Oszillatoren gebaut werden können....
Grüße
MiWi
HFfreak schrieb:> Ich habschon ein paar mal gegoogelt. Da bekomme ich n Und ich brauche> ein Sinussignal.ur Patentdokumente.
Aha. was stören Dich Patente? solange Du damit nicht in Serie gehst und
die Teile verkaufst ist das vollkommen egal. Vor allem wenn Du eh nur
"rumprobieren" willst.
Hier im Forum gibts viel, suche hier.
Und nochmals: lies die AN14 von Linear Technology. Oder eine der vielen
ANs von Analog Devices zu deren DDS-Chips. Über die unzähligen anderen
Möglichkeiten im Netz gute Quellen zu AVR-gesteuerten Sinusgeneratoren
zu finden will ich gar nicht weiterschreiben.
Weil die Arbeit des Lernens kann Dir niemand abnehmen. Und da sind die
og. Quellen eine große Hilfe um danach besser Fragen zu stellen.
Grüße
MiWi
Da gibt es so einen Algorythmus um das Frequenzsteuerwort für die
Register zu berechnen, oder so. Im Tutorial
http://www.youtube.com/watch?v=1Cd60S-81Qs so bei 7:50 sagt der, wie man
das berechnet und hier wird das auch noch mal erklärt
http://webshed.org/wiki/AD9850_Arduino
Ich checks aber einfach nicht. Ich möchte im Endprogramm mit einem
Drehimpulsgeber und meinem Arduino durch drehen die Frequenz im 25hz
Raster eingeben. Ich raffs aber einfach nicht, wie das jetzt mit der
Umrechnung einer Frequenz in die Register funktioniert :'( Ich werde die
Platine übrgends seriell ansteuern.
Aber die Funktionsweise eines DDS ist schon klar? Weshalb man welchen
wert bei jedem clock hinzuzaehlen muss ist auch klar? die kommunikation
zum DDS ist auch klar?
Das Datenblatt schon angeschaut? Ich zieh mir eigentlich eher ein
Datenblatt rein, und kein Viedo von UTube
Sorry wegen Doppelpost.
In den Code-Examples steht
unsigned long tuning_word = (frequency * pow(2, 32)) / DDS_CLOCK;
kann ich also unter der Variablen "frequency" eine beliebige Frequenz in
MHZ mit Nachkommastellen [!!!] festlegen, der dann unter dem long
"tuning_word" abgelegt wird, den ich dann mit ?!
Huch, da war einer schneller, als ich schreiben kann ;)
Die serielle und parallele Kommunikation zum DDS und bei welcher Flanke
was gesendet werden muss, ist mir klar. Datenblatt hab ich schon 5x
gelesen. Das Utube Video hat mich nur auf diese Platine gebracht.
Hallo HFfreak
Das ist seine Aussage:
Fout (MHz) = X * 125 MHz / 2^32;
Umgestellt nach X:
X = (Fout MHz) * 2^32 / (125 MHz)
X: Inhalt des Steuerregisters
2^32: größte mit dem Steuerregister darstellbare Zahl
Fout: Ausgangsfrequenz
Jetzt gibt es ein Problem, das Zwischenergebnis wird größer als in eine
Long-Variable passt. Float hat nur 7 relevante Dezimal-Stellen und es
geht Auflösung verloren.
Dafür gibt es einige Lösungswege, die hier im Forum schon diskutiert
wurden. Einfach mal danach suchen.
@smiley46
vielen Dank! Kann ich denn im Programmcode eine Mhz-Zahl mit
Kommastellen verwenden? Ich denke ja. Beispiel: 4,68Mhz
Das mit der Auflösung; ist das nicht eher unrelevant? Um welche Feinheit
handelt es sich denn und, wann bzw., wie macht diese sich negativ
bemerkbar?
@flo
Der Chip ist mir auch schon in den Sinn gekommen. Hat aber zu wenig
Features. Ich will mit meinem Arduino etwas machen.
> Das mit der Auflösung; ist das nicht eher unrelevant?
Möglicherweise würde das für die 25 Hz Auflösung sogar reichen. Bei
kleineren Frequenzen wird die Auflösung auch besser.
Für viele Anwendungen reicht das aber nicht. Warum willst Du Dich
einschränken, wenn es schon fertige Lösungen dafür gibt?
Und wenn ich zum Beispiel das Steuerwort für 10Mhz haben will, muss ich
duch
10 * 2^32 / 125 = 343597383,7
rechnen? Das ist ja in dezimal. Für das Register brauche ich doch
binärcode, oder? Wenn ich das in binär umwandele, kommt
"10100011110101110000101000" raus. Für die Frequenzsteuerung brauche ich
doch 32 Bits? (W0 bis W31)
Der Binärcode hat aber nur 26 Stellen?! Was mache ich dann?
Ich möchte selbst einen kleinen Prüfsender bauen und möchte eine
einstellbare Trägerfrequenz haben.
> = 343597383,7> das in binär umwandele, kommt "10100011110101110000101000" raus.
Ich krieg zu Fuß das raus:
343597383 = 0x147AE147 = 0001 0100 0111 1010 1110 0001 0100 0111
Aber Du möchtest eine feinere Auflösung:
10.000.000 * 2^32 / 125.000.000 =
10.000.025 * 2^32 / 125.000.000 =
oder:
(10.000.000/25) * 2^32 / (125.000.000/25)
(10.000.000/25) * 2^32 / 5.000.000
oder mit 8ppm Fehler:
(10.000.000/25) * 859 = 343.600.000
(10.000.025/25) * 859 = 343.600.859
Auf diese Weise ist noch keine Float Bibliothek notwendig.
Wahrscheinlich hat der Oszillator schon einen größeren Fehler als 8ppm.
flo schrieb:> ein steuer-ic für AD9850 gibts auch schon fertig bei der bucht, heißt> SAD504:
"Was "für ein Ding" ist das denn? Ein Datenblatt dafür kann ich nicht
finden...
...hat da vielleicht jemand etwas Firmware in einen 28poligen Controller
gegossen, auf den Phantasienamen SAD504 getauft, und verkauft das jetzt
als Spezialllösung?