Hallo, für ein Amateurfunkprojekt benötige ich eine Rechteck-Spannung im Bereich 1.8-1.9 MHz als Ersatz für einen Quarz-Oszillator. Diese Festfrequenz soll nur mit einem Arduino und AD9833 erzeugt werden. Ich habe verschiedene Programme ausprobiert. Die laufen aber entweder nur mit externer hardware (Rotary Encoder oä.) oder lassen sich nur per Arduino Terminal Programm manipulieren. Könnt Ihr mir einen Tipp geben, welchen code ich nutzen kann. Vielen Dank Karl
:
Verschoben durch Moderator
Schreibe dein eigenenes Programm! Dank Arduino sollte das nach etwas Lektüre selbst für einen Einsteiger umsetzbar sein. Im Zweifelsfall gibt es auch Bibliotheken, die fertige Funktionen bereitstellen. Google hilft dir bei der Suche.
Danke für die Infos. Ich habe bereits sehr viel rumprobiert und habe zahlreiche sketches probiert, verliere dann aber total den Überblick. Wenn ich nur Sinus bräuchte, würde ich gut mit dem code im Anhang zurechtkommen. Der ist zwar für sweep-Modus geschrieben, funktioniert aber, wenn die Max/Min-Frequenzen gleich sind. Wenn ich den für Rechteck umschreiben könnte, wäre das, was ich brauche! Schöne Grüße Karl
elmo64 schrieb: > https://github.com/Billwilliams1952/AD9833-Library-Arduino aus den Beispielen:
1 | /* |
2 | * ApplySignal.ino |
3 | * 2018 WLWilliams |
4 | * |
5 | * This sketch demonstrates the basic use of the AD9833 DDS module library. |
6 | * Using the ApplySignal to generate and/or change the signal. |
7 | * |
8 | * This program is free software: you can redistribute it and/or modify it under |
9 | * the terms of the GNU General Public License as published by the Free Software Foundation, |
10 | * either version 3 of the License, or (at your option) any later version. |
11 | * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; |
12 | * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
13 | * See the GNU General Public License for more details. You should have received a copy of |
14 | * the GNU General Public License along with this program. |
15 | * If not, see <http://www.gnu.org/licenses/>. |
16 | * |
17 | * This example code is in the public domain. |
18 | * |
19 | * Library code found at: https://github.com/Billwilliams1952/AD9833-Library-Arduino |
20 | * |
21 | */ |
22 | |
23 | #include <AD9833.h> // Include the library |
24 | |
25 | #define FNC_PIN 4 // Can be any digital IO pin |
26 | |
27 | //--------------- Create an AD9833 object ---------------- |
28 | // Note, SCK and MOSI must be connected to CLK and DAT pins on the AD9833 for SPI |
29 | AD9833 gen(FNC_PIN); // Defaults to 25MHz internal reference frequency |
30 | |
31 | void setup() { |
32 | // This MUST be the first command after declaring the AD9833 object |
33 | gen.Begin(); |
34 | |
35 | // Apply a 1600000 Hz square wave using REG0 (register set 0). There are two register sets, |
36 | // REG0 and REG1. |
37 | // Each one can be programmed for: |
38 | // Signal type - SINE_WAVE, TRIANGLE_WAVE, SQUARE_WAVE, and HALF_SQUARE_WAVE |
39 | // Frequency - 0 to 12.5 MHz |
40 | // Phase - 0 to 360 degress (this is only useful if it is 'relative' to some other signal |
41 | // such as the phase difference between REG0 and REG1). |
42 | // In ApplySignal, if Phase is not given, it defaults to 0. |
43 | gen.ApplySignal(SQUARE_WAVE,REG0,1600000); |
44 | |
45 | gen.EnableOutput(true); // Turn ON the output - it defaults to OFF |
46 | // There should be a 1600000 Hz square wave on the output of the AD9833 |
47 | } |
48 | |
49 | void loop() { |
50 | // To change the signal, you can just call ApplySignal again with a new frequency and/or signal |
51 | // type. |
52 | } |
sollte es tun.
Danke. Ich habe das gleich ausprobiert und folgende Fehlermeldeung erhalten: exit status 1 'AD9833' does not name a type; did you mean 'ADC3D'? In das Verzeichnis liegt die .ino-Datei (und die von mir dorthin kopierten Datein AD9833.c und AD9833.h) Fehlt da noch etwas? Schöne Grüße Karl
Karl L. schrieb: > Fehlt da noch etwas? Nach dem Github Archive gibt es keine AD9833.c Fällt dir was auf?
Danke! Folgendes setup: FNC ist D4 CLK ist D13 DATA ist D11 Im Ordner sind jetzt die .ino-Datei und die AD9833.h-Datei. Fehlermeldung, wie oben: exit status 1 'AD9833' does not name a type; did you mean 'ADC3D'?
Karl L. schrieb: > Im Ordner sind jetzt die .ino-Datei und die AD9833.h-Datei. Du liest schon die Installationsanweisungen? [ ] ja [ ] nein Hier nochmal das Wichtigste als Raubkopie: ---------------------------------------------------------- Installation Download the ZIP file and extract into your sketchbook/libraries directory. Exit the Arduino program (if open) and restart it to see the AD9833 library along with its sketch examples. ----------------------------------------------------------
Danke für die Info. Ich habe jetzt unter https://github.com/Billwilliams1952/AD9833-Library-Arduino.git die zip-Datei AD9833-Library-Arduino-master in ein Verzeichnis geladen. Es sind folgende Datein im Verzeichnes: _config.yml AD9833.cpp AD9833.h digitalWriteFast.h keywords.txt README.md Weiterhin sind im Ordner: "examples" die beiden Unterordner: AD9833_test_suite und ApplySignal vorhanden. Wenn ich nun das Arduino-Programm neu starte und AD9833_test_suite.ino lade bekomme ich bei der Überprüfung wieder die Info: exit status 1 'AD9833' does not name a type; did you mean 'ADC3D'? Interpretiere ich die Installationsanweisungen falsch oder was passt da nicht?
Karl L. schrieb: > Ich habe jetzt unter > https://github.com/Billwilliams1952/AD9833-Library-Arduino.git die > zip-Datei AD9833-Library-Arduino-master in ein Verzeichnis geladen. nicht EIN VERZEICHNIS! sondern dort wo deine Arduino Libs sind! ferner muss das -master entfernt werden keine hat -master am Ende Adafruit-MLX90614 Adafruit_CircuitPlayground Adafruit_GFX Adafruit_ILI9341 Adafruit_PCD8544 Adafruit_STMPE610 arduino_994725 Bridge DS1307new Esplora Ethernet FastLED Karl L. schrieb: > Interpretiere ich die Installationsanweisungen falsch ich schätze du hast sie NIE gelesen!
Karl L. schrieb: > Interpretiere ich die Installationsanweisungen falsch oder was passt da > nicht? Du sollst die Anweisungen befolgen und nicht interpretieren.
Wahnsinn! Nicht einmal Copy & Paste funktioniert bei manchen Leuten. OMG!
Aufgemergd schrieb: > Du sollst die Anweisungen befolgen und nicht interpretieren. der Fairness halber sollte man aber mal klarstellen; Download the ZIP file and extract into your sketchbook/libraries directory. Exit the Arduino program (if open) and restart it to see the AD9833 library along with its sketch examples. das mit dem -master entfernen steht DA nicht
:
Bearbeitet durch User
Joachim B. schrieb: > das mit dem -master entfernen steht DA nicht Ist auch nicht erforderlich. Beim Starten durchsucht die IDE das libraries-Verzeichnis. Der Name der jeweiligen Unterverzeichnisse ist dabei egal. Habe z.B. meine eigenen in einem Verzeichnis dessen Namen mit den .h oder .cpp nichts zu tun hat: Adafruit_Unified_Sensor BH1750-master DFRobotDFPlayerMini-master dht11 Eigene
:
Bearbeitet durch User
Aufgemergd schrieb: > Du liest schon die Installationsanweisungen? > > [ ] ja > [ ] nein > > Hier nochmal das Wichtigste als Raubkopie: > ... Als diese Installationsanleitung geschrieben wurde, steckte die Arduino IDE noch in den Kinderschuhen. Unter Werkzeuge gibt es die Funktion Bibliotheken verwalten Diese Funktion ist zum Verwalten von Libraries vorgesehen [ ] ja [ ] nein Einfach mal ins Suchfeld AD9833 eingeben ...
Wolfgang schrieb: > Unter Werkzeuge gibt es die Funktion Bibliotheken verwalten aber die Verwaltungsfunktion kennt nicht alle Pfade, die muss man auch erweitern!
Joachim B. schrieb: > aber die Verwaltungsfunktion kennt nicht alle Pfade, die muss man auch > erweitern! Das brauchte ich noch nie, genau so wenig wie "master" entfernen. Du machst was falsch. leo
leo schrieb: > Du > machst was falsch. ach, ich musste Anfangs noch zusätzliche Boardverwalter.url eintragen
Hallo, man kann auch das .zip aus dem github-Link einfach runterladen, in der IDE Skezch -> Bibliothek einbinden -> .ZIP Bibliothek hinzufügen aus dem Neü auswählre, das zip-File suchen und auswählen und ok sagen... Man muß dann nichtmal die IDE neu starten. Ich greife generell nur von Hand ein, wenn das eine Fehlermeldung ergibt, weil das github-Archiv keine Bibliothek enthält oder falsch gebaut wurde. Gruß aus Berlin Michael
Joachim B. schrieb: > leo schrieb: >> Du >> machst was falsch. > > ach, ich musste Anfangs noch zusätzliche Boardverwalter.url eintragen Ja, wenn es denn nicht die "Standard-Arduinos" sind, ist das der 1. Schritt. leo
Ein sparsamer Mensch wuerde einfach den NCO eines PIC 16LF1507/8/9 nehmen, und den dann voellig ueberfluessigen AD8933 weglassen.
P.S. Den *uino braucht man dann natuerlich auch nicht mehr.
ich habe mir so langsam Atmel Studio 4.18 und ISP abgewöhnt
Hallo, man kann aber auch einen Arduino UNO/Nano nehmen und den AD8933 weglassen. mit dem CTC-Mode reichen da wenige Zeilen Programm und aus dem Pin kommt das Rechteck raus. Gruß aus Berlin Michael
Michael U. schrieb: > man kann aber auch einen Arduino UNO/Nano nehmen und den AD8933 > weglassen. "Rechteck-Spannung im Bereich 1.8-1.9 MHz" Im Prinzip ja, wenn es denn genauer spezifiziert weare. Da reicht ein ATtin13A locker auch aus. leo
Michael U. schrieb: > man kann aber auch einen Arduino UNO/Nano nehmen und den AD8933 > weglassen. Das kommt wohl sehr drauf an, mit welcher Auflösung die Ausgangsfrequenz eingestellt werden soll. Ein ATmega328 ist da mit seinen Bordmitteln schnell am Ende.
> CTC-Mode
Informiere dich doch erstmal darueber was ein NCO ist.
Den oben erwaehnten, kann man in 1/(2^20)-Schritten der
NCO-Eingangsfrequenz durchstimmen.
Mag ja sein dass das reicht.
Der TO wuerde wohl nicht ganz umsonst erstmal eine DDC
einsetzen wollen.
leo schrieb: > "Rechteck-Spannung im Bereich 1.8-1.9 MHz" > > Im Prinzip ja, wenn es denn genauer spezifiziert weare. Da reicht ein > ATtin13A locker auch aus. Woher weisst du, wie fein die Frequenzschritte in dieser Bereich eingestellt werden soll?
Wolfgang schrieb: > Woher weisst du, wie fein die Frequenzschritte in dieser Bereich > eingestellt werden soll? Darum habe ich geschrieben ... > wenn es denn genauer spezifiziert weare. leo
Besten Dank für Eure Unterstützung und Geduld. Mit dem sketch von Horst (Gast) bin ich echt zufrieden. Ich suchte ja einen Quarzersatz im Bereich von 1.8 bis 1.9 Mhz (und zum Testen 1.3 bis 2.0 Mhz). Abstimmschritte von 1 khz reichen mir da aus. Die Ausgabe von Sinus ist in diesem Bereich super. Was den Rechteck betrifft, reicht mir die Qualität nicht aus. Die Zuführung zum Oszi ist abgeschirmt und kurz. Das Überschwingen stört nicht, sondern die Oberwellen (?), siehe Foto.Ist das üblich? Sollte hier ein Oberwellenfilter benutzt werden oder eine andere Schaltungen? Bei einem Aufbau mit Quarz (74HC04)sind keine Oberwellen sichtbar. Schöne Grüße Karl
Karl L. schrieb: > sondern die Oberwellen (?), siehe Foto. Das was an Unzulänglichkeit zu sehen ist nennt man Jitter. Es deuted entweder eine schlechte Einstellung der Triggerung deines Oszilloskops hin (stelle den Trigger Level auf halbe Rechteck-Amplitude) oder auf Nebenwellen die systembedingt (DDS, schlechter DAC) mit gewisser Stärke vorhanden sind. Siehe auch Datenblatt des AD9833. Ich vermute eine Misch-Erscheinung aus beiden Effekten. Karl L. schrieb: > Bei einem Aufbau mit Quarz (74HC04)sind keine Oberwellen sichtbar. Du meinst keine Nebenlinien. Oberwellen sind garantiert vorhanden sonst hättest du kein Rechteck-SIgnal.
Karl L. schrieb: > Sollte hier ein Oberwellenfilter benutzt werden oder eine > andere Schaltungen? Durch ein Oberwellenfilter bekämest du kein Rechteck durch. Ein Rechteck lebt aber davon, dass mindestens die dritte und fünfte Oberwelle durch kommen. Du wirst ein ungünstiges Verhältnis von Eingangs- zu Ausgangsfrequenz beim DDS-Generator haben. Dann kann der bei einer so hohen Rechteckfrequenz prinzipbedingt nichts anders tun, als mit der Flanke zu zappeln.
Karl L. schrieb: > Die Ausgabe von Sinus ist > in diesem Bereich super. Was den Rechteck betrifft, reicht mir die > Qualität nicht aus. Es schmerzt einen beim Lesen. Zuerst ist es dir offensichtlich NICHT möglich, das Manual zum DDS-Chip zu lesen und die wenigen Register dieses AD9833 richtig zu beschreiben. Dann hapert es sogar beim Kopieren von bereits vorgekautem Code. Und jetzt begreifst du es nicht einmal, was dabei herauskommt, wenn du ein 33 MHz DDS benutzt, um 2 MHz Ausgangssignal zu erzeugen. Bei sowas hast du etwa 16 Stützstellen pro Periode - was erwartest du da, wenn du simple Rechteck-Ausgabe wählst? Hättest du wenigstens mal einen einzigen Blick ins Manual geworfen, dann hättest du sehen können, daß dieser Chip auch nen symmetrischen Rechteck ausgeben kann - mit halber Frequenz. Das hätte dann wenigstens ein exaktes 1:1 Tastverhältnis ergeben. Hättest du auch nur ein wenig dich um das Verstehen des Funktionsprinzips bemüht, dann hättest du einen ganz anderen Weg beschritten, nämlich so: - den AD9833 einen Sinus ausgeben lassen - einen ordentlichen L-C-Tiefpaß mit Grenzfrequenz von so etwa 2..3 MHz dahinter gesetzt. Alternativ ein echtes Bandfilter für deinen interessierenden Bereich. - einen Komparator hinter den Tiefpaß gesetzt. So würde man das machen, um ein sauberes Rechtecksignal aus diesem DDS zu bekommen. W.S.
W.S. schrieb: > Hättest du wenigstens mal einen einzigen Blick ins Manual geworfen, > dann hättest du sehen können, daß dieser Chip auch nen symmetrischen > Rechteck ausgeben kann - mit halber Frequenz. Das hätte dann wenigstens > ein exaktes 1:1 Tastverhältnis ergeben. Noch einer, der das Prinzip eines DDS-Generators nicht verstanden hat, aber meint, große Töne spuken zu müssen :-( Der Rechteckausgang kann seinen Pegel nur mit Flanken des Eingangstaktes ändern. Ein sauberes 1:1 Testverhältnis ist also gar nicht bei jeder Frequenz möglich.
Um dem ganzen Hohn etwas entgegenzusetzen sei gesagt: Der TO tat sich bereits sehr schwer überhaupt eine fertige Arduino Lib einzubinden und zu compilieren. Da sollte es nicht verwundern wenn er die Prinzipien einer Digitalen Direktsynthese nicht versteht zumal dies nicht wie bei einem regulären (analogen) Funktionsgenerator funktioniert. Ich gehe mal soweit zu behaupten dass ein Arduino-User der nicht zufällig von höheren Weihen heruntersteigt es auch prinzipiell nicht versteht wie ein DDS funktioniert selbst wenn er es einmal (das erste Mal) erklärt bekommt.
Aufgemergd schrieb: > Da sollte es nicht verwundern wenn er die Prinzipien einer > Digitalen Direktsynthese nicht versteht zumal dies nicht > wie bei einem regulären (analogen) Funktionsgenerator > funktioniert. Ich sprach von W.S.
Wolfgang schrieb: > Der Rechteckausgang kann seinen Pegel nur mit Flanken des Eingangstaktes > ändern. Ein sauberes 1:1 Testverhältnis ist also gar nicht bei jeder > Frequenz möglich. Das hat W.S. bereits ausführlich angesprochen: W.S. schrieb: > um 2 MHz Ausgangssignal zu erzeugen. Bei sowas > hast du etwa 16 Stützstellen pro Periode - was erwartest du da, wenn du > simple Rechteck-Ausgabe wählst?
Aufgemergd schrieb: > Um dem ganzen Hohn etwas entgegenzusetzen sei gesagt: ... und dies sei allen gesagt die blind auf den TO eindreschen ohne dessen Background zu kennen oder nichts darüber wissen wollen.
Aufgemergd schrieb: > Das hat W.S. bereits ausführlich angesprochen: > > W.S. schrieb: >> um 2 MHz Ausgangssignal zu erzeugen. Bei sowas >> hast du etwa 16 Stützstellen pro Periode - was erwartest du da, wenn du >> simple Rechteck-Ausgabe wählst? Liest du eigentlich, was ich geschrieben habe? Wolfgang schrieb: > W.S. schrieb: >> Hättest du wenigstens mal einen einzigen Blick ins Manual geworfen, >> dann hättest du sehen können, daß dieser Chip auch nen symmetrischen >> Rechteck ausgeben kann - mit halber Frequenz. Das hätte dann wenigstens >> ein exaktes 1:1 Tastverhältnis ergeben. > ... Ein sauberes 1:1 Testverhältnis ist also gar nicht bei jeder > Frequenz möglich.
Danke für Eure Tipps und Hinweise. Ich bin an folgendem Punkt: Der Arduino läuft mit dem sketch von Horst (Gast). Der AD9833 gibt jetzt eine Sinusspannung aus. Diese wird mit einer Emitterschaltung (2N2222) spannungsverstärkt. Anschließend gehts noch auf 1/4 des hcf4093 (2N2222 und 4093 an 8 Volt). Mit dem Ergebnis bin ich jetzt wirklich zufrieden (Spitze-Spitze 8Volt, so wie ich das brauche - siehe Anhang). Beste Grüße Karl
:
Bearbeitet durch User
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.