Forum: Mikrocontroller und Digitale Elektronik AD9851 & Schattenspiele am Oszi


von Max M. (gbl1)


Lesenswert?

Hallo,

mittlerweile verzweifelt, versuche ich einen AD9851 vernünftig 
anzusteuern.
Ich habe hier das Phänomen, dass bei gewissen Frequenzen das Signal am 
Oszi einen "Schatten" hat.
Aktuell bei 3950kHz+9000kHz=12950MHz. Das Sinus ist gut sichtbar und der 
Schatten scheint um 180° Phasenverschoben zu sein.

Mein Tuningword berechne ich aktuell so (mikroPASCAL):
1
function AD9851_Calculate_Frequency_V2(inFrequency, inReferenceOszillator: dword): dword;
2
const Two30   = 1073741824;
3
var  phase: dword;
4
     r: real;
5
Begin
6
  r:=Two30/inReferenceOszillator;
7
  Phase:=round(inFrequency*4*R);
8
  result:=phase;
9
end;

Übertragen werden zuerst die Frequenz-TuningBits und danach das 
ControllByte.
Das ControlByte ist %00000001

ist der Sinus am Oszi "sauber", zeigt auch der Spektrumanalyzer einen 
sauberen Peak an.

Zu meiner Frage:
Wie kann ich die "Schattenspiele" verhindern?


LG
Günter

von ich (Gast)


Lesenswert?

13 Gigaherz?:D

von Max M. (gbl1)


Lesenswert?

Nein.
Hab den Punkt vergessen.

Aktuell bei 3950kHz+9000kHz=12.950MHz. Das Sinus ist gut sichtbar und 
der
Schatten scheint um 180° Phasenverschoben zu sein.

LG
Günter

von Max M. (gbl1)


Angehängte Dateien:

Lesenswert?

Hmm - kann mir denn keiner helfen?

Update:

Ich habe mit http://designtools.analog.com/dtDDSWeb/dtDDSMain.aspx das 
Tuningwort berechnet und übertragen.

Mein RefClock ist 30MHz
1
  AD9851_Send_FTW(%01110011001100110011001100110011);                           
2
  AD9851_Send_CtrlW(%00000000);

am Oszi kommt das (Anhang) raus.


Manche Frequenzen sind jedoch "astrein".

Daher gehe ich von einer korrekten Übertragung aus.

LG
Günter

von Achim (Gast)


Lesenswert?

In dem Codenschnipsel in deinem letzten Post versuchst du ein 13.5 MHz 
Signal mit einer DDS Clock von 30 MHz zu erzeugen. Wenn du dir das 
ungefilterte Signal mal mit dem Design Tool auf der Analog Devices 
Website anschaust wirst du sehen dass das schwer zu filtern ist, um noch 
einen halbwegs vernünftigen Sinus zu bekommen. Mit dem 6x Clock 
Multiplier würde schon das ungefilterte Signal viel besser sein und ist 
daher auch leichter weiter zu verarbeiten.

Wie sieht dein Ausgangsfilter den aus?

von Max M. (gbl1)


Lesenswert?

Hallo,

ich verwende als DDS-60 Modul genau dieses hier:

http://midnightdesignsolutions.com/dds60/index.html#Schematic

LG
Günter

von Alex H. (hoal) Benutzerseite


Lesenswert?

Wie Achim schon schrieb:
Wähle bei http://designtools.analog.com/dtDDSWeb/dtDDSMain.aspx den 
AD9851 aus, wähle
Reference Clock:      30 MHz
Output Frequency:     13500 KHz
Ref Clock Multiplier: Bypass (no multiplier),
stelle unten den Filter auf Lowpass mit 60 MHz Grenzfrequenz und sieh 
dir das Ergebnis an.

Mit aktiviertem 6x Multiplier
1
AD9851_Send_CtrlW(%10000000);
sollte es besser aussehen.

von Achim (Gast)


Lesenswert?

Alex H. schrieb:
> Mit aktiviertem 6x Multiplier
> AD9851_Send_CtrlW(%10000000);
> sollte es besser aussehen.

Ich glaube es müsste AD9851_Send_CtrlW(%00000001) heißen. Außerdem muss 
dann natürlich auch das frequency tunig word entsprechen geändert 
werden.

von Alex H. (hoal) Benutzerseite


Lesenswert?

Achim schrieb:
> Ich glaube es müsste AD9851_Send_CtrlW(%00000001) heißen. Außerdem muss
> dann natürlich auch das frequency tunig word entsprechen geändert
> werden.

Stimmt natürlich beides.

von Max M. (gbl1)


Lesenswert?

Danke euch allen.

Wie ich im Eröffnungspost geschrieben habe,


   Aktuell bei 3950kHz+9000kHz=12950MHz.
   Das Sinus ist gut sichtbar und der Schatten
   scheint um 180° Phasenverschoben zu sein.
   [...]
   Übertragen werden zuerst die Frequenz-TuningBits und danach das
   ControllByte. Das ControlByte ist %00000001

   Ist der Sinus am Oszi "sauber", zeigt auch der
   Spektrumanalyzer einen sauberen Peak an.

Habe ich zuerst auch mit x6 versucht.

Ich verstehe jedoch nicht, wieso das beschriebene Problem nicht bei 
jeder Frequenz auftritt. Und ich bin ratlos wie ich nun weiter vorgehen 
könnte.

PS: Die AD9851er Funktionen übertragen die Bits von rechts nach links.


Noch eine Frage: das x6 Bit? Schaltet dieses intern im AD9851 einen 
Frequenzvervielfacher hinzu?

LG
Günter

von Alex H. (hoal) Benutzerseite


Lesenswert?

Günter W. schrieb:
> Danke euch allen.
>
> Wie ich im Eröffnungspost geschrieben habe,
>
>
>    Aktuell bei 3950kHz+9000kHz=12950MHz.
>    Das Sinus ist gut sichtbar und der Schatten
>    scheint um 180° Phasenverschoben zu sein.
>    [...]
>    Übertragen werden zuerst die Frequenz-TuningBits und danach das
>    ControllByte. Das ControlByte ist %00000001
>
>    Ist der Sinus am Oszi "sauber", zeigt auch der
>    Spektrumanalyzer einen sauberen Peak an.
>
> Habe ich zuerst auch mit x6 versucht.
>
> Ich verstehe jedoch nicht, wieso das beschriebene Problem nicht bei
> jeder Frequenz auftritt. Und ich bin ratlos wie ich nun weiter vorgehen
> könnte.

Ich bin auch ratlos, wie dein Signal aussieht. Hat der Schatten die 
selbe Frequenz ist aber um 180° verschoben? Dann würde er sich mit dem 
eigentlichen Signal auslöschen.

Wie sieht dein Aufbau aus? Triggert dein Oszi vielleicht auf beide 
Flanken?

> Noch eine Frage: das x6 Bit? Schaltet dieses intern im AD9851 einen
> Frequenzvervielfacher hinzu?

Ja, dadurch wird die Referenzfrequenz versechsfacht. Damit sollte 
zumindest das Signal aus deinem Beitrag 
Beitrag "Re: AD9851 & Schattenspiele am Oszi" 
besser aussehen.

Hast du eigentlich schon das Datenblatt durchgelesen?

von Max M. (gbl1)


Angehängte Dateien:

Lesenswert?

Hallo Alex,

ich danke dir für deine Mühe, mein teilweise unzulängliches Posting zu 
verstehen. Ich war leider erst heute in der Lage zwei Fotos von meinem 
Oszi zu machen.

Alex H. schrieb:

> Ich bin auch ratlos, wie dein Signal aussieht. Hat der Schatten die
> selbe Frequenz ist aber um 180° verschoben? Dann würde er sich mit dem
> eigentlichen Signal auslöschen.

Ich habe zwei Screenshots angehängt. Das kaputte Signal entsteht bei 
19.450 MHz.


> Wie sieht dein Aufbau aus? Triggert dein Oszi vielleicht auf beide
> Flanken?

Ich habe hier ein TRIO 60 MHz Oszi. Ich glaube nicht dass es auf beiden 
Flanken triggert. Wissen jedoch tue ich es nicht.

Mein Aufbau:

  DDS: DDS-60 vom AMQRP Club 
(http://www.midnightdesignsolutions.com/dds60/index.html#Schematic), Der 
Oszillator läuft mit 30MHz
  CPU: ATMEGA 16 auf easyAVR6 Board.
  Sprache: mikroPASCAL. Habe keinen Programmer für dieses Board und 
BASCOM. C kann ich nicht so gut.

  Das DDS Modul ist am PORT B angeschlossen. Stromversorgung (5V) via 
easyAVR Board.

Software:
  Ich habe die Frequenzen sowohl mit x6 als auch mit x1 berechnet.
  Bei x6 verwende ich als Referenzfrequenz dann 180MHz anstatt von 
30MHz.


Dieses FTW beispielsweise wurde mit dem Onlinetool berechnet. Als 
RefClock habe ich 30MHz eingegeben.
  AD9851_Send_FTW(%0001010010001101000101011001111); 
// 6x  14.450MHz Phasenüberlagert
  AD9851_Send_CtrlW(%00000001);


Letztlich ist das Ergebnis gleich. Es spielt auch keine Rolle ob die 
Frequenzen selbst in der CPU berechnet werden oder via Designtool als 
Festfrequenz übertragen werden. Bei manchen Frequenzen ist der Output 
sauber (Oszi und Spectrumanalyzer), bei manchen eben nicht.


LG
Günter

von Bernhard S. (b_spitzer)


Lesenswert?

Günter W. schrieb:
>> Wie sieht dein Aufbau aus? Triggert dein Oszi vielleicht auf beide
>> Flanken?
>
> Ich habe hier ein TRIO 60 MHz Oszi. Ich glaube nicht dass es auf beiden
> Flanken triggert. Wissen jedoch tue ich es nicht.

Das Bild 07122010.jpg sieht nach schlechtem Trigger aus. Versuche mal 
HF-Trigger statt AC (oder umgekehrt), Triggerlevel nicht Auto, sondern 
Manuell, evtl. Holdoff-Regler drehen.

tschuessle
Bernhard

von Max M. (gbl1)


Angehängte Dateien:

Lesenswert?

Danke Bernhard für deinen Input.
Leider hat das auch nicht zum Erfolg geführt.

In den Dateien befindet sich der Output bei 10.4 MHz.
Ich meine, wenn das OSZI nicht richtig Triggern kann, dann müsste beim 
Spektrumanalyzer ein deutlicher PEAK zu sehen sein.


IDEE: Ist hier jemand des C's oder ASM mächtig? Ein Refernzprogramm wäre 
echt toll.


Board: easyAVR6
CPU: ATMEGA16, extern CLK mit 8MHz Quarz

var
    b9851_fqud: sbit at PORTB.1;       // LOAD
    b9851_clk:  sbit at PORTB.2;        // CLOCK
    b9851_data: sbit at PORTB.3;       // DATA

für 10.4 MHz + 9MHz = 19.4 MHz

Ich habe leider kein TTL Speicheroszi. Somit kann ich nur hoffen, die 
Bits korrekt zu übertragen.

LG
Günter

von Achim (Gast)


Lesenswert?

Also dein letztes Oszilloskop Bild sieht immer noch so aus als ob der 6x 
clock multiplier nicht an sein. Ändert sich an der Ausgabefrequenz denn 
etwas wenn du nur das control word änderst? Also den clock multiplier 
an- und ausschaltest bei gleichem frequency tuing word?

Du sagst das es keinen Unterschied macht ob du den 6x multiplier an hast 
oder nicht. Kannst du dann noch mal ein Oszilloskop und Spektrumanalyzer 
Bild von der gleichen Frequenz mit und ohne clock multiplier machen? 
(Mit entsprechend veränderten frequency tunig word). Bei dem Oszilloskop 
Bild wäre zudem die Time/DIV und Volt/DIV Werte interessant.

von Max M. (gbl1)


Angehängte Dateien:

Lesenswert?

Hallo Achim,

danke für deine Anregung. Deiner Aufforderung nach habe ich drei PDF's 
mit allen Parametern erstellt. Ich hoffe diese sind zur 
Fehlereingrenzung hilfreich genug.

LG
Günter

von Max M. (gbl1)


Lesenswert?

Ich möchte hier noch einen BASCOM Code beisteuern, welcher bei 19400kHz 
das exakt gleiche Phänomen erzeugt.

Ich bin jetzt mit meinem Latein komplett am Ende.
Ich hatte die Hoffnung mit meinen PASCAL Code etwas vermurkst zu haben - 
dies scheint jedoch nicht der Fall zu sein.

LG und ein frustrierter
Günter

1
'Bascom-AVR code for Atmega16 and AD9851 with an 30.000 Mhz Xtal
2
'http://www.zendamateur.com/viewtopic.php?f=14&t=3801
3
4
$regfile = "m16def.dat"
5
$crystal = 8000000
6
$baud = 9600
7
8
$hwstack = 256
9
$swstack = 256
10
$framesize = 256
11
12
Waitms 100                                                  'Time to startup uC
13
14
15
Dim Frequ_gen As Long
16
Dim Frequ_gen_d As Double
17
18
Dim W As Long
19
20
21
Config Portb = Output
22
23
9851_data Alias Portb.3
24
9851_clk Alias Portb.2
25
9851_fqud Alias Portb.1
26
27
28
Declare Sub Reset_ad9851()
29
Declare Sub To_ad9851()
30
31
32
Reset_ad9851
33
34
35
Frequ_gen = 19400000
36
Call To_ad9851()
37
38
Do
39
Loop
40
41
42
End
43
44
45
'Generator-routine---------------------
46
47
Sub Reset_ad9851()
48
49
   9851_clk = 0
50
   9851_fqud = 0
51
   Waitus 1
52
53
   9851_clk = 1
54
   Waitus 1
55
   9851_clk = 0
56
   Waitus 1
57
58
   9851_fqud = 1                                            'shift to serial-mode
59
   Waitus 1
60
   9851_fqud = 0
61
   Waitus 1
62
End Sub
63
64
65
66
Sub To_ad9851()
67
   Local Walk As Byte
68
69
   Frequ_gen_d = Frequ_gen
70
71
   '   6 x REFCLCK
72
   Frequ_gen_d = Frequ_gen_d * 23.860929                    '= 2 ^ 32 / 30.00000 = delta phi pro Hz
73
   Frequ_gen_d = Round(frequ_gen_d)
74
75
76
   W = Frequ_gen_d
77
   For Walk = 1 To 32
78
      9851_data = W.0
79
      Waitus 1
80
81
      9851_clk = 1                                          'Clock
82
      Waitus 1
83
      9851_clk = 0
84
      Waitus 1
85
86
      Shift W , Right , 1                                   'from LSB to MSB (W0 to W31)
87
   Next Walk
88
89
90
   W = &B00000001                                           '0000001                                             'W32 to W39; here setting of 6x REFCLOCK
91
   For Walk = 1 To 8
92
      9851_data = W.0
93
      Waitus 1
94
95
      9851_clk = 1                                          'Clock
96
      Waitus 1
97
      9851_clk = 0
98
      Waitus 1
99
100
      Shift W , Right , 1
101
   Next Walk
102
103
   9851_fqud = 1                                            'FQ_UD takes the 40 Bit
104
   Waitus 1
105
   9851_fqud = 0
106
107
End Sub

von Max M. (gbl1)


Lesenswert?

Habe den Fehler gefunden.

der AD9851 braucht mindestens 5.0V + ein Paar zerquetschte.
Bei mir ist die Spannung auf 4.9V irgendwas runtergegangen. Das reicht 
für mache Frequenzen nicht.

Kleine Ursache, Große Wirkung


LG
Günter

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
Noch kein Account? Hier anmelden.