Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DDS AM Modulator mit Arduino
#1
Hallo Radiofreunde,

beim Thema Programmierung habe ich ja so meine Defizite, deshalb habe ich auch bisher wenig mit Mikroprozessoren gemacht. Dabei gibt es gerade heute viele interessante Schaltkreise die per DDS (Direct Digital Synthesis) eine Sinusschwingung mit fast beliebiger Frequenz erzeugen können. Um diese DDS Signalgeneratoren zu konfigurieren ist allerdings ein Mikroprozessor erforderlich der die nötigen Steuerkommandos an den DDS Chip schickt.

Ein solcher DDS Baustein ist z.B. der AD9835 den ich im Projekt mit RFT-Heinz damals verwendet habe. Nun ist Heinz ja leider von uns gegangen und ich habe keine Möglichkeit das Projekt fortzuführen. Es funktioniert zwar aber ich kann keine Veränderungen am derzeitigen Status vornehmen.

Durch einen Kollegen und das RM.org bin ich nun auf den "Arduino" gestoßen. Es handelt sich dabei um ein kleines Bord mit einem ATMega Mikroprozessor und etwas Peripherie sowie einer USB Buchse. Diese dient der Programmierung und Stromversorgung des kleinen Mikroprozessorbords. Auch gibt es eine Entwicklungsumgebung die auf allen Betriebssystemen verfügbar ist:

https://www.arduino.cc/

Als Ubuntu Nutzer hat mich das besonders gefreut. Diese Lösung erfreut sich großer Beliebtheit und die Programmierung ist selbst für einen "Programmiermuffel" wie ich einer bin zu erlernen.

Zu meiner großen Freude habe ich nun ein Projekt entdeckt das ihr hier findet:

http://www.ad7c.com/projects/ad9850-dds-vfo/

Richard Visokey (AD7C) ist Funkamateur und hat einen VFO (Variable Frequency Oscillator) mit dem AD9850 DDS IC und einem Arduino als Steuerlösung entwickelt. Ein VFO ist im Prinzip ein abstimmbarer Oszillator. Hier wird der DDS Chip AD9850 so angesteuert, dass er Frequenzen von 1MHz bis 30MHz erzeugen kann.

Die Arduino  Software von AD7C habe ich nun in einen Arduino Nano programmiert und etwas an meine Belange angepasst. So habe ich den Frequenzbereich nach unten erweitert um auch LW abzudecken, die Anzeige auf kHz umgestellt sowie einen 9kHz Rasterschritt ergänzt.

Ein Versuchsaufbau funktioniert schon sehr gut. Hier ein Bild:

   

Hier nochmal rechts das DDS Modul und links das Arduino Nano Modul das die Steuerung erledigt:

   

Das Reizvolle an dieser Lösung ist die Erweiterbarkeit per Software. Mein Plan ist es dieses Projekt auch zum erlernen der Programmierung des Arduino zu nutzen. So habe ich vor noch einige Ergänzungen zu machen, wie z.B. Speicher für beliebte Frequenzen und eine andere Art die Schrittweite zu verändern. Das schöne ist, dass ich das alles vom Sofa aus testen kann wenn ich es auf dem Laptop programmiert habe.

Die Module gibt es über EBAY sehr günstig. Das AD9850 DDS Modul kostet ca. 10$ und das Arduino Nano Modul ca 4$. Da habe ich mir gleich mal einen Vorrat angelegt...

Ich werde euch berichten über den Fortgang des Projektes.
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren
#2
Klasse, Semir, dass Du den Schritt nach vorne gewagt hast!
Grüße aus Wassenberg,
Norbert.
Zitieren
#3
Semir, willkommen bei den maker!
Gibt es die Möglichkeit den AD9850 als Modulator zu benutzen?
Hier hat jemand eine Sweep-Funktion dazugesetzt, damit könnte man den Generator zum Wobbler erweitern.
Zitieren
#4
Klar geht das Jupp,

habe ich doch hier http://radio-bastler.de/forum/showthread.php?tid=7657 gemacht.
Eine AM-Modulation geht mit kleinem Lötaufwand auch direkt auf dem DDS-Modul.

Gruß Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
#5
Hallo Zusammen,

den AD9850 kann man als AM Modulator nutzen. Es ist dazu eine kleine Modifkation notwendig. Die AM Modulation erfolgt über den R-Set Pin 12 am AD9850. Dieser Pin ist über einem 3k9 Widerstand mit Masse verbunden der den Strom des A/D Wandlers im AD9850 bestimmt. Damit lässt sich die Ausgangsamplitude einstellen. Wenn dieser Strom nun mit der NF moduliert wird ergibt sich eine sehr schöne lineare AM Modulation. Allerdings enthält das Ausgangssignal noch die NF im Spektrum. Mit einem Hochpass kann diese jedoch problemlos ausgefiltert werden. Ich werde das und die Modifkation in einem weiteren Post zeigen.
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren
#6
Hallo Semir,

schön, das Ergebnis der Arbeit zu sehen, von denen Du mir schon berichtet hattest.
Ich werde mich auch mal um einen AD9850 bemühen.

PS: Hast Du mit dem 8x24 Display schon experimentiert ?

Gruß,
Daniel
Zitieren
#7
(20.06.2017, 17:13)Siemens78 schrieb: PS: Hast Du mit dem 8x24 Display schon experimentiert ?

Hallo Daniel,

Das 8x24 Display ist von Samsung und verwendet den Mitsubishi M50530 Controller. Ich habe eine Library dafür gefunden aber noch nichts damit gemacht. Das hat im Moment auch keine hohe Priorität, da ich erst einmal etwas Erfahrung mit den Basics der Programmierung der Arduinos sammeln muss bevor ich mich mit exotischen Displays befasse.

Wenn man Reiten lernt fängt man ja auch nicht mit der Dressur an sondern lernt erst mal die grundlegenden Hilfen um das liebe Tier überhaupt in die halbwegs richtige Richtung zu bewegen. die Feinheiten kommen dann später.

Wenn die Software mit dem 16x2 Display läuft werde ich versuchen Sie an das 20x1 anzupassen. Dieses verwendet den gleichen HD44780 Controller wie das 16x2, deshalb erwarte ich, dass die normale LCD Library dieses auch ansteuern kann. Diese Aufgabe erscheint mir als Einsteiger einfacher.

Viele Grüße

Semir

PS: Wenn Du noch ein paar von den Displays auftreiben kannst auch von den 20x1 habe ich Interesse.
Zitieren
#8
Von den 8x24 hab ich noch ein paar "gepflückt" Smile
Zitieren
#9
Hallo Daniel,
Ich hätte Interesse an einem 8x24 Display.....
Grüße aus Wassenberg,
Norbert.
Zitieren
#10
Hallo Zusammen,

heute habe ich wieder ein Update zu diesem Projekt. Meine Programmierkenntnisse machen Fortschritte und so habe ich nun an dem Projekt vieles ergänzt. Hier erst mal ein Bild der Experimentierplatine:

   

folgende Dinge habe ich zusätzlich implementiert:

1. Speichertasten für Frequenzen.

Diese funktionieren wie bei den meisten Autoradios: Lange drauf drücken speichert die aktuelle Frequenz. Ein kurzer Druck wählt die gespeicherte Frequenz und gibt Sie aus.

Um nur einen Port zu belegen habe ich die Tasten Spannungskodiert d.h. jede Taste erzeugt eine andere Spannung am Eingang des Arduino und daran erkennt dieser welche Taste gedrückt wurde. Eine Sonderstellung nimmt der oberste Wert ein, also 4,8-5V wird dieser erkannt ist das das Signal die Hardware auszuschalten.

Hier ein Bild der Widerstandsmatrix:

   

Der gerade gewählte Speicher wird im Display angezeigt hier ist es die Nr. 6 (M:6). Wird die Frequenz geändert wechselt die Anzeige zu "Var" um anzuzeigen, dass dies aktuelle Frequenz nicht gespeichert ist.

2. Bedienerfreundlichere Umstellung der Frequenzschrittweite

In der originalen Software konnte die Schrittweite nur in eine Richtung fortgeschaltet werden in der Folge 10Hz>100Hz>500Hz>...10kHz>100kHz>1MHz. Nun geht es in beide Richtungen und sehr komfortabel. Wenn der Inkrementalgeber beim Drehen gedrückt gehalten wird ändert sich die Schrittweite vorwärts oder Rückwärts je nach Drehrichtung. Ein einfaches Drehen ohne Drücken ändert die Frequenz.

3. Das Gerät möchte ich mit zwei 16850 LiIon Zellen betreiben. Diese haben je 3,7V und sollten nicht unter 2,8V entladen werden. Also habe ich ein Batterieanzeige programmiert die den Ladezustand mit einer Zahl 0...9 Anzeigt. Wobei 9 bedeutet "Absolut Voll" und "0" = "Ganz Leer".  mit dieser Lösung läuft das Gerät ca. 10h durchgehend. Im Display ist das die B:6 Anzeige, in diesem Photo ist der Akku noch recht voll.

4. Zum Schutz der Akkus gegen Tiefentladung habe ich eine automatische Abschaltung programmiert die hardwaremäßig mit einem bistabilen Relais arbeitet. Damit ist auch ein Ein- und Ausschalten per Powertaster möglich. Fällt die Spannung der Akkus unter 6,1V schaltet sich das Gerät automatisch ab. Auch weitere Versuche es wieder einzuschalten enden in einem neuerlichen automatischen Ausschalten. Das Relais arbeitet komplett verlustfrei und der Verbrauch im ausgeschalteten Zustand ist 0µA.

Ich bin im Moment sehr zufrieden mit den Ergebnissen. Wie heißt es doch bei einem Schwedischen Möbelhaus: Entdecke die Möglichkeiten....Das Programmieren macht einen Mordsspaß und das wird sicher nicht mein letztes Projekt sein.

Das Programm habe ich angehängt. Ich habe es ausführlich kommentiert. Wer möchte kann es gerne selbst mal ausprobieren oder für eigene Projekte verwenden. Die Belegung der Pins steht drin nur die externe Beschaltung muss ich noch dokumentieren.

Den Arduino Nano gibt es bei Eb-y im Zehnerpack für €3 das Stück das Display mit 16x02 Zeichen kostet ebenfalls nur ca. 4€. Die AD9850 Platine kostet ca. 8€ der Rest ist Kleinkram. so kann man für ca. €25 einen Modulator bauen der alle Frequenzen von LW bis KW 30MHz abdeckt und eine exzellente Modulation bietet.


Angehängte Dateien
.zip   AD9850_LCD_ROTARY_WMENUS_SN_09.zip (Größe: 5,1 KB / Downloads: 30)
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren
#11
Hallo Semir,

die Idee der Stationsspeicherung (analog) finde ich sehr gut!
Dadurch werden Pins gespart.

Könntest Du uns bitte auch die Schaltung der AM Modulation zeigen?
Grüße aus Wassenberg,
Norbert.
Zitieren
#12
Zwei Möglichkeiten der Modulation des 9850 sind hier aufgezeigt.

http://www.wumpus-gollum-forum.de/forum/...188_2.html
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
#13
(09.07.2017, 09:06)norbert_w schrieb: Hallo Semir,

die Idee der Stationsspeicherung (analog) finde ich sehr gut!
Dadurch werden Pins gespart..

mit einer solchen Widerstands-Matrix realisiere ich auch meine Preset-Schaltungen um z.B. HF-TR Empfänger umzurüsten.
Gruß,
Jupp
-----------------------------
wenn man nur den Hammer kennt, sieht jedes Problem aus wie ein Nagel
--------
Zensur findet im Endgerät statt (CCC)
Zitieren
#14
@Jupp - dann hast auch Du sehr gute Ideen.
Einmal etwas ernsthafter, die Idee als solches ist ja nicht neu, das Konzept kann
an vielen Stellen im Internet nachgelesen werde.
Aaaaber es im richtigen Moment anzuwenden ist eine andere Sache.

@Bernhard - danke für den link. Mal sehen, wie es funktioniert.
Grüße aus Wassenberg,
Norbert.
Zitieren
#15
Hallo Zusammen,

hier nun auf Norberts Anregung die Modifikation des AD9850 Moduls um damit eine AM Modulation zu erzeugen. Der AD9850 besitzt einen Pin "R-Set" dieser ist über einen 3,9kΩ Widerstand mit Masse verbunden. Der Strom der von diesem Pin nach Masse fließt bestimmt die Ausgangsamplitude des erzeugten Sinussignals. Eine einfache Modifikation ermöglicht somit eine sehr saubere Amplitudenmodulation. Allerdings ist im modulierten Signalspektrum noch das NF Signal im Basisband enthalten. Dieses muss mit Hilfe eines Hochpasses unterdrückt werden. Ich verwende dazu einen 1nF Kondensator am Ausgang gefolgt von einer 330µH Drossel nach Masse. Am Punkt Kondensator/Drossel liegt dann die reine HF an - mit Modulation.

Hier ein Bild der Modifikation:

   
Viele Grüße
Semir
---------------------------------
"Alle sagten: Das geht nicht. Dann kam einer der wußte das nicht, und hat es gemacht."
(Prof. Hilbert Meyer, Uni Oldenburg)
Zitieren
#16
(09.07.2017, 02:37)Semir schrieb: 3. Das Gerät möchte ich mit zwei 16850 LiIon Zellen betreiben. Diese haben je 3,7V und sollten nicht unter 2,8V entladen werden. Also habe ich ein Batterieanzeige programmiert die den Ladezustand mit einer Zahl 0...9 Anzeigt. Wobei 9 bedeutet "Absolut Voll" und "0" = "Ganz Leer".  mit dieser Lösung läuft das Gerät ca. 10h durchgehend. Im Display ist das die B:6 Anzeige, in diesem Photo ist der Akku noch recht voll.

Man könnte den AVR noch in den Sleep-Modus versetzen und die Laufzeit verlängern. Das DDS-Modul braucht den Prozessor nur um die Frequenz einzustellen, danach läuft das Modul selbstständig weiter, ebenso das LCD-Display. Die Stromaufnahme des AVR im Tiefschlaf wird mit wenigen uA angegeben. Hier mal ein Beispiel für eine erfolgreiche Diät: http://s6z.de/cms/index.php/component/co...er-arduino
Selbst wenn man den Prozessor nur jede Sekunde oder jede Minute aufweckt um das Display zu aktualisieren (Batterieanzeige) und dann wieder schlafen legt, spart man einiges an Strom.

Viele Bastlergrüße
Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung. 
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Zitieren
#17
Vielen Dank für die ausführliche der Modifikation, Semir!

Jetzt muss ich die Lupe rauskramen und schauen, wie die Leiterbahnen
bei meinem Modul liegen und ich die Änderungen vornehmen kann.
Grüße aus Wassenberg,
Norbert.
Zitieren
#18
Hallo in die Runde,

habe in den letzten Tagen ein wenig mit der Software experimentiert und einige Veränderungen vorgenommen.
Die Frequenzanzeige, Schrittweitenänderung (STP) flickern jetzt nicht mehr...
Zusätzlich kann mittels #define ein I2C-Display    o d e r   ein parallel verdrahtetes Displays selektiert werden.
Leider muss bei Benutzung von I2C der Draht für die Stationstasten von A5 auf A3 umgelegt werden (ist in der Software berücksichtigt).

Einfach mal probieren, viel Spaß!


Angehängte Dateien
.zip   AD9850_I2C_LCD.zip (Größe: 5,29 KB / Downloads: 22)
Grüße aus Wassenberg,
Norbert.
Zitieren
#19
Ich lese da auch interessiert mit, allerdings schreibe ich Software in C und schiebe Daten über ICSP ins Atmega und beherrscht noch nicht vollig über C.
Allerdings nutze ich kaum Library, schreibe meist selber für Eingabe & Ausgabe-Gerät. Das klappt in der Regel relativ gut.

Jedoch ist es richtige Entscheidung ins µC Welt einzusteigen... kaum moderne Bastelei kommt ohne µC aus..
Und mometan bastelte ich lieber mit µC und so anstelle Birne..

Grüss
Matt
Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt.
Zitieren
#20
Danke für den Thread, diesen VFO hätte ich auch gerne zum Trägersetzen
um eine Frequenz zu finden.

Ich habe die .ino mal kompilieren lassen und bekomme diese Fehlermeldung:
   
Smiley57 

LG
old.
Zitieren


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  AM Modulator mit Trägersteuerung und XCF8.. Semir 31 1.538 03.09.2019, 02:05
Letzter Beitrag: navi
  AM Stereo (CQUAM) Modulator mit TBA120 und TBA520 Semir 71 19.296 24.05.2019, 23:35
Letzter Beitrag: Semir
  Universell einsetzbarer TV Modulator Semir 17 1.030 21.05.2019, 16:36
Letzter Beitrag: Reflex-Kalle
  AM- Modulator mit integrierten Signalquellen scotty 11 1.111 08.03.2019, 22:26
Letzter Beitrag: Semir
  AM Modulator mit NEC µPC1391 Semir 16 4.768 23.08.2018, 10:19
Letzter Beitrag: navi

Gehe zu: