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
Nein. Ja. Flipflops, Zähler und Gatter.
:
Bearbeitet durch User
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.
uC Loesung ist bestimmt einfacher als diskrete Loesung!
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.
Fractional-N-Teiler wäre das Stichwort.
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.
Wie genau müssen denn die 310kHz sein? Der MC kann nur ganzzahlig teilen oder als Mittelwert mit Jitter.
Peter D. schrieb: > Der MC kann nur ganzzahlig teilen oder als Mittelwert mit Jitter Eine Loesung mit Gatter und FFs auch
Kommt halt drauf an, wie genau das sein muss. Wenn 2% reichen, dann reicht jeder PIC12 oder ATTINY mit Timer.
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.
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?
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.
Am einfachsten waere wohl ein kleiner 16F1503/7/8/9 mit einem NCO.
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.
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.
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: 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
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
Wolfgang schrieb: > Eine PLL … hatte ich ja oben mit genannt. Der TE meldet sich aber sowieso nicht mehr, wie's scheint.
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?
Beitrag #6565887 wurde von einem Moderator gelöscht.
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!
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 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.
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.
> 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.
mal was Altmodisches: NE555 als astabiler Vibrator mit Trimmpoti bis die Frequenz passt? Laut TO müssen die 11 MHz nicht verwendet werden.
Ein alter normaler 555 pfeift bei ueber 300 kHz schon auf dem letzten Loch. Besser ein 1/4 4093.
Einfach 4 Stück 77,5 kHz DCF Quarze in Serie schalten. Das ergibt dann exakt 310 kHz. 😊
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
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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
@Ferdinand: Prima, wieder ein "ask once, read never" Fragesteller...
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
Und das ist momentan ein Klauenpolmotor? Hmm.... W.S.
Moin, W.S. schrieb: > Und das ist momentan ein Klauenpolmotor? https://de.wikipedia.org/wiki/Spaltpolmotor#Langsamlaufender_Spaltpolmotor 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 ############################# |
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 | ;####################################################################### |
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.
:
Bearbeitet durch Moderator
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
Der liebe Egon moege sich bitte mal einen D.D.S. aus Einzelteilen zusammenbauen. Das wuerde zweifelsohne sehr lehrreich fuer ihn sein.
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.
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"
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
:
Bearbeitet durch User
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):
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...
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.