--gelöscht--
Experimentieren mit der DDS AD9912
-
-
--gelöscht--
-
Hallo Eric
Ich habe Dirr eine PN geschickt.
73 de Andreas
-
Hallo Eric und Uwe!
Na also ich habs ja gewusst, dass ihr da was ausgebrütet habt :]
Hab den code gerade für 19,44 MHz getestet (= Beispiel im datasheet Seite17). Funktioniert prima. Siehe im Anhang das Ergebnis.
FTW = &h04FA05143BF7 = 5.471.873.547.255
Danke!
Und ein Aufruf an alle anderen "Wasserkocher": Stellt doch alle Eure BASCOM code Fragmente rein, dann sind wir schneller fertig.Hab den Eric&Uwe Code gleich eingebaut in ein AD9912 Testprogramm als Attachment zum Testen. Der Nachteil von Double ist da auch gleich spürbar: der Flash Verbrauch steigt von 35% auf 49%.
Eure Methode hat mir übrigens Robert Jenni per Mail am 19.2.2009 zur Lösung des Problems geschrieben. Leider habe ich es damals nicht richtig verstanden.
Beste Grüße
Christian -
Hallo zusammen,
Betrifft CSB1-Signal auf dem DDS-CTRL-Board:
Laut Stromlaufplan V1.0 wird das CSB1-Signal, also das Chipselect-Signal für die DDS1, am Prozessorpin 5 ausgegeben und an das Pin 5 von JP8 geführt.
Dies entspricht nicht dem Layout des DDS-CTRL Boards. Hier ist das Prozessorpin 5 mit dem Pin 4 von JP8 verbunden.
Pin 5 von JP8 hat Verbindung mit Prozessorpin 2.Wenn man also davon ausgeht, daß das Prozessorpin 5 als CSB1-Signal deklariert wurde, steht es am Pin 4 von JP8 zur Verfügung.
Ohne Einsicht in den Quellcode ist das eine Vermutung.
Dies ist aber nur für den Personenkreis relevant, die das Steuerprogramm von Wulf-Gerd (DL1FAC) verwenden wollen.Gruß, peter01
-
Hallo
bis auf das grafische Display ist die Controller-Hardware nun fertig vorhanden. Im Anhang jeweils die Vorder- und Hinterseite der Keypad Unit und des 7-Segment Displays für die Frequenzanzeige. Die Menüs werden im grafischen Display angezeigt; dieses werde ich in den nächsten Tagen realisieren.
Dann gilt es noch die ganzen BASCOM Testcodes zu einem vollständigem Programm zu vereinen. Dazu wechsle ich dann vom ATmega164P auf den ATmega644P, da vor allem das grafische Display viel Speicherplatz erfordert.Bilder (Schaltplan) vom Controller gibt es im Thread schon weiter oben
https://www.qrpforum.de/attachment.php?attachmentid=5253
https://www.qrpforum.de/attachment.php?attachmentid=5254Beste Grüße
Christian -
Hallo zusammen,
hier nun einige Bilder meiner Layout-Korrekturen:
- DDS-Ctrl Board (Bild1 Top, Bild2 Bottom)
Hier wurde eine kleine Durchkontaktierniete (Hohlniete) verwendet.- DDS-Main Board (Bild3)
Hier diente eine kurze Drahtbrücke als Verbindung. Man sieht auch das fehlende Leiterbahnelement.Der Lötstopplack wurde mittels einen kleinen Dreikantschabers entfernt und mit einen Glasfaserstiftes nachbearbeitet.
Gruß, peter01
-
Hallo zusammen,
dank Peter01 bin ich nun auch stolzer Besitzer des kompletten Platinensatztes für den DDS9912.
Durch die gute Vorarbeit hier im Forum wurde mir doch vieles erleichtert und ich möchte mich an dieser Stelle erstmal bedanken.
Einiges hat aber leider nicht geklappt und doch einige Tage und Nächte gefordert:
Ich habe als Vorlage die Bascom Version CH_AD9912_03 verwendet.
Die geänderte Version habe ich mit CH_AD9912_03_mod bezeichnet.- Die Prozessorpins sind an das Layout mit LCD-Display angepasst.
- Der Reset musste wegen der Transistorstufe invertiert werden.
- Die SPI geschwindikeit habe ich erhöht, bis 2,7 MHz funktioniert das einwandfrei.
- Die Initialisierung musste auf den default Wert H18 geändert werden, vorher ging
gar nichts.
- Die Variable Freq (double) musste für die LCD Anzeige in einen Long (Freq_anz) übergeben werden, da Bascom anscheinend mit den Double-Werten nicht zurechtkommt.Die Funktion Bitwait Spsr.7 , Set verstehe ich nicht ganz, da laut Datenblatt im
SPI Statusregister des Prozessors nur bei global eingeschalteten Interrupt dieses
Bit wieder gelöscht werden kann.
Ich habe bisher nur die Bascom Befehle verwendet, währe aber für ein kurzes Info
dankbar.Anbei die geänderte Version CH-AD9912_03_mod.
Eigentlich hatte ich vor den DDS-Chip etwas (1250MHz) zu übertackten.
Mit dem AD9858 der auch nur bis 1GHz geeignet ist, ging dies unproblematisch.Bei meinem Test mit unsymetrischer Einspeisung des Clocks, konnte ich allerdings
mit dem AD9912 nur bis 1150MHz schaffen.
An diesem Punkt ist der Pegel unkritisch mit -20 dBm steigen die spurius erheblich
an. Bei 0 dBm kein Problem.Bei 1250 MHz ist der gewünschte Träger kaum sichtbar und egal ob +13 dBm oder
weniger Pegel für den Clock Takt, hier geht gar nichs mehr.Ein langer erster Beitrag aber ich denke für den ein oder anderen doch wichtig.
Viele Grüße
Sepp
-
Hallo Sepp!
Einige Anmerkungen zu meinem BASCOM Code:
1. Grundsätzlich: Der vorhandene Code hat ausschliesslich als Beispiel für den Test des AD9912 Moduls gedient. Das hier Anpassungen nötig sind, ist vollkommen klar! Ich selbst arbeite nicht mit dem Platinensatz, sondern setze nur das AD9912 Modul ein, der Rest ist Eigenentwicklung.
2. Danke für den Hinweis mit dem 2,7 MHz SPI Takt; das spart mir einige Versuche.
3. zu Init h18: Ist damit der Serial Config Register Wert gemeint?
Es sind dann die Werte für Soft Reset = D2,D5 und Long Instructions = D3,D4 zu ändern.
Bitte um nähere Hinweise, das erscheint mir wichtig.4. zu Double Freq
Ja natürlich, STR kann nur integer Werte in string wandeln. Das ist da so noch drinnen weil Freq ursprünglich (vor der FTW Berechnung mit double) sowieso ein LONG war. Sorry.5. zu Bitwait: hier wird SPIF nur gelesen. Verständlicher ist wahrscheinlich das gleichwertige
While SPSR.7 = 0
' Warte bis SPIF = 1
WendAngehängt ist übrigens nicht deine geänderte modifizierte Datei, sondern meine ursprüngliche...
Beste Grüße
Christian -
Hallo zusammen,
da ich den SysClock extern einspeise, habe ich zu diesem Zweck auf den DDS-Main Board einen MMCX-Steckverbinder montiert.
Die Anschlussbeinchen wurden dazu etwas gekürzt und mit der Massefläche verlötet.
Der Mittelpin wurde mit dem entsprechenden Platinenanschluss verlötet.Das Bild zeigt diese Modifikation.
Gruß, peter01
-
Hallo Christian,
kein guter Einstieg gleich die falsche Datei angehängt sorry.
Zu 1:
Es sollte kein Angriff gegen dich sein, sondern nur eine Hilfestellung falls andere
Bastler mit diesem Bascom-Code und den Platinensatz arbeiten wollen.
Ich bin froh für dieses "Grundgerüst" nochmals danke.Zu 2:
Ich habe es auch bei 5.4MHz mit "Spsr = 1" ' Double speed on ATMega32 leider ohne
Funktion getestet.Hier wird auch die Kabellänge der Datenleitungen eine Rolle spielen.
Ich verwende im Moment 691.2 kHz.Zu3:
Mit H18 meine ich die Serial Port Configuration Adesse Hex00 des DDS9912.
Vermutlich besteht ein Problem mit den Tri-State Pins S1-S4 die ja ohne Terminierungswiderstände o.ä. auf der DDS Platine vorhanden sind.Also ohne den Wert H18 konnte ich lediglich die 155.5MHz Testfrequenz bei 1GHZ Clock bekommen.Zu4:
Kein Problem, läuft ja jetzt.Zu5:
Das ist mir immer noch nicht klar, dieser Bitwait Befehl wartet bis der Prozessor ein
Byte geschrieben hat aber wie setzt Du dieses Bit das ja nach dem erseten gesendeten Byte eine 1 bekommt wieder zurück?• Bit 7 – SPIF: SPI Interrupt Flag When a serial transfer is complete, the SPIF Flag is set. An interrupt is generated if SPIE in SPCR is set and global interrupts are enabled. If SS is an input and is driven low when the SPI is in Master mode, this will also set the SPIF Flag. SPIF is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, the SPIF bit is cleared by first reading the SPI Status Register with SPIF set, then accessing the SPI Data Register (SPDR).
Der globale Interrupt ist doch nicht eingeschaltet, der SS-Pin ist auch nicht angeklemmt.
Das verstehe ich einfach noch nicht sorry.So jetzt nochmals die geänderte Datei, ich hatte es gestern leider etwas eilig und bitte
um Entschuldigung.Viele Grüße
Sepp
-
Hallo Sepp!
Gleich mal zu 1) Hab das nicht als Angriff gewertet
Im Gegenteil, ich bin sehr froh wenn endlich ein Feedback kommt! Ich hab das geschrieben, weil ich darauf aufmerksam machen wollte (vor allem für die Leute im Hintergrund!), dass der Code keinesfalls fertig ist und nur noch geflasht werden braucht
ad 3) Damit werde ich mich noch spielen wenn ich meinen Prototyp soweit habe. Einstweilen geht es ja h18.
ad5) Im Gesamtprogramm ist der Interrupt global eingeschalten, da 2 Interrupts für Tastatur und Drehgeber benötigt werden. Das hat sich leider nicht im Test-Code niedergeschlagen. Statt Bitwait hab ich bisher immer die While Schleife verwendet siehe auch http://home.pages.at/chirt/Projects…d/FreqContr.zip
(da wird per SPI der AD9951 angesteuert). Deine Einwände verstehe ich gut und habe dazu in der Eile keine überzeugende Antwort außer dass dieser Code auch in der Praxis funktioniertDazu gleich die Frage: Funktioniert Dein modifizierter Code mit Bitwait in der Realität?
Beste Grüße
Christian -
Hallo Christian,
der mod.Bascom Code funktioniert in der Realität mit den Platinensatz.
Wenn ich den Bitwaitbefehl auskommentiere geht nichts, obwohl bei mir der Interrupt nicht eingeschaltet ist.
Vermutlich genügt das warten des ersten gesendeten Bytes. Ich werde nochmal einzeln auskommentieren und testen.Was mich noch wundert ganz am Anfang steht ein Clockoszillator mit der Schaltung von DG4RBF für 1200 MHz hat jemand den DDS mit einer so hohen Clockfrequenz zum laufen gebracht ?
Wie bereits geschrieben versagt mein DDS bei dieser Frequenz den Dienst. Am Spectrumanalyzer sind nur noch sehr viele Spurius zu sehen natürlich auch die gewünschte Ausgangsfrequenz (bei mir auf 300MHz) aber mit ca -40 dBm und die Spurius deulich höher.
Wenn man den CLK-Pegel bei 1GHz auf -25 - -30 dBm verringert bekommt man das gleiche Ergebnis mit den Spurius. Aber ich habe bei 1250 MHz den CLK bis +13 dBm ohne Erfolg erhöht.
Der PLL und C-Mos Teil ist bei diesem Setup abgeschaltet!!Wichtig!!
Da die SPI Schnittstelle sich die Signale für DDS und Programmierstecker (JP1) teilt,
kann es je nach Programmieradaper zu Fehlfunktionen der DDS nach der Programmierung kommen.
Das bedeutet Programmierstecker nach erfolgreichem aufspielen der Software abziehen!!Viele Grüße
Sepp
-
--gelöscht--
-
Hallo BASCOM Nutzer!
Sepp hat es oben bestätigt, der BASCOM code funktioniert
Zitatder mod.Bascom Code funktioniert in der Realität
Auch wenn es noch ein paar Unklarheiten gibt, so steht fest, dass es auch mit BASCOM geht. Das ganze drumherum mit Tastatur und Display usw. ist Standard.
Werde mich daher nun auf meinen eigenen "Hobby Platinensatz" für das AD9912 Modul konzentrieren.Da der BASCOM Code jedesmal binnen Minuten locker 10x einem download unterliegt, gibt es vermutlich doch eine schöne Anzahl von BASCOM Adepten. Es wäre schön wenn zumindest einige davon an der Code-Entwicklung mitmachen würden
Beste Grüße
Christian -
--gelöscht--
-
Hallo zusammen,
also mein Platinensatz ist im Prinzip fertig aufgebaut.
Was bei mir im Moment noch fehlt:
LD1117V33 --> ersetzt durch LM317 und zwei Widerstände ergibt exakt 3,3 V
LM1117DT1,8 --> ersetzt durch zwei in Reihe gesch. 1N4007 ergibt 1,75V bei Betrieb.
Die vier Tiefpassfilter --> ersetzt durch 0R Brücken, kann aber im Moment noch nicht bestellt werden solange die Ref_Clock Frequenz nicht ermittelt ist.eric1
Anbei ein paar Bilder der Clock-Einspeisung.
Hier wurde ein PLL-Oszillator verwendet, der aber nur einen max. Ziehbereich von
1230MHz - 1270MHz hat.
Als zweiter Test wurde ein R&S SML03 für die Clockerzeugung verwendet.Deinen Hinweis mit Balun werde ich noch testen, vielleicht klappt es ja noch.
Also der Bitwait Befehl funktioniert, egal in welcher Zeile ich den Befehl deaktiviere geht
nichts mehr.
Ich habe zwar immer noch nicht verstanden wie es funktioniert aber ich nehme es als gegeben hin...Viele Grüße
Sepp
-
Hallo Sepp!
Ich habe mein DDS-Board noch nicht fertig, möchte aber anmerken, daß ich bei den anfänglichen Experimenten mit diesem DDS-Modul auf dem Testboard sehr große Abhängigkeiten der "Arbeitseigenschaften" der 9912-DDS von den Betriebsspannungen hatte. Kleine Spannungseinbrüche oder gar irgendwie geartete Schwingungen der Betriebsspannung führten u.a. zu einer extremen Zunahme der Spurs.
Bei Deiner Methode der 1,8V-Versorgung ist keine stabile Spannung möglich, die Flußspannung ist zu sehr vom Strom abhängig und dieser wiederum wird von der Taktfrequenz für den DDS beeinflußt. Vielleicht könnte das die Ursache für den von Dir beschriebenen Fehler bei der Übertaktung sein.
Die beiden Dioden sind (hoffentlich) nur als Notlösung gedacht, aber es wäre einen Versuch Wert, die 1,8V-Schiene mal mit dem Scope anzugucken.73, Andreas, DH7AZ
-
Hallo Andreas,
nach dem ich die ganzen Beiträge zu der DDS-Geschichte durchgelesen hatte, habe ich
auch den Beitrag mit Spurius, Spannung und 10 fach größeren Abblock C gesehen.
Ich habe mir natürlich die DC-Spannungen mit dem Scope angesehen, konnte aber in den Bereich DC-100MHz keine Schwingungen oder AC-Anteile sehen.Die Spannungsversorgung ist derzeit eine Notlösung, bis die bereits (nicht alltäglichen) bestellten Spannungsregler ankommen.
Aber bei einem Vergleich bei 1GHz Clock zu 1.25GHz Clock liefert die Messung keine Änderung der 1.8V Spannung, die eben bei 1.75V liegt.Der Strom steigt um ca. 30 mA an.
Vielleicht ist das tatsächlich das Problem, daß der DDS-Chip bei dieser Frequenz nicht mehr spielt. Aber das 0.05V eine Änderung bringt würde mich schon stark wundern,
das Datenblatt des LM1117DT 1.8 besagt auch 1.782V - 1.818V bei konstant 10 mA.
Dann kommen noch 0.4% Load Regulation hinzu.Jetzt werde ich mich erst mal an den Balun wagen, um zu sehen ob dies eine Änderung
bringt.Viele Grüße
Sepp
-
Hallo Sepp!
Danke für die Info. Unter diesen Umständen bliebe dann wirklich nur noch die symmetrische Einspeisung des Taktes als Lösung. Daß der DDS so dicht über den Specs partout nicht mehr will, kann ich kaum glauben.
Viel Erfolg mit dem Balun!73, Andreas, DH7AZ
-