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
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 ....
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.
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
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.
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.
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.
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.
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.
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.
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.
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
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.
Oder: 74HC4060https://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
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
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
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...
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.
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.
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.
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?
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.
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 PIC32MP3-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.
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?
> 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.
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. 😃
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
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
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
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
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
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.
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
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.
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!
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?
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. 😃
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
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)
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 #############################
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!
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.
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 :-)
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.
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.
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?
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.
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
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
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.
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.
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.
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.
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
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
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!
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.
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.
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.
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. :-)
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
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
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
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
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
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):
ü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...
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! ;-)
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...
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