Forum: Mikrocontroller und Digitale Elektronik auf einfache Weise von 11MHz auf 300kHz teilen/generieren


von Ferdinand (Gast)


Lesenswert?

Hallo,

ich benötige ein Signal mit einer Frequenz von f=310kHz.
Das ganze könnte ich mir aus 11MHz ableiten.

Ich hätte als Lösung einen billigen Microcontroller im Sinn,
der dann eine PWM mit der Frequenz und einem Tastverhältnis von 50%
erzeugt.

Macht das Sinn?
Ist das zu "oversized"?

Was könnte noch in Frage kommen?


VG

Ferdi

von Helmut -. (dc3yc)


Lesenswert?

Nein.
Ja.
Flipflops, Zähler und Gatter.

: Bearbeitet durch User
von Sozialarbeiter (Gast)


Lesenswert?

Helmut -. schrieb:
> Flipflops, Zähler und Gatter.

Das dürfte schwierig werden bei so krummen Teilerverhältnissen.

Wie üblich muss sich der geneigte Leser fragen was eigentlich
der TO will. Da steht wahrscheinlich wieder eine ganz dumme
oder trollige Vorstellung dahinter ....

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Das Teilerverhältnis von 11 MHz zu 310 kHz beträgt 35.48387.

Sicherlich kann man es schaffen, aus den 11 MHz „irgendwie“ wirklich 310 
kHz zu erzeugen, aber (solange keine PLL im Spiel ist) nur in Form einer 
Schwingung, die zwar 310000 Impulse pro Sekunde hat, die aber aufgrund 
des nicht ganzzahligen Teilerverhältnisses einen Jitter haben, d.h. die 
Impulse sind nicht „gleichmäßig“ verteilt über die Zeit.

(Ob/wie das ein Controller machen kann, kann ich mir gerade nicht 
vorstellen, mit einem FPGA oder vielleicht CPLD sollte es gehen.)

Alternative wäre Herunterteilen der 11 MHz auf 10 kHz und diese als 
Referenztakt für eine PLL benutzen, die um Faktor 31 vervielfacht.

Andere Alternative wäre ein DDS.

von Uwe Bonnes (Gast)


Lesenswert?

uC Loesung ist bestimmt einfacher als diskrete Loesung!

von Reiner O. (elux)


Lesenswert?

Ferdinand schrieb:
> Ich hätte als Lösung einen billigen Microcontroller im Sinn,
> der dann eine PWM mit der Frequenz und einem Tastverhältnis von 50%
> erzeugt.

Warum so kompliziert? Einen kleinen Atmel, am Takteingang tütest Du 
Deine 11MHz rein. In der Hauptschleife setzt Du einen Portpin hoch und 
runter und mit einer Handvoll "NOP"s bestimmst Du das Teilungs- und 
Tastverhältnis...

Gruß
Elux

von Sozialarbeiter (Gast)


Lesenswert?

Reiner O. schrieb:
> In der Hauptschleife setzt Du einen Portpin hoch und
> runter und mit einer Handvoll "NOP"s bestimmst Du das Teilungs- und
> Tastverhältnis...

Tolle Lösung, also trollgerecht für den TO.

So wie Umstellung des Autos auf Holzreifen im Quadratur-Format.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ein DDS kann sehr feinstufig teilen, aber der braucht eine 
kompliziertere Ansteuerung. AD9835 und ähnliche bekommt man als fertiges 
Modul, aber da muss noch mindestens ein Arduino o.ä. über SPI-Bus dran.

von Helmut -. (dc3yc)


Lesenswert?

Fractional-N-Teiler wäre das Stichwort.

von Stefan F. (Gast)


Lesenswert?

Ferdinand schrieb:
> ich benötige ein Signal mit einer Frequenz von f=310kHz.
> Das ganze könnte ich mir aus 11MHz ableiten.

Was für ein Signal brauchst du?

Jemand der mit analogen Radios und Fernsehern vertraut ist, dem fällt 
dazu sofort ein Mischer mit Zwischenfrequenz ein.

von Peter D. (peda)


Lesenswert?

Wie genau müssen denn die 310kHz sein?
Der MC kann nur ganzzahlig teilen oder als Mittelwert mit Jitter.

von Uwe Bonnes (Gast)


Lesenswert?

Peter D. schrieb:
> Der MC kann nur ganzzahlig teilen oder als Mittelwert mit Jitter

Eine Loesung mit Gatter und FFs auch

von Name: (Gast)


Lesenswert?

Kommt halt drauf an, wie genau das sein muss.

Wenn 2% reichen, dann reicht jeder PIC12 oder ATTINY mit Timer.

von Falk B. (falk)


Lesenswert?

Jörg W. schrieb:
> (Ob/wie das ein Controller machen kann, kann ich mir gerade nicht
> vorstellen, mit einem FPGA oder vielleicht CPLD sollte es gehen.)

Mit DDS, das geht auch mit einem Timer in einem Mikrocontroller.
Ein ATtiny13 würde reichen.

von Jochen F. (jamesy)


Lesenswert?

Einfach Mischen. Einen 10.7 MHz-Quarz findet man überall.
Warum ist in der Überschrift von 300 kHz die Rede, wenn 310 gewünscht 
ist?

von Geheimdienst Mitarbeiter (Gast)


Lesenswert?

Jochen F. schrieb:
> Warum ist in der Überschrift von 300 kHz die Rede, wenn 310 gewünscht
> ist?

Wenn eine Frequenz zwischen 300kHz und 310kHz ausreicht, könnte man mit 
einem CD4060, der gleichzeitig auch als 11MHz Quarzoszillator dient, 
durch 4 teilen und dann mit einem 4518 nachträglich nochmal durch 9 
teilen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Jörg W. schrieb:
>> (Ob/wie das ein Controller machen kann, kann ich mir gerade nicht
>> vorstellen, mit einem FPGA oder vielleicht CPLD sollte es gehen.)
>
> Mit DDS, das geht auch mit einem Timer in einem Mikrocontroller.

Mit 11 MHz Takt eine 310 kHz DDS?

Könnte grenzwertig sein (daher hatte ich das vorhin noch nicht erwähnt), 
aber kann noch klappen.

von PICklig (Gast)


Lesenswert?

Am einfachsten waere wohl ein kleiner 16F1503/7/8/9 mit einem NCO.

von Egon D. (Gast)


Lesenswert?

Ferdinand schrieb:

> ich benötige ein Signal mit einer Frequenz von f=310kHz.

Welche Toleranz ist zulässig?

> Das ganze könnte ich mir aus 11MHz ableiten.

von Marcuz (Gast)


Lesenswert?

Ich würde es mit einem kleinen PIC10/12 ATtiny machen.
Port setzen. Ein paar NOPs Port rücksetzen. ein paar NOPs. While(1) über 
alles. Fertig.

von Wolfgang (Gast)


Lesenswert?

Ferdinand schrieb:
> ich benötige ein Signal mit einer Frequenz von f=310kHz.
> Das ganze könnte ich mir aus 11MHz ableiten.

Solange du die Signalqualität nicht näher spezifizierst:
AD9833

von Wolfgang (Gast)


Lesenswert?

Jörg W. schrieb:
> Mit 11 MHz Takt eine 310 kHz DDS?
>
> Könnte grenzwertig sein (daher hatte ich das vorhin noch nicht erwähnt),
> aber kann noch klappen.

Da die Frage hier unter Mikrocontroller und sonstige digitale Elektronik 
gestellt wird, geht es wohl um ein Rechtecksignal.

Eine PLL (z.B. der gute alte CD4046) mit Teilern 71 und 2 würde aus den 
11MHz eine Frequenz von 310kHz machen - ohne komplizierten µC für die 
Konfiguration eines integrierten DDS-Generators.

von Frank K. (fchk)


Lesenswert?

Oder: 74HC4060
https://assets.nexperia.com/documents/data-sheet/74HC_HCT4060.pdf

Quarz mit einem Vielfachen der gewünschten Frequenz aussuchen (Faktor 8 
oder 16), den Du dann mit einem Trimmkondensator noch abgleichen kannst.

Siehe Beispielschaltung aus Fig. 13 im verlinkten Datenblatt.

4.9152MHz ist ein Standardquarz. Das durch 16 ergibt 307.2 kHz, also 
schon recht nah dran. Wenn das nicht reicht, musst Du ausprobieren, wie 
weit Du die Frequenz mit C3 noch hindrehen kannst.

Die angegebenen Werte sind erste Anhaltspunkte für weitere Experimente.

fchk

von Christian S. (uhrenfreak)


Lesenswert?

Ich werfe mal den Chip SI5351 in den Raum.
Er wird über I2C programmiert und kann dann aus einer 
Haupt-Quarzfrequenz über interne PLLs davon abhängige, mittels 
Fractional-N-Divider ermittelte Neben-Taktfrequenzen ausgeben.

Analoge Bauteile (außer Abblockkondensatoren) braucht man nicht mehr, 
ist alles intern! Auch eine etwas nervig zu dimensionierendes 
Schleifenfilter entfällt, weil es bereits enthalten ist.

(Ich kenne den nur zufällig, weil ich die SDR-Publikationen von B. 
Kainka gelesen habe.)

Grüße Christian

von Uwe (Gast)


Lesenswert?

Hi,
>Ich hätte als Lösung einen billigen Microcontroller im Sinn,
Wenn der sonst nichts anderes machen muss und
du den Vorschlag
>>von Reiner O. (elux)27.01.2021 15:47
>>Ferdinand schrieb:
>> Ich hätte als Lösung einen billigen Microcontroller im Sinn,
>> der dann eine PWM mit der Frequenz und einem Tastverhältnis von 50%
>> erzeugt.

>Warum so kompliziert? Einen kleinen Atmel, am Takteingang tütest Du
>Deine 11MHz rein. In der Hauptschleife setzt Du einen Portpin hoch und
>runter und mit einer Handvoll "NOP"s bestimmst Du das Teilungs- und
>Tastverhältnis...

folgst, mit nicht ganz 50% Tastverhältnis klarkommst und ein leichter 
Jitter
nicht stört, kannst du mit Taktzahlen von

OutL 17 OutH 18 OutL 18 OutH 18 OutL
309,859 kHz erzeugen

Viel Erfolg,Uwe

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wolfgang schrieb:
> Eine PLL

… hatte ich ja oben mit genannt.

Der TE meldet sich aber sowieso nicht mehr, wie's scheint.

von Jakob (Gast)


Lesenswert?

Entweder teilt man abwechselnd durch 35 und 36 und freut sich über
309.859 Hz mit einem Jitter von gut +/-5°, oder sucht sich was
Anderes.

Z.B. ein anderes Hobby...

von Geheimdienst Mitarbeiter (Gast)


Lesenswert?

Mit zwei BCD codierten Teilern (Einer und Zehner) kann man direkt durch 
71 teilen und danach mit einem XOR Gatter die Frequenz verdoppeln. Dann 
gibt es keinen Jitter mehr.

von Jakob (Gast)


Lesenswert?

Mal abgesehen von der Tatsache, dass der TO (oder TE?) offensichtlich
schon ein neues Hobby hat...

@ Geheimdienst Mitarbeiter (Gast)
Den Teiler 1/71 kann ich platzsparender mit einem 8-Bein-µC basteln.

von Geheimdienst Mitarbeiter (Gast)


Lesenswert?

Jakob schrieb:
> Den Teiler 1/71 kann ich platzsparender mit einem 8-Bein-µC basteln.

Und ich kann die beiden BCD Teiler in einem einzigen SMD SOP16-Pin 
Package besorgen. Zusätzlich entfällt das Programmieren.

von c-hater (Gast)


Lesenswert?

Geheimdienst Mitarbeiter schrieb:

> Und ich kann die beiden BCD Teiler in einem einzigen SMD SOP16-Pin
> Package besorgen. Zusätzlich entfällt das Programmieren.

Naja, ich müsste zwar einen Tiny13(A) programmieren, könnte aber damit 
auch was "besseres" als 1/71 realisieren. Langfristig exakten 
Frequenz-Match und Jitter bei 2,8%.

Was nun wirklich besser wäre, hängt von der Anwendung ab. Der Vorteil 
des µC ist: ich kann mit ein- und demselben Teil BEIDE Varianten 
realisieren und z.B. mittels eines Jumpers zwischen ihnen wählen!

Was sagt der Geheimdienst denn zu dem Aufwand, dies mittels dummer Logik 
zu realisieren?

Beitrag #6565887 wurde von einem Moderator gelöscht.
von kannAllesBesser! (Gast)


Lesenswert?

PICklig schrieb:
> kleiner 16F1503/7/8/9 mit einem NCO

NCO, sehe ich auch so. ABER NCO kennen hier nur wenige!? Diese sind in 
vielen pic16/pic18 drin!

von PittyJ (Gast)


Lesenswert?

Toll. So viele Rückfragen.
Nur der TE lässt sich nicht mehr sehen und beantwortet die Fragen.

Manchmal habe ich das Gefühl das ist wie im Karpfenteich. Man streut 
etwas Futter an die Oberfläche, und freut sich über alle Fische die 
auftauchen und nach mehr suchen.

von Name: (Gast)


Lesenswert?

kannAllesBesser! schrieb:
> PICklig schrieb:
>> kleiner 16F1503/7/8/9 mit einem NCO
>
> NCO, sehe ich auch so. ABER NCO kennen hier nur wenige!? Diese sind in
> vielen pic16/pic18 drin!

Geht, hat aber einen kleinen Pferdefuß: Jitter.

Ich habs schon mal für einen PIC32 MP3-Player verwendet, da brauchte ich 
USB (12MHz) und I2S für dne Audio-DAC, und der I2S-Takt für 
handelsübliche Audio-Sampleraten geht nicht aus einem 4MHz-Quarz, und 
USB ist leider sehr anspruchsvoll.

Hat sich bestimmt irgendwie auf die Tonqualität ausgewirkt, aber gehört 
hätte ich es nicht.

von Sebastian S. (amateur)


Lesenswert?

Die ganze Diskussion ist doch sinnlos, wenn der TO verstorben ist.
Keine Antwort auf die Frage: 300 oder 310kHz!
Keine Antwort auf die Frage: Wie genau (Jitter) es sein soll.
Ist also wohl egal.
Vielleicht kann ja mal jemand im Kaffeesatz nachlesen?

Beitrag #6566021 wurde von einem Moderator gelöscht.
Beitrag #6566064 wurde von einem Moderator gelöscht.
von PICklig (Gast)


Lesenswert?

> Hat sich bestimmt irgendwie auf die Tonqualität ausgewirkt

Das ist F.U.D.
Selbst digitale Audio-ICs der ersten Generation kommen damit klar.
Siehe Datenblatt Crystal CS8401/2A und CS8411/12.

von A. S. (rava)


Lesenswert?

mal was Altmodisches: NE555 als astabiler Vibrator mit Trimmpoti bis die 
Frequenz passt?

Laut TO müssen die 11 MHz nicht verwendet werden.

von PICklig (Gast)


Lesenswert?

Ein alter normaler 555 pfeift bei ueber 300 kHz schon auf dem
letzten Loch.
Besser ein 1/4 4093.

von Schlauberger (Gast)


Lesenswert?

Einfach 4 Stück 77,5 kHz DCF Quarze in Serie schalten. Das ergibt dann 
exakt 310 kHz. 😊

von Schlauberger (Gast)


Angehängte Dateien:

Lesenswert?

Mit dem Parallelschwingkreis aus L2 und dem 470pF Trimmer, filtert man 
sich die 4. Oberwelle von 77,5kHz raus. Der 2N2222 wirkt nur als 
Pufferstufe. Am Ausgang kommen jetzt jitterfreie 310kHz raus. 😃

von Detlef _. (detlef_a)


Lesenswert?

Man taktet kleinen uC mit den 11Mhz. In einer Endlosschleife addiert man 
auf einen 32 oder besser 64 Bit Accumulator einen Wert x auf. Von dem 
Accu gibt man das oberste Bit auf einen Pin aus, das sind die 310khz. 
Der Wert x ergibt sich aus der Laufzeit der Endlosschleife, das muss man 
für die gewünschte Frequenz ( linear- ) kalibrieren. Für die ganze 
Nummer hat man 11E6/(2*310E3) ~ 17 ticks Zeit. Das sollte gehen. Hat wie 
jede DDS Jitter, die Nummer.

Cheers
Detlef

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Wie waers mit einem Klauenpolsynchronmotor mit 1100 Polpaaren, auf 
dessen Welle sitzt ein Zahnrad mit 30 oder 31 Zaehnen, daneben ein 
Magnet und eine Spule. Immer gut oelen.
Herr Hammond haette sicher seine Freude dran...

SCNR,
WK

von Rainer V. (a_zip)


Lesenswert?

Die Antwort ist doch schlicht: auf einfache Weise geht es nicht! Und da 
man weder nähere Infos zu den 11MHz noch zu den 310KHz hat, ist jede 
Antwort doch müßig...meine ich...
Gruß Rainer

von Detlef _. (detlef_a)


Lesenswert?

Rainer V. schrieb:
> Die Antwort ist doch schlicht: auf einfache Weise geht es nicht! Und da
> man weder nähere Infos zu den 11MHz noch zu den 310KHz hat, ist jede
> Antwort doch müßig...meine ich...
> Gruß Rainer

Finde ich nicht. Die Frage ist interessant, die Antworten auch. Die 
erwähnten fractional dividers sind eine weitere Möglichkeit, Vergleich 
mit DDS wäre erhellend. Das ist absoluter state of the art in 
Clockgenerierung.
Der berühmte Si5351 macht anscheinend fractional division, die Nummer 
ist so komplex, dass es zur Berechnung der Konfiguration eine eigene 
Entwicklungsumgebung gibt, SiliconLabs hat auch einige Patente dazu 
afaik.
Ich würde das gerne soweit verstehen, dass ich das auf einem 
Mikrocontroller nachprogrammieren kann, dann braucht man den Chip nicht 
mehr. Leider habe ich dazu keine Zeit.

Ich finde es müßig, ob den TO das noch interessiert.

Cheers
Detlef

: Bearbeitet durch User
von Rainer V. (a_zip)


Lesenswert?

Detlef _. schrieb:
> Ich würde das gerne soweit verstehen, dass ich das auf einem
> Mikrocontroller nachprogrammieren kann, dann braucht man den Chip nicht
> mehr. Leider habe ich dazu keine Zeit.

Ich bin der Letzte, der das nicht auch bedauert :-)
Rainer

von Uwe Bonnes (Gast)


Lesenswert?

@Ferdinand: Prima, wieder ein "ask once, read never" Fragesteller...

von W.S. (Gast)


Lesenswert?

Dergute W. schrieb:
> Wie waers mit einem Klauenpolsynchronmotor

Jetzt ist der Thread im Esoterischen angekommen.

Im Grunde weißt du doch, wie man so etwas analytisch macht: Beide Zahlen 
nach Primfaktoren zerlegen und selbige herauskürzen. Dann das Produkt 
beider Reste bilden und man hat damit die gemeinsame Basis.

W.S.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

W.S. schrieb:
> Jetzt ist der Thread im Esoterischen angekommen.

Ach.

W.S. schrieb:
> Im Grunde weißt du doch, wie

Wenn ich hier alles schreiben wuerde, was ich weiss, haett' ich viel zu 
tun...Daher schreib ich hier nur, auf was ich Bock hab'.

Gruss
WK

von W.S. (Gast)


Lesenswert?

Und das ist momentan ein Klauenpolmotor?

Hmm....

W.S.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

W.S. schrieb:
> Und das ist momentan ein Klauenpolmotor?

https://de.wikipedia.org/wiki/Spaltpolmotor#Langsamlaufender_Spaltpolmotor

Gruss
WK

von Schlauberger (Gast)


Angehängte Dateien:

Lesenswert?

Schlauberger schrieb:
> Der 2N2222 wirkt nur als Pufferstufe. Am Ausgang kommen jetzt
> jitterfreie 310kHz raus.

Man kann die zweite Stufe auch im C-Betrieb arbeiten lassen, dann könnte 
man mit einem zweiten Schwingkreis im Kollektor die Oberwelle von 310kHz 
rausfiltern (620kHz) und in einen Schmitt-Trigger leiten.
Von da aus in ein Flip-Flop, so dass man dann wieder eine Frequenz von 
310kHz hat, aber mit einer exakten Pulsweite von 50% und immer noch 
knitterfrei.

Ferdinand schrieb:
> ...der dann eine PWM mit der gewünschten Frequenz und einem Tastverhältnis von 
50%
> erzeugt.

von Schlauberger (Gast)


Lesenswert?

jitterfrei

von kannAllesBesser! (Gast)


Lesenswert?

Schlauberger schrieb:
> Mit dem Parallelschwingkreis aus L2 und dem 470pF Trimmer, filtert man
> sich die 4. Oberwelle von 77,5kHz raus

... andere lsg.
pic16/18/xxx mit 77,5kHz quarz und weiter mit interner 4-fach pll sowie 
master clock output!

von Schlauberger (Gast)


Angehängte Dateien:

Lesenswert?

Mit einem Dual-Gate-FET, zum Beispiel ein BF981, könnte man eine 
Mischstufe aufbauen und an Gate 1 und Gate 2 jeweils 77,5kHz einspeisen 
und am Ausgang die Summenfrequenz von 155kHz mit einem Schwingkreis 
rausfiltern.
Noch einfacher wäre es, wenn man mit diesem Schwingkreis direkt die 
Oberwelle von 310kHz rausfiltern könnte. Dann wäre man mit nur einer 
einzigen Transistorstufe am Ziel angekommen. Da weiß ich aber nicht, ob 
das so funktioniert?

von Schlauberger (Gast)


Lesenswert?

kannAllesBesser! schrieb:
> ... andere lsg. pic16/18/xxx mit 77,5kHz quarz und weiter mit interner
> 4-fach pll sowie master clock output!

Wenn dadurch, trotz PLL, am Ausgang die jitterfreien 310kHz mit einer 
PWM von exakt 50% rauskommen, ist das sicher eine schöne einfache 
programmierbare Lösung. 😃

von Rainer V. (a_zip)


Lesenswert?

Obwohl ich mich ja schon auf eine Antwort festgelegt hatte, hier noch 
einmal zur Verdeutlichung. Die Mischer-Schaltungen in allen Ehren, aber 
wo sind die 11MHz geblieben? 310KHz kann man so gesehen doch beliebig 
einfach oder kompliziert erzeugen!
Seit es die ersten TTL-Bausteine gegeben hat, ist auch die Frage 
aufgetaucht, wie man mit den diversen Zählern/Teilern beliebige 
Teilverhältnisse erzeugen kann. Dabei spiegelten die diversen 
Lösungsversuche auch den mathematischen "Background" wieder, den die 
Leute hatten. Es läuft ja erst mal alles auf Ganzzahlarithmetik hinaus 
(und ich kann mir schwer vorstellen, dass man sich da überhaupt 
irgendwas patentieren lassen könnte). In der Praxis läuft alles, damals 
wie heute, darauf hinaus, mit welchem Fehler - also mit welchem Aufwand 
- das gewünschte Teilverhältnis erreicht wird. Das ist so gesehen schon 
alles.
Gruß Rainer

von kannAllesBesser! (Gast)


Lesenswert?

kannAllesBesser! schrieb:
> ... andere lsg.
> pic16/18/xxx mit 77,5kHz quarz und weiter mit interner 4-fach pll sowie
> master clock output!

z.B. 8-pin pic16f18313 mit Reference Clock Output Module (CLKREF)

von c-hater (Gast)


Lesenswert?

Jörg W. schrieb:

>> Mit DDS, das geht auch mit einem Timer in einem Mikrocontroller.
>
> Mit 11 MHz Takt eine 310 kHz DDS?
>
> Könnte grenzwertig sein

Da scheint mir aber noch reichlich Luft zu sein (ca. 2/3 der Rechenzeit 
bleiben ungenutzt):
1
.INCLUDE "tn13adef.inc"
2
3
/*
4
fuses
5
L: 0x78  ;use external clock
6
H: 0xF9  ;5V supply BOD configuration
7
8
11MHz clock input via CLKI (PB3)
9
310kHz clock output via PB4 
10
11
each 550 system ticks you'll get 31 output pin toggles, means:
12
exact frequency match if observer window is longer than 50µs
13
*/
14
15
;switch off all unnecessary hardware stuff #############################
16
  ldi R16,(1<<PRTIM0)|(1<<PRADC)
17
  out PRR,R16
18
  ldi R16,1<<ACD
19
  out ACSR,R16
20
  ldi R16,(1<<ADC0D)|(1<<ADC2D)|(1<<ADC1D)|(1<<AIN1D)|(1<<AIN0D)
21
  out DIDR0,R16
22
23
;enable output pin (and preload output helper register) ################
24
  ldi R16,1<<PORTB4
25
  out DDRB,R16
26
27
;initialize for bresenham algorithm ####################################
28
  ldi R17,-1   ;counter
29
  ldi R18,8    ;denominator 
30
  ldi R19,31   ;numerator
31
32
;fractional divider loop ###############################################
33
34
higher:
35
  add R17,R19
36
37
lower:
38
39
;waste 12 unnecessary ticks --------------------------------------------
40
  ldi R20,4
41
wait:
42
  dec R20
43
  brne wait
44
;-----------------------------------------------------------------------
45
46
  out PINB,R16
47
  sub R17,R18
48
  brcs higher   ;this loop takes 17 ticks total
49
50
  nop
51
  rjmp lower    ;this loop takes 18 ticks total
52
53
;#######################################################################

von Jakob (Gast)


Lesenswert?

Jakob (also ich) schrieb:
Mal abgesehen von der Tatsache, dass der TO (oder TE?) offensichtlich
schon ein neues Hobby hat...

Jakob (also ich) schrieb:
Entweder teilt man abwechselnd durch 35 und 36 und freut sich über
309.859 Hz mit einem Jitter von gut +/-5°, oder sucht sich was
Anderes.

--------------------------

Nun frage ich mich, warum aus einer DDS mit Fo / Fout = 35,48387 was
weniger Jitterndes, als bei abwechselndem Teilen durch 35 und 36
kommen soll... Auch wenn man nach Vorgabe des Phasenakkus etwas
seltener durch 36, als durch 35 teilt, um auf den Teiler 35,48387 zu
kommen, bleibt immer noch der Sprung um ungefähr +/-5°.

Hab ich DDS nicht verstanden?

Die Frage ist nicht bösartig gemeint! Ich würde mich gern (fundiert)
überzeugen lassen!
Bin gespannt, ob das hier jemand erklären kann!

von Falk B. (falk)


Lesenswert?

Jakob schrieb:
> Nun frage ich mich, warum aus einer DDS mit Fo / Fout = 35,48387 was
> weniger Jitterndes, als bei abwechselndem Teilen durch 35 und 36
> kommen soll...

Kommt es nicht. Der einzige Unterschied ist die leicht verschiedene 
Frequenz.

> Auch wenn man nach Vorgabe des Phasenakkus etwas
> seltener durch 36, als durch 35 teilt, um auf den Teiler 35,48387 zu
> kommen, bleibt immer noch der Sprung um ungefähr +/-5°.

Das ist auch so. Der Jitter ist prinzipbedingt immer max. Takt.

> Hab ich DDS nicht verstanden?

Doch.

von Jakob (Gast)


Lesenswert?

Danke!

Aber wenn irgendwelche Hypes (DDS löst alle Probleme) auf so
breiter Front abgeschossen werden, denkt man als Rentner, man
hätte altersbedingt VIELLEICHT doch den entscheidenden Knackpunkt
übersehen :-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jakob schrieb:
> irgendwelche Hypes (DDS löst alle Probleme)

DDS ist kein Hype, es ist einfach eine Methode, ein Weg zum Ziel.

Die Physik hebelst du natürlich nicht aus, weder damit noch mit einer 
anderen Methode. Ein so „schräger“ Teilerfaktor wie der gewünschte 
braucht irgendwo Kompromisse.

Wenn du einen hinreichend guten Bandpass/Tiefpass dranhängst, wirst du 
mit allen Methoden ungefähr auf das gleiche Ergebniss kommen.

Ist halt die Frage, ob nicht eine völlig unabhängige 310-kHz-Erzeugung 
die sinnvollere Variante gewesen wäre (wurde ja in Form von 4 x 77,5 kHz 
schon vorgeschlagen, wenngleich auch erstmal scherzhaft). Die Auflösung 
werden wir aufgrund der Abwesenheit des TE nicht erfahren.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

c-hater schrieb:
> Da scheint mir aber noch reichlich Luft zu sein (ca. 2/3 der Rechenzeit
> bleiben ungenutzt):

Ein schöner Ansatz, aber leider mit mehreren magic numbers versehen. Das 
versteht kaum einer und noch viel weniger können es dann weiter 
verwenden. Ich war mal so frei, das lehrbuchmäßig aufzuschreiben. Und es 
scheint zu funktionieren, wenn mein Oszi richtig mißt. ;-)

Man muss nur das Verhältnis f_in/f_out bilden und solange kürzen, bis 
der Nenner (unter dem Bruchstrich, hier f_out) kleiner als 32767 ist 
(interner 16 Bit Zähler). Mit der Softwarte sind Teilerverhältnisse von 
14:1 bis 524000 : 1 möglich. Auf grund der minimalen Programmgröße und 
keinerlei Nutzung besonderer IO-Module, läuft das Ding auf dem kleinsten 
aller AVRs.

Viel Spaß damit.

von Egon D. (Gast)


Lesenswert?

Jakob schrieb:

> Nun frage ich mich, warum aus einer DDS mit
> Fo / Fout = 35,48387 was weniger Jitterndes, als
> bei abwechselndem Teilen durch 35 und 36 kommen
> soll...

Weil echte DDS i.d.R. ein Sinussignal erzeugt,
während aus einem umschaltbaren Teiler ein Rechteck
herauskommt.

Äpfel und Birnen und so...


> Auch wenn man nach Vorgabe des Phasenakkus etwas
> seltener durch 36, als durch 35 teilt, um auf den
> Teiler 35,48387 zu kommen, bleibt immer noch der
> Sprung um ungefähr +/-5°.

Nein -- warum sollte?

Umschaltbarer Teiler und DDS liefern genau dann
identische Ergebnisse, wenn man vom DDS nur das
höchstwertige Bit auswertet.

Aber warum sollte man das tun?

Es hat doch seinen guten Grund, dass die 10..14
oberen Bits auf eine Sinustabelle gehen und
anschließend in einem ADC verarbeitet werden.

Ein DDS versucht prinzipbedingt, zu jedem einzelnen
Abtastpunkt den exakten Amplitudenwert zu erzeugen.

Ein umschaltbarer Teiler kann nur versuchen, die
Nulldurchgänge zu treffen -- ist dabei aber auf
das Taktraster beschränkt.

Ein umschaltbarer Teiler muss sich jedesmal neu
entscheiden, ob diese oder die nächste Taktflanke
näher am wahren Nulldurchgang liegt.

Ein Sinus-DDS liefert für den Taktimpuls, der kurz
vor dem wahren Nulldurchgang liegt, genau die kleine
(z.B. positive) Spannung, die diesem Zeitpunkt ent-
spricht. Für den nächsten Taktimpuls, der schon kurz
hinter dem wahren Nulldurchgang liegt, wird dagegen
schon die kleine (negative) Spannung geliefert, die
genau diesem Zeitpunkt entspricht.

In welchem Fall wird die Störleistung wohl geringer
sein?

von Falk B. (falk)


Lesenswert?

Egon D. schrieb:
> Jakob schrieb:
>
>> Nun frage ich mich, warum aus einer DDS mit
>> Fo / Fout = 35,48387 was weniger Jitterndes, als
>> bei abwechselndem Teilen durch 35 und 36 kommen
>> soll...
>
> Weil echte DDS i.d.R. ein Sinussignal erzeugt,
> während aus einem umschaltbaren Teiler ein Rechteck
> herauskommt.

Nö. Wenn gleich die meisten DDS-ICs einen Sinus ausgeben, ist das 
Prinzip der DDS NICHT streng daran gekoppelt. aber da ist eher eine 
akademische Definitionsfrage.

>> Auch wenn man nach Vorgabe des Phasenakkus etwas
>> seltener durch 36, als durch 35 teilt, um auf den
>> Teiler 35,48387 zu kommen, bleibt immer noch der
>> Sprung um ungefähr +/-5°.
>
> Nein -- warum sollte?

Doch, es bleibt der Jitter.

> Umschaltbarer Teiler und DDS liefern genau dann
> identische Ergebnisse, wenn man vom DDS nur das
> höchstwertige Bit auswertet.

Richtig. Und genau darum geht es hier.

> Aber warum sollte man das tun?

Weil es einfacher und vermutlich ausreichend ist.

> Es hat doch seinen guten Grund, dass die 10..14
> oberen Bits auf eine Sinustabelle gehen und
> anschließend in einem ADC verarbeitet werden.

DAC

> Ein DDS versucht prinzipbedingt, zu jedem einzelnen
> Abtastpunkt den exakten Amplitudenwert zu erzeugen.

Das geht aber mit steigender Frequenz immer schlechter. Bei f_out = 0,5 
f_CLK hat man nur noch 2 Sample/Periode. Und selbst wenn es 4 wären, 
wäre das nicht viel und die Sinustabelle hat kaum noch Wirkung. Den 
meisten Dreck kann dann nur der analoge Filter filtern.

> Ein umschaltbarer Teiler kann nur versuchen, die
> Nulldurchgänge zu treffen -- ist dabei aber auf
> das Taktraster beschränkt.

Wie die DDS auch, denn die arbeitet ebenso zeitdiskret. Ud nur weil da 
ein Filter am Ausgang ist, heißt das NICHT, daß der Sinus perfekt ist. 
Der hat nämlich, vor allem bei steigenden Frequenzen, erhebliche 
Nebenlinien (Phasenmodulation). Die kann man auf einem Spektrumanalyzer 
gut sehen.

> Ein umschaltbarer Teiler muss sich jedesmal neu
> entscheiden, ob diese oder die nächste Taktflanke
> näher am wahren Nulldurchgang liegt.

Das macht die DDS auch.

> In welchem Fall wird die Störleistung wohl geringer
> sein?

Du kannst auch den Ausgang eines umschaltbaren Teiler über den gleichen 
Filter wie die DDS schicken und erhälst nahezu das gleiche Ergebnis.

von R. F. (rfr)


Lesenswert?

Ich schlage einen Quarz 10.7 MHz vor, der an einen SA612 oszilliert. Die 
11 MHz werden an den Mischeingang gelegt, am Ausgang filtern und die 
Wunschfrequenz ist da.

Preisgünstig.

Gruss

RFr

von Egon D. (Gast)


Lesenswert?

Falk B. schrieb:

> Egon D. schrieb:
>> Jakob schrieb:
>>
>>> Nun frage ich mich, warum aus einer DDS mit
>>> Fo / Fout = 35,48387 was weniger Jitterndes, als
>>> bei abwechselndem Teilen durch 35 und 36 kommen
>>> soll...
>>
>> Weil echte DDS i.d.R. ein Sinussignal erzeugt,
>> während aus einem umschaltbaren Teiler ein Rechteck
>> herauskommt.
>
> Nö.

Doch, in meinem Universum schon.


> Wenn gleich die meisten DDS-ICs einen Sinus ausgeben,
> ist das Prinzip der DDS NICHT streng daran gekoppelt.

Nun ja... es muss kein SINUS sein, ein DREIECK geht
auch. Rechteck ist jedenfalls ungeeignet.

Das entscheidende Alleinstellungsmerkmal des DDS-Prinzips
ist nämlich, dass ein STETIGER Signalverlauf approximiert
wird -- genau das ist die Voraussetzung dafür, dass man
das, was an ZEITAUFLÖSUNG fehlt, durch verbesserte
AMPLITUDENAUFLÖSUNG wieder wettmachen kann.

Ansonsten ist es nur eine alternative Implementierung
für einen fractional divider.


> aber da ist eher eine akademische Definitionsfrage.

Das sehe ich exakt umgekehrt.

Ein DDS ist in meinem Universum IN JEDEM FALLE eine
Maschinerie, die ein STETIGES Signal erzeugt (also
kein Schaltsignal wie ein Rechteck).

Ein "Ein-Bit-DDS" ist eine akademische Fingerübung,
eben weil es dasselbe Signal liefert wie ein
fractional divider. Es verdient den Namen "DDS" nicht.


>>> Auch wenn man nach Vorgabe des Phasenakkus etwas
>>> seltener durch 36, als durch 35 teilt, um auf den
>>> Teiler 35,48387 zu kommen, bleibt immer noch der
>>> Sprung um ungefähr +/-5°.
>>
>> Nein -- warum sollte?
>
> Doch, es bleibt der Jitter.

Nein, nur in Ausnahmefällen.
Was tatsächlich bleibt, ist das Entstehen von Neben-
linien, die gern 60dB schwächer sind als das Nutz-
signal.


>> Umschaltbarer Teiler und DDS liefern genau dann
>> identische Ergebnisse, wenn man vom DDS nur das
>> höchstwertige Bit auswertet.
>
> Richtig. Und genau darum geht es hier.

Sagt wer?

Die Frage von Jacko war: "Warum sollte aus einem DDS
etwas weniger Jitterndes herauskommen als..."

und

"Habe ich DDS nicht verstanden?"


Ich lese dort nirgendwo heraus, dass es ihm speziell
um den akademischen Grenzfall der 1-Bit-DDS ging.

Deswegen lautet MEINE Antwort immer noch: Ja, ein
DDS ist i.Allg. ungefähr um Faktor 10'000 besser
als ein fractional divider. Nur im akademischen
Grenzfall der 1-Bit-DDS ist das nicht so.


YMMV

von Falk B. (falk)


Lesenswert?

Egon D. schrieb:
> Nun ja... es muss kein SINUS sein, ein DREIECK geht
> auch. Rechteck ist jedenfalls ungeeignet.
>
> Das entscheidende Alleinstellungsmerkmal des DDS-Prinzips
> ist nämlich, dass ein STETIGER Signalverlauf approximiert
> wird -- genau das ist die Voraussetzung dafür, dass man
> das, was an ZEITAUFLÖSUNG fehlt, durch verbesserte
> AMPLITUDENAUFLÖSUNG wieder wettmachen kann.

Das stimmt aber nur in Grenzen. Denn Wenn die Sinustabelle / Periode mit 
nur sehr wenigen Stützstellen durchlaufen wird, belibt nicht mehr viel 
von der Amplitudenauflösung.

> Ansonsten ist es nur eine alternative Implementierung
> für einen fractional divider.
>
>> aber da ist eher eine akademische Definitionsfrage.
>
> Das sehe ich exakt umgekehrt.
>
> Ein DDS ist in meinem Universum IN JEDEM FALLE eine
> Maschinerie, die ein STETIGES Signal erzeugt (also
> kein Schaltsignal wie ein Rechteck).

Tja, da gehen die Meinungen wohl auseinander.

> Ein "Ein-Bit-DDS" ist eine akademische Fingerübung,
> eben weil es dasselbe Signal liefert wie ein
> fractional divider. Es verdient den Namen "DDS" nicht.

Ein Trabbi ist auch ein Auto ;-)

>> Doch, es bleibt der Jitter.
>
> Nein, nur in Ausnahmefällen.

Nö, diese Ausnahmefälle sind gar nicht so selten, vor allem bei recht 
hohen Frequenzen.

> Was tatsächlich bleibt, ist das Entstehen von Neben-
> linien, die gern 60dB schwächer sind als das Nutz-
> signal.

Wirklich? Bei Ausgangsfrequenzen von 10-50% F_CLK? Ok, muss ich mal 
nachlesen.

von Egon D. (Gast)


Lesenswert?

Falk B. schrieb:

> Egon D. schrieb:
>
>> Ein DDS ist in meinem Universum IN JEDEM FALLE eine
>> Maschinerie, die ein STETIGES Signal erzeugt (also
>> kein Schaltsignal wie ein Rechteck).
>
> Tja, da gehen die Meinungen wohl auseinander.

Scheint so.

Das begriffliche Chaos ist aber nicht auf uns beide
beschränkt: Man schlage nur mal "DDS", "DCO" und
"NCO" in der deutschen wie der englischen Wikipädie
nach...


>> Ein "Ein-Bit-DDS" ist eine akademische Fingerübung,
>> eben weil es dasselbe Signal liefert wie ein
>> fractional divider. Es verdient den Namen "DDS" nicht.
>
> Ein Trabbi ist auch ein Auto ;-)

Sicher.

Trotzdem bleibt der Umkehrschluss "Ein Trabbi bietet
keinen Mehrwert --> KEIN Auto bietet einen Mehrwert"
falsch.


>>> Doch, es bleibt der Jitter.
>>
>> Nein, nur in Ausnahmefällen.
>
> Nö, diese Ausnahmefälle sind gar nicht so selten,

Stattgegeben.
Ersetze "Ausnahmefälle" durch "Grenzfälle".


>> Was tatsächlich bleibt, ist das Entstehen von Neben-
>> linien, die gern 60dB schwächer sind als das Nutz-
>> signal.
>
> Wirklich? Bei Ausgangsfrequenzen von 10-50% F_CLK? Ok,
> muss ich mal nachlesen.

Mann, bleib' doch mal auf dem Teppich!

Ausgangspunkt der hier laufenden Diskussion war die
Umsetzung 11MHz --> 0.31MHz; die Ausgangsfrequenz beträgt
hier 2.82% F_CLK!
Genau das ist auch das Zahlenbeispiel, auf das Jacko bei
seiner Frage bezugnimmt -- und in DIESEM Falle lässt sich
mittels DDS ein fast perfektes Signal herstellen, wenn man
es richtig macht.

Dass man in der Praxis häufig auf die spektrale Reinheit
des Ausgangssignals scheisst und das DDS-Prinzip weit
außerhalb seiner Komfortzone betreibt, das weiss ich auch --
das ändert aber nichts am (hohen) Leistungspotenzial dieser
Methode.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Denn Wenn die Sinustabelle / Periode mit nur sehr wenigen Stützstellen
> durchlaufen wird, belibt nicht mehr viel von der Amplitudenauflösung.

Das wird hier der Haken sein, und das ist genau das, weshalb ich beim 
ersten Nachdenken schrieb "wird grenzwertig".

Ansonsten bekommt man natürlich mit DDS-Sinus + nachfolgendem Komparator 
ein jitterfrei(er)es Rechteck, sofern man dazwischen brauchbar filtert 
(sodass auch wirklich ein Sinus entsteht).

Daher gibt's ja genau diese Kombination auch in den AD98xx-DDS-ICs.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Natürlich kennen wir die Jitter-Anforderungen des TE nicht, er lässt 
sich ja eh nicht mehr blicken.

Interessant sind die diversen Lösungsansätze aber allemal.

: Bearbeitet durch Moderator
von Detlef _. (detlef_a)


Lesenswert?

Falk B. schrieb:
> c-hater schrieb:
>> Da scheint mir aber noch reichlich Luft zu sein (ca. 2/3 der Rechenzeit
>> bleiben ungenutzt):
> Viel Spaß damit.

Ah, fractional divider funktioniert wie Bresenham :)))) . Bresenham, 
good old pixeltimes!

Danke für den Hinweis.

Cheers
Detlef

von ... (Gast)


Lesenswert?

Der liebe Egon moege sich bitte mal einen D.D.S. aus Einzelteilen
zusammenbauen. Das wuerde zweifelsohne sehr lehrreich fuer ihn sein.

von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Hallo,

auf meinem Weg zu Glück und Erkenntnis habe ich mal die Frequenzteilung 
mit DDS, fractional divider und Bresenham in Matlab bebastelt.

Erkenntnisse:

- Ob man bei der DDS mit den oberen Bit in eine Tabelle geht oder nur 
das obere Bit nimmt macht keinen großen Unterschied. Bei der 'square 
wave' kommen die Oberwellen durch. Alternative also: Entweder in der 
digital domain mittels Sinustabelle die Oberwellen unterdrücken oder in 
der analog domain mit Analogfilter.

- Die DDS hat einen ausgeprägten 'threshold effect'. Wenn man den 
Phasenaccumulator mit weniger Bits ausstattet passiert lange nichts aber 
bei einem Bit zu wenig geht der Pasenjittter schlagartig hoch.

- Das Prinzip des Bresenham Algorithmus läßt sich auf die Teilung von 
'square waves' anwenden. Das ist wahrscheinlich rechentechnisch 
äquivalent (homomorph?) zum 'fractional divider', hab ich aber nicht 
mehr gekuckt.

Das Prinzip des Bresenham Algo ist denkbar einfach: Man möchte 11MHz zu 
310kHz runterteilen. Das Verhältnis 11000000/310000=1100/31~35,4 kriegt 
man so: Man summiert auf einen Phasenaccumulator immer 31 auf, wenn der 
>=1100 ist subtrahiert man 1100. Square wave kriegt man mit Vergleich 
des Phasenaccu auf >=1100/2. Das ist ja so ähnlich wie bei der DDS, 
wahrscheinlich sind die beiden Verfahren auch homomorph, auf jeden Fall 
kommt bitgenau dasselbe raus.

Meine Bemühungen sind für Interessierte im angehängten Matlab-script zu 
sehen.
So wurde mir die rationale Zahl zum Freund.
math rulez!

Cheers
Detlef

von Falk B. (falk)


Lesenswert?

Detlef _. schrieb:
> Hallo,
>
> auf meinem Weg zu Glück und Erkenntnis habe ich mal die Frequenzteilung
> mit DDS, fractional divider und Bresenham in Matlab bebastelt.

Das sollte man aber auch mal als Bild für alle anderen darstellen, die 
wenigsten haben Mathlab.

> - Ob man bei der DDS mit den oberen Bit in eine Tabelle geht oder nur
> das obere Bit nimmt macht keinen großen Unterschied.

Vorsicht, das ist keine "echte" DDS. Das hatten wir ja schon diskutiert.

> Bei der 'square
> wave' kommen die Oberwellen durch.

Sicher, aber die Frage war und ist ja der Phasenjitter.

> Alternative also: Entweder in der
> digital domain mittels Sinustabelle die Oberwellen unterdrücken oder in
> der analog domain mit Analogfilter.

Eben das ist die vollständige DDS.

> Meine Bemühungen sind für Interessierte im angehängten Matlab-script zu
> sehen.
> So wurde mir die rationale Zahl zum Freund.
> math rulez!

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Jakob schrieb:
> Jakob (also ich) schrieb:
> Mal abgesehen von der Tatsache, dass der TO (oder TE?) offensichtlich
> schon ein neues Hobby hat...
>
> Jakob (also ich) schrieb:
> Entweder teilt man abwechselnd durch 35 und 36 und freut sich über
> 309.859 Hz mit einem Jitter von gut +/-5°, oder sucht sich was
> Anderes.
>
> --------------------------
>
> Nun frage ich mich, warum aus einer DDS mit Fo / Fout = 35,48387 was
> weniger Jitterndes, als bei abwechselndem Teilen durch 35 und 36
> kommen soll... Auch wenn man nach Vorgabe des Phasenakkus etwas
> seltener durch 36, als durch 35 teilt, um auf den Teiler 35,48387 zu
> kommen, bleibt immer noch der Sprung um ungefähr +/-5°.
>
> Hab ich DDS nicht verstanden?
>
> Die Frage ist nicht bösartig gemeint! Ich würde mich gern (fundiert)
> überzeugen lassen!
> Bin gespannt, ob das hier jemand erklären kann!

Ok, ich hab da noch mal gelesen und es scheint wohl, daß ich da doch die 
DDS ein wenig zu einfach betrachtet habe.
Also. Eine VOLLSTÄNDIGE DDS mit Phasenakku, Sinustabelle, DAC und 
Ausgangsfilter erzeugt DEUTLICH weniger Jitter als ein Fractional 
Divider bzw. wenn man nur das MSB des Phasenakkus der DDS benutzt. Denn 
der fractional divider sowie der Phasenakku können natürlich nur im 
Taktraster ein Signal erzeugen, bei einem Teilerverhältnis von ~35,5 
macht das ~2,8% bzw. 10° Jitter (Spitze-Spitze). Eine VOLLSTÄNDIGE DDS 
(siehe oben) macht das NICHT! Denn der Ausgangsfilter "verwischt" den 
relativ groben Jitter und dämpft damit die Phasenmodulation DEUTLICH! 
Das Ergebnis ist ein Sinussignal mit deutlich weniger Jitter, wenn 
gleich es auch nicht perfekt ist (Nebenlinien im Spektrum, Spurs). Aus 
dem gefilterten Sinus kann man mittels schnellem, jitterarmen Komparator 
wieder ein Digitalsignal machen. Einige DDS-ICs haben den gleich mit im 
Chip.

http://www.analog.com/static/imported-files/tutorials/450968421DDS_Tutorial_rev12-2-99.pdf

Seite 49, "The DDS Clock Generator"

Dort sieht man das Ausgangssignal des DAC, welcher ein Signal von 56 MHz 
mit Fs=175 MHz erzeugt. Das sind nur wilde Zacken, eine Periode besteht 
aus kaum mehr als 3 (DREI!) Samples! Durch den extrem schnellen 
Durchlauf durch den Phasdenakku und die nicht ganzzahlige Teilobarkeit 
von Phasenakku und Frequenzeinstellwort verändern sich diese drei 
Samples auch von Durchlauf zu Durchlauf. Wenn man das Signal mittels 
Komparator mit fester Schaltschwelle in ein Rechteck überführen würde, 
wäre der Jitter riesig, nämlich ein Takt (7,5ns) bzw. 33% der 
Periodendauer!

"Incidentally, the jitter magnitude is the same if only the MSB of the 
10-bit input code to the DAC were to be examined."

Durch ein Tief- oder Bandpass kann man ein nahezu sauberen Sinus 
erzeugen, der nach dem Komparator nur noch ca. 0,25ns Jitter hat. Man 
kann das sicher noch besser machen, aber irgendwann wird der Eigenjitter 
des Komparators zu groß. Der eingebaute im AD985X hat ca. 80ns. Das Bild 
zeigt das Signal nach einem elliptischen Filter 7. Ordung mit ca. 65MHz 
Grenzfrequenz.

Siehe Anhang, ich hab mal den Abschnitt extrahiert.

von Stefan F. (Gast)


Lesenswert?

Habt ihr bemerkt, dass der Ferdinand sich überhaupt gar nicht an seiner 
Diskussion beteiligt? Der ist längst bei den sieben Zwergen hinter den 
sieben Bergen.

von Egon D. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Habt ihr bemerkt, dass der Ferdinand sich überhaupt gar
> nicht an seiner Diskussion beteiligt? Der ist längst bei
> den sieben Zwergen hinter den sieben Bergen.

Das ist doch sein Problem.
Es ist zwar erlaubt, bei den Diskussionen hier etwas zu
lernen -- aber dazu gezwungen werden kann niemand.

von Falk B. (falk)


Lesenswert?

Stefan ⛄ F. schrieb:
> Habt ihr bemerkt, dass der Ferdinand sich überhaupt gar nicht an seiner
> Diskussion beteiligt? Der ist längst bei den sieben Zwergen hinter den
> sieben Bergen.

Nebensächlich und nix Neues.

Beitrag "Re: auf einfache Weise von 11MHz auf 300kHz teilen/generieren"

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Aus dem gefilterten Sinus kann man mittels schnellem, jitterarmen
> Komparator wieder ein Digitalsignal machen. Einige DDS-ICs haben den
> gleich mit im Chip.

Schrob ich weiter oben schon. ;-)

Mir war früher auch nicht klar, warum die sowas dabei haben (nach dem 
Motto: "DDS will man doch für einen schönen Sinus, Rechtecke gibt's auch 
einfacher"). Insofern habe auch ich in diesem Thread natürlich einiges 
dazu gelernt. Nun, das ist das Gute an so einem Forum: kostenlose 
Weiterbildung. :-)

von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe die DDS einmal in der Version 'MSB only' und einmal 
'VOLLSTÄNDIG' ausprobiert. 'VOLLSTÄNDIG' ist entgegen meiner Erwartung 
viel besser als 'MSB only'.

Ich habe eine 32Bit DDS simuliert, die Eingangsfrequnz waren unsere 
bekannten 11Mhz, Ausgangsfrequenz 310kHz, Teilerverhältnis 
1100/31~35.48. Zum Einen habe ich das oberste Bit der DDS genommen, 
blau. Zum Anderen habe ich die obersten 12Bit der DDS genommen und bin 
damit in eine integer Sinustabelle mit der Amplitudenauslösung 16Bit 
gegangen, rot.

Die Spektren ersteren Signals in blau, die letzteren in rot. Rot ist 
sehrsehrviel besser, selbst bei der schlecht aufgelösten Tabelle 50dB.

Bild jitter2.png zeigt das Spektrum bis 11MHz, die Amplituden sind auf 
0dB@310kHz normiert. In blau schön die abfallenden ungeraden Oberwellen 
der 310kHz zu sehen.

Der Jitter von blau zeigt sich in diversen 'Latttenzäunen'. Ich hätte 
erwartet dass bei blau direkt neben den 310kHz die Störspektren 
anfangen. Warum das nicht vorhanden ist verstehe ich nicht. Der 
Lattenzaun mit dem spacing 310kHz bleibt konstant bis 11MHz.

Bild jitter1.png löst das Spektrum noch einmal besser auf, dort gut der 
Lattenzaun mit 20kHz spacing zu sehen. Ich verstehe leider nicht woher 
die 20kHz kommen. Die ersten Störfrequenzen der 310kHz liegen aber 
+/-20kHz daneben. Wenn man blau mit so einem schmalen Bandpass filtert 
ist das Ausgangssignal besser als bei rot. Bei Rot ist schön das 
'leakage' des Tabellensinus zu sehen; nominell hat rot 4*1100/31 
Abtastwerte pro Periode, der Sinus der Tabelle hat 2048, das ist kein 
ganzzahliges Verhältnis.

Immer Tabelle nehmen, selbst wenig hilft viel!

War nicht erwartungskonform und ist teilweise unverstanden, schade

Cheers
Detlef

: Bearbeitet durch User
von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Hier das script

von c-hater (Gast)


Lesenswert?

Detlef _. schrieb:

> Bild jitter1.png löst das Spektrum noch einmal besser auf, dort gut der
> Lattenzaun mit 20kHz spacing zu sehen. Ich verstehe leider nicht woher
> die 20kHz kommen.

Das ist einfach zu erklären. Das ist die Inkarnation des ggT der beiden 
Frequenzen. Alle 50µs (also mit 20kHz) erreicht der Generator wieder 
exakt die Ausgangsposition. Beachten: du steuerst das Togglen eines 
Bits, deswegen das Doppelte der Zielfrequenz, zur Erzeugung einer 
Periode muss man halt zweimal togglen.

11000000 = 2^6 * 5^6 * 11
  620000 = 2^4 * 5^4 * 31
     ggT = 2^4 * 5^4 = 20000

von Detlef _. (detlef_a)


Lesenswert?

c-hater schrieb:
> Alle 50µs (also mit 20kHz) erreicht der Generator wieder
> exakt die Ausgangsposition.

Ich lass den Generator über 31*10^5*11 Runden laufen. In dieser Zeit 
erreicht er seine Ausgangsposition nicht wieder. Diese 20kHz 
Periodizität hat sicher was mit dem ggT zu tun, aber periodisch ist der 
Generator in diesem Zeitrahmen nicht.

Cheers
Detlef

von Falk B. (falk)


Lesenswert?

Detlef _. schrieb:
> Ich lass den Generator über 31*10^5*11 Runden laufen.

Was sind denn das für Runden? Takte? Nanosekunden? Oder komplette 
Akkudurchläufe?

> In dieser Zeit
> erreicht er seine Ausgangsposition nicht wieder.

Wie merkst du das? Prüfst du, ob 0 wieder erreicht wurde?

> Diese 20kHz
> Periodizität hat sicher was mit dem ggT zu tun, aber periodisch ist der
> Generator in diesem Zeitrahmen nicht.

Hmmm, mal rechnen. Man braucht das KGV (kleinstes, gemeinsames 
Vielfaches) von Akkuzählumfang und FTW (frequency tuning word). Bei 
einer DDS mit 11MHz Takt und 310kHz Ausgangssignal und 32 Bit Akku 
braucht man ein Einstellwort von

FTW = F_out / F_s * 2^32 = 310kHz / 11MHz * 2^32 = 
121039987,43272727272727272727273

gerundet 121039987. Akkuzählumfang / FTW = 35 Rest 58567751

Jetzt braucht man soviele komplette Akkudurchläufe, bis sich der Rest 
auf exakt die Akkulänge von 2^32 summiert. Das dauert aber, denn 2^32 / 
58567751 = 73,3 und damit nicht ganzzahlig teilbar. Die exakte Rechung 
geht über Primfaktorzerlegung, aber das ist mir jetzt zu viel Arbeit 8-0

Ok, wozu gibt es Onlinerechner?

https://www.mathepower.com/kgv.php

"Das kleinste gemeinsame Vielfache (kgV) von 4294967296 und 121039987 
ist 519862785673265152."

Ob das stimmt, kann ich nicht nachprüfen ;-)

Wenn es stimmt, braucht man kgv/Akkuzählumfang Durchläufe, sprich, 
Ausgangstakte, bis man wieder beim gleichen Akkustand angekommen ist. 
Hier
519862785673265152 / 2^32 = 519862785673265152 / 4294967296 = 
121.039.987 Ausgangstakte, was ca. 390,45s dauert 8-0

von Detlef _. (detlef_a)


Lesenswert?

Falk B. schrieb:
> Detlef _. schrieb:
>> Ich lass den Generator über 31*10^5*11 Runden laufen.
>
> Was sind denn das für Runden? Takte? Nanosekunden? Oder komplette
> Akkudurchläufe?

Eine Runde ist eine Addition mit ggf overflow. In C
phase=(uint32_t)phase+121039987; // 121039987=2^32*310000/11000000

Falk B. schrieb:
>> In dieser Zeit
>> erreicht er seine Ausgangsposition nicht wieder.
>
> Wie merkst du das? Prüfst du, ob 0 wieder erreicht wurde?

Ja. Oder irgendeine andere Zahl nochmal vorkam. Das passiert nicht.

Deine kgV Rechnung muss ich nochmal nachvollziehen. Ich verstehe ja 
schon die obenstehende ggT Rechnung zur Peridizität nicht richtig d-).

Erinnert mich bißchen an lineare feedback shift registers und deren 
maximum length sequences.

Sehr interessant
Cheers
Detlef

von c-hater (Gast)


Lesenswert?

Detlef _. schrieb:

> Ich lass den Generator über 31*10^5*11 Runden laufen. In dieser Zeit
> erreicht er seine Ausgangsposition nicht wieder.

Meiner schon, genau alle 550 Takte steht in R17 wieder -1 (bzw. 0xff). 
Und: 11.000.000/550=20.000 ;o)

Man kann die 12 ungenutzten Takte sehr leicht nutzen, um das einfach in 
einem Simulator sichtbar zu machen, z.B. so (ohne noch ein weiteres 
Register zu benutzen, was auch wieder initialisiert werden müsste):
1
;waste 12 unnecessary ticks --------------------------------------------
2
  cpi R17,-1
3
  brne incycle
4
  nop   ;set breakpoint here, check cycle count differences between hits
5
6
incycle:
7
  nop
8
  ldi R20,3
9
wait:
10
  dec R20
11
  brne wait
12
;-----------------------------------------------------------------------

übrigens kann man sich mit einem weiteren Breakpoint bei der 
out-Instruktion auch sehr einfach davon überzeugen, dass innerhalb 
dieses Zyklus exakt 31 Toggles erzeugt werden. Und: 20.000*31=620.000, 
620.000/2 = 310.000. Passt.

Bresenham rules, besonders in Asm...

Man kann die zwölf freien Takte statt für diesen trivialen Quatsch 
übrigens sinnvollerweise besser auch dazu nutzen, den Phasenfehler des 
Ausgangssignals deutlich zu verringern. Naja, natürlich nicht wirklich. 
Aber bezüglich des Ausgangsfilters kann man dieselbe Wirkung erreichen, 
als hätte man das wirklich getan...

Das Stichwort ist hier "spread spectrum".

Asm rules...

von Falk B. (falk)


Lesenswert?

c-hater schrieb:
>> Ich lass den Generator über 31*10^5*11 Runden laufen. In dieser Zeit
>> erreicht er seine Ausgangsposition nicht wieder.
>
> Meiner schon, genau alle 550 Takte steht in R17 wieder -1 (bzw. 0xff).
> Und: 11.000.000/550=20.000 ;o)

Du hast ja auch einen Fractional divider, der Detlef einen 32 Bit 
Phasenakku.

> Das Stichwort ist hier "spread spectrum".

Jaja, dithering.

> Asm rules...

Was für eine Überraschung aus DEINEM Munde! ;-)

von c-hater (Gast)


Lesenswert?

Falk B. schrieb:

> Du hast ja auch einen Fractional divider, der Detlef einen 32 Bit
> Phasenakku.

Natürlich.

> Jaja, dithering.

So kann man's auch nennen. Der Punkt ist: ich habe 12 Takte, um es 
umzusetzen und ich bin fähig dazu, es auch tatsächlich zu tun...

Noch wichtiger ist aber: Es ist dann längst nicht mehr so viel 
schlechter als ein "full featured DDS" bei gleichem Systemtakt, nein es 
ist dann im Gegenteil VIEL besser.

Das ist eigentlich der entscheidende Punkt. Und genau deswegen rules 
Asm...

Forever...

Naja, bis irgendeiner auf die Idee kommt, dass man für sowas Primitives 
ja auch gut einen RasPi oder gar einen ausgewachsenen PC benutzen 
könnte, mit hunderten von MHz Takt...

Da hat meine Lösung dann natürlich keine Chance mehr bezüglich der 
Signalqualität. Bezüglich des Stromverbrauchs hingegen schon...

von Detlef _. (detlef_a)


Lesenswert?

Falk B. schrieb:
> "Das kleinste gemeinsame Vielfache (kgV) von 4294967296 und 121039987
> ist 519862785673265152."
>
> Ob das stimmt, kann ich nicht nachprüfen ;-)
>
> Wenn es stimmt, braucht man kgv/Akkuzählumfang Durchläufe, sprich,
> Ausgangstakte, bis man wieder beim gleichen Akkustand angekommen ist.
> Hier
> 519862785673265152 / 2^32 = 519862785673265152 / 4294967296 =
> 121.039.987 Ausgangstakte, was ca. 390,45s dauert 8-0

>> lcm(uint64(2^32),uint64(121039987))
ans =519862785673265152
>> lcm(uint64(2^32),uint64(121039987))/2^32
ans = 121039987

Stimmt.
Soviel Zeit hab ich nicht.

Cheers
Detlef

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.