Hallo zusammen Ich habe ein Problem bei der Inbetriebnahme eines DDS AD9954. Ich bekomme kein wirkliches Signal generiert. Es gibt eine Reaktion die ich reproduzieren kann. Nach dem Senden der Werte aus dem 'detailed programming example' des Datenblattes wird mit dem IOUpdate der Differenzausgang auf 0V gezogen. Ein Reset führt wieder zu ca 120mV am Differenzausgang. Die Signale des SPI-Buses liegen am Chip an, /CS wird richtig gesetzt. Reset ist low, ClkModeSelekt ist jetzt low(wegen Oszilator), IOSync wird vor jedem SPI-Befehl kurz auf high gezogen. Ob der SPI-Bus funktioniert kann Ich nicht wirklich sagen. Wenn Ich die Befehle aus dem 'detailed programming example' nicht sende gibt es auch auf das IOUpdate/Reset keine Reaktion. Irgendetwas kommt also beim DDS an. Die verschiedenen SPI-Varianten clk Default high/low und Übernahme an steigender/fallender Flanke habe Ich zur Sicherheit auch ausprobiert. Richtig sollte clk Default low und Übernahme an der steigenden Flanke sein. Ich habe verschiedenste Dinge probiert, ohne PLL, Taktausgabe ein, …. keine weiteren Reaktionen des DDS. Den Quarz habe Ich durch einen Oszilator ersetzt um auch mit dem Oszi etwas messen zu können. Ohne Quarz oder Oszilator lässt sich die beschriebene Reaktion nicht produzieren. Ein Bild des Schaltplans schicke Ich mit. R71 ist jetzt 0Ohm, C128 ist 100n hier der Code für die Initialisierung ---- { // control function register 1 (4 Bytes), // bit 13 autoclear phase //uint8_t cmd1[] = { DDSReg_CFR1, 0x00, 0x00, 0x20, 0x00 }; uint8_t cmd1[] = { DDSReg_CFR1, 0x00, 0x00, 0x22, 0x00 };//bit 9 SDIO=input only fuer SPI, rc = SendToDDS(&my_node, cmd1, sizeof(cmd1)); } if(rc==0){ // control function register 2 (3 Bytes) //bit9 clk_out=1 Ausgabe der Clk auf einem Pin //bit3:7 multipier=20, PLL aus wenn <4 oder >20 //bit2 VCO 250-400MHz(sonst 100-250), uninteressant wenn ohne PLL //uint8_t cmd2[] = { DDSReg_CFR2, 0x00, 0x02, 0xA4 }; //uint8_t cmd2[4] = { DDSReg_CFR2, 0x00, 0x00, 0xA4 };//dies ist die Version aus dem Beispiel //uint8_t cmd2[4] = { DDSReg_CFR2, 0x00, 0x00, 0x00 };//ohne PLL uint8_t cmd2[4] = { DDSReg_CFR2, 0x00, 0x02, 0x00 };//mit Taktausgang, ohne PLL rc = SendToDDS(&my_node, cmd2, sizeof(cmd2)); } if(rc==0){ //frequency tuning word (4 Bytes) uint8_t cmd3[] = { DDSReg_FTW0, 0x4E, 0x14, 0x7a, 0xE1 }; rc = SendToDDS(&my_node, cmd3, sizeof(cmd3)); } if(rc==0){ //phase offset word (2 Bytes) uint8_t cmd4[] = { DDSReg_POW0, 0x80, 0x00 }; rc = SendToDDS(&my_node, cmd4, sizeof(cmd4)); } /* wird wohl nicht gebraucht, weil OSK nicht verwendet wird if(rc==0){ //amplitude scale factor (2 Bytes) uint8_t cmd5[] = { DDSReg_ASF, 0x3f, 0xff }; rc = SendToDDS(&my_node, cmd5, sizeof(cmd5)); }*/ if(rc==0){ DDS_Update(); // hier gibt es eine Reaktion, nur wenn die ersten 3 Initialisierungsbefehle gesendet wurden DDS_Reset(); // nur zum testen } ---- Hat da jemand noch einen Tip für mich? Wie bekomme Ich heraus ob der SPI-Bus funktioniert? Was übersehe Ich hier….. Vielen Dank schon mal. Gruß Klaus
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.