Freuenz mit Atmega 2560 erzeugen.

OP #7443649
Lesenswert?

Moin

Ich habe einen Atmega2560 und suche die Möglichleit eine Frequenz in 1 Hz schritte von 1- ca 200 khz zu erzeugen.

Leider finde ich kein Chip der über SPI angesteuert wird und . Früher wurde auch schon mal der V/F wandler AD654/AD652 eingesetzt . Dazu würde ein DA Wandler benötigt der mit 16 Bit eine Spannung erzeugt.

Lieber wäre mir die direkt ansteuerbaren Chip. oder kann der Prozessor das selber das Signal erzeugen.

Gruß Salvus

Moderator (Firma: Titel) Persönliche Seite #7443714
Lesenswert?

Salvus M. schrieb:

Ich habe einen Atmega2560 und suche die Möglichleit eine Frequenz in 1 Hz schritte von 1- ca 200 khz zu erzeugen.

Welchen Jitter kannst du dir erlauben?

kann der Prozessor das selber das Signal erzeugen.

Mit einer DDS/DDFS können auch Rechtecksignale erzeugt werden: https://www.mikrocontroller.net/articles/DDS

Lieber wäre mir die direkt ansteuerbaren Chip.

Auch hier hilft DDS als Stichwort weiter:

Moderator (Firma: Titel) Persönliche Seite #7443754
Lesenswert?

Salvus M. schrieb:

Leider finde ich kein Chip der über SPI angesteuert wird

Es gibt ja auch andere pfiffige Schnittstellen.

Wilhelm M. schrieb:

Weil der TO nicht weiß, was er will. Sonst hätte er auch die Signalform dazu geschrieben.

Es gibt 2 Arten von Menschen:

  1. die, die auf Basis unvollständiger Informationen extrapolieren können

Ein Tipp: der bereits früher eingesetzte AD654 kann nur ein simples symmetrisches Rechtecksignal ausgeben.

Moderator (Firma: Titel) Persönliche Seite #7443791
Lesenswert?

Peter D. schrieb:

Die 1Hz Auflösung sind sportlich, brauchst Du die wirklich?

Kann bei der bisherigen Lösung mit 16-Bit DA und Uf-Wandler auch noch nicht nötig gewesen sein, denn auch wenn ich vom idealen DA-Wandler ausgehe, war da die Auflösung sicher nicht besser als 200kHz/65536 = 3Hz.

Sebastian W. schrieb:

Die, die mit ihrer Extrapolation falsch liegen.

Warten wir es ab.

#7444158
Lesenswert?

Wilhelm M. schrieb:

C-hater schrieb:

Lothar M. schrieb:

Salvus M. schrieb:

Ich habe einen Atmega2560 und suche die Möglichleit eine Frequenz in 1 Hz schritte von 1- ca 200 khz zu erzeugen.

Welchen Jitter kannst du dir erlauben?

Das ist der eigentliche Knackpunkt.

Das glaube ich nicht.

Ist aber so. Über einen langen Zeitrahmen die gewünschte Frequenz exakt abzubilden, ist überhaupt kein Problem. Dazu muß die Maschine nur schnell genug sein, um die höchste geforderte Frequenz generieren zu können (und nebenbei ein wenig zu rechnen). 200kHz auf einer (typisch) 16MHz-Maschine ist wirklich leicht.

Und die geringeren Frequenzen kann man dann auch (long term) exakt erzeugen, nur halt mit mehr oder weniger Jitter.

Es gab hier schon etliche Threads zu vergleichbaren Problemen. Was genau hast du an diesen Lösungen nicht verstanden?

#7444171
Lesenswert?

Wilhelm M. schrieb:

C-hater schrieb:

200kHz auf einer (typisch) 16MHz-Maschine ist wirklich leicht.

Das war nicht die Anforderung, sondern [1,200]KHz mit 1Hz Auflösung.

Ganz genau. Und der Punkt ist: wenn ich die 200kHz erzeugen kann, kann ich auch alle geringeren Frequenzen mit 1Hz-Stufung erzeugen. Und zwar sogar exakt, zumindest auf lange Sicht.

Das Problem ist halt nur der Jitter. Also die momentane Abweichung von der Sollfrequenz. Das ist, wenn man von der "langen Sicht" reinzoomt auf eine einzelne Periode der erzeugten Frequenz. Die wird wackeln (zumindest für sehr viele der möglichen Zielfrequenzen).

Und der springende Punkt ist halt: wie sehr darf sie wackeln, damit die Zielanwendung damit zufrieden ist.

Hast du es jetzt kapiert?

#7444191
Lesenswert?

Mi N. schrieb:

Und der springende Punkt ist halt: wie sehr darf sie wackeln, damit die Zielanwendung damit zufrieden ist.

Aus den geforderten 1 Hz Auflösung ergibt sich auch ein Jitter von < 1 Hz. Alles andere ist Murks.

Das ist schlicht falsch. Wie misst du denn deine Frequenz? Über 1s? 10s? 100s?

Kann es sein, daß du nicht weißt, was Jitter ist? Der kann verdammt hoch sein, und trotzdem akzeptabel.

https://de.wikipedia.org/wiki/Jitter

#7444197
Lesenswert?

Falk B. schrieb:

C-hater schrieb:

Das Problem ist halt nur der Jitter. Also die momentane Abweichung von der Sollfrequenz.

Sollphase.

Natürlich. Ich wollte wimalopaan nicht überfordern. Wenn er es erstmal für die Frequenz begreift, ist es nur noch ein kleiner Schritt bis zur Phase und damit der exakten Definition für den Jitter. Tatsächlich steht das aber natürlich in einem engen mathematischen Zusammenhang...

#7444223
Lesenswert?

Salvus M. schrieb:

Ich habe einen Atmega2560 und suche die Möglichleit eine Frequenz in 1 Hz schritte von 1- ca 200 khz zu erzeugen.

Die Periodendauern von bspw. 200000Hz und 200001Hz unterscheiden sich um 25ps. Das ist deutlich kürzer als die Periode des Taktes deines ATmega2560. Wenn du auch noch auf ein exakten Tastverhältnis von 50% Wert legst, halbiert sich das noch einmal. Exakt wird das also nichts und du wirst Kompromisse machen müssen. Bist du dazu bereit?

#7444227
Lesenswert?

Antwort von chatgpt:

Um eine Frequenz in Schritten von 1 Hz von 1 Hz bis ca. 200 kHz mit einem Atmega2560 Mikrocontroller zu erzeugen, können Sie die Timer- und PWM-Funktionen des Mikrocontrollers verwenden. Hier ist eine allgemeine Vorgehensweise, wie Sie dies erreichen können:

Wählen Sie einen geeigneten Timer des Atmega2560 aus, der die gewünschte Frequenzbandbreite abdeckt. Der Atmega2560 verfügt über mehrere Timer, wie Timer0, Timer1, Timer2 usw. In diesem Beispiel verwenden wir Timer1.

Konfigurieren Sie den Timer1 im CTC (Clear Timer on Compare Match) Modus. Dadurch können Sie den Timer zyklisch zählen lassen und eine Aktion auslösen, wenn ein bestimmter Vergleichswert erreicht wird.

Berechnen Sie den entsprechenden Vergleichswert für den gewünschten Frequenzwert. Die Formel für den Vergleichswert lautet: Vergleichswert = (F_CPU / (Frequenz * Vorteiler)) - 1. Dabei ist F_CPU die Taktfrequenz des Mikrocontrollers (in der Regel 16 MHz für den Atmega2560), Frequenz die gewünschte Frequenz in Hz und Vorteiler der gewünschte Teilerwert.

Setzen Sie den Vergleichswert im OCR1A-Register (Output Compare Register A) des Timer1.

Aktivieren Sie das PWM-Signal am gewünschten Pin. Wählen Sie einen Pin aus, der PWM-fähig ist und an den Sie das Signal weiterleiten möchten.

Konfigurieren Sie den Pin als Ausgang und aktivieren Sie das PWM-Signal mit der gewünschten PWM-Wellenform (z. B. Phase Correct PWM oder Fast PWM).

Starten Sie den Timer1, damit die Frequenzgenerierung beginnt.

Hier ist ein Beispielcode in C, der diese Schritte veranschaulicht:

c Copy code #include <avr/io.h>

#define F_CPU 16000000UL // CPU-Taktfrequenz (16 MHz) #define PRESCALER 8 // Vorteiler (8)

void setup() { // Timer1 konfigurieren (CTC-Modus) TCCR1A = 0; // Alle Einstellungen auf Null setzen TCCR1B = (1 << WGM12); // CTC-Modus aktivieren (Clear Timer on Compare Match) OCR1A = ((F_CPU / (1 * PRESCALER)) - 1); // Vergleichswert für 1 Hz berechnen

// Pin 9 (OC1A) als Ausgang konfigurieren DDRB |= (1 << DDB1);

// PWM-Modus konfigurieren (Fast PWM, non-inverted) TCCR1A |= (1 << COM1A1); TCCR1A |= (1 << WGM10); TCCR1B |= (1 << WGM12); TCCR1B |= (1 << CS11); // Vorteiler auf 8 setzen

// Timer1 starten TCCR1B |= (1 << CS11); // Vorteiler auf 8 setzen }

int main() { setup();

while (1) { // Der Hauptcode kann hier eingefügt werden }

return 0; }

#7444294
Lesenswert?

C-hater schrieb:

Falk B. schrieb:

C-hater schrieb:

Das Problem ist halt nur der Jitter. Also die momentane Abweichung von der Sollfrequenz.

Sollphase.

Natürlich. Ich wollte wimalopaan nicht überfordern. Wenn er es erstmal für die Frequenz begreift, ist es nur noch ein kleiner Schritt bis zur Phase und damit der exakten Definition für den Jitter. Tatsächlich steht das aber natürlich in einem engen mathematischen Zusammenhang...

Danke für die Fürsorge, aber das brauchst Du mir nicht zu erklären. Und ich hoffe, dass Du den Zusammenhang zwischen Phase und Momentanfrequenz weißt.

Und weiterhin ist die Antwort von c-hater für den TO natürlich wie immer vollkommen irreführend und absolut nutzlos. Der TO erwartet einfach einen NCO mit "möglichst kleinem Jitter", was auch immer das heißen mag. Aber jedenfalls nicht das, was man mit einem simplen Timer eines mega@16MHz erreichen kann. Die Periodenlänge und das delta-f wird dem TO nicht gefallen. Denn ich glaube nicht, dass er einfach nur eine im Mittel genaue Uhr bauen will. Da könnte er einfach die Netzfrequenz nehmen, deren Momentanfrequenz ja stark schwankt, die gemittelte Frequenz jedoch hoch genau ist.

Der TO braucht wohl eher einen Si5351 (oder AD9851) produziert. Ok, der aktuelle Preisunterschied lässt eher den Si5351 als die bessere Wahl erscheinen, wohl auch, weil der TO mit einem sym. Rechteck zufrieden sein wird.

#7444454
Lesenswert?

Falk B. schrieb:

Das ist schlicht falsch. Wie misst du denn deine Frequenz? Über 1s? 10s? 100s?

Was war denn noch einmal die Frequenz? Schwingungen pro Sekunde? Oder hier vielleicht noch besser pro µs? Ist auch egal.

Kann es sein, daß du nicht weißt, was Jitter ist? Der kann verdammt hoch sein, und trotzdem akzeptabel.

https://de.wikipedia.org/wiki/Jitter

Schön, aber hat der TO etwas von Datenübertragung geschrieben? Übersetzt man 'jitter' als Zittern oder Wackeln, so ist das bezogen auf eine Sollfrequenz eine Frequenzmodulation. Schön, wenn man bei einem Signalgenerator diese Modulation dazugeben kann, wichtig aber auch, daß diese komplett unterbleibt.

Wenn ich mir einen Wecker stelle, möchte ich mindestens minutengenau geweckt werden und nicht nach dessen Tageslaune mit +/- 30 Minuten Toleranz, auch wenn es im Jahresmittel wieder genau hinhaut.

Salvus M. schrieb:

Moin , es gibt Menschen die Ihren Frust hier abladen und die die einfach helfen Besten Dank an die Helfer . Feierabend .

Welche Lösung hast Du denn für Dich gefunden?

#7444461
Lesenswert?

Lothar M. schrieb:

Es gibt 2 Arten von Menschen:

  1. die, die auf Basis unvollständiger Informationen extrapolieren können

Was zu gut 20 Posts mit Spekulationen geführt hat und Diskussion inwieweit diese Spekulationen stimmen. Wenn einer die notwendigen Fragen gestellt hätte und der TO zeitnah darauf geantwortet, könnte man bedeutend besser helfen.

Salvus M. schrieb:

Moin , es gibt Menschen die Ihren Frust hier abladen und die die einfach helfen Besten Dank an die Helfer . Feierabend .

Aber der TO scheint ja eh nicht an einer wirklichen Problemlösung interessiert zu sein. Oder er hat aus dem einen oder anderen Beitrag jetzt etwas herausgezogen das ihm hilft oder er meint es hilft, ist aber nicht freundlich genug zu sagen was er jetzt macht.

Moderator (Firma: Titel) Persönliche Seite #7444477
Lesenswert?

Salvus M. schrieb:

Moin , es gibt Menschen die Ihren Frust hier abladen und die die einfach helfen Besten Dank an die Helfer .

Mag sein, aber wie sollte man dir denn zielsicher und gewinnbringend helfen, wenn du die fraglichen und nötigen Informationen nicht beisteuerst?

Udo S. schrieb:

und der TO zeitnah darauf geantwortet

Ahem, dir ist schon klar, dass du da grade den TO zitiert hast und der auch nach langer Zeit nur ein Lamento und eben nicht die nötigen Informationen geliefert hat.

Horst H. schrieb:

Antwort von chatgpt: // Vergleichswert für 1 Hz berechnen

Knapp vorbei ist auch voll daneben. Stell mit dem Code mal 199999 Hz ein. Und dann 199998 und 199997 usw...

Mit ein klitzekleinwenig Nachdenken kommst du drauf, dass du mit einem simplen Integer-Vorteiler (und was anderes hat der µC nicht als Hardwarekomponente) zwar z.B. aus 16Mhz mit einem Wert von 80 genaue 200000Hz erzeugen kannst, aber der kleinstmögliche nächste Schritt ist dann eben ein Vorteiler von 81 mit einer resultierenden Frequenz von 197531Hz.

#7444644
Lesenswert?

Peter D. schrieb:

Salvus M. schrieb:

Moin , es gibt Menschen die Ihren Frust hier abladen und die die einfach helfen Besten Dank an die Helfer .

Dann war die Forderung mit den 1Hz und ohne PWM also ne pure Luftnummer.

Ja, wie so oft.

Wilhelm M. schrieb:

C-hater schrieb:

Lothar M. schrieb:

Salvus M. schrieb:

Ich habe einen Atmega2560 und suche die Möglichleit eine Frequenz in 1 Hz schritte von 1- ca 200 khz zu erzeugen.

Welchen Jitter kannst du dir erlauben?

Das ist der eigentliche Knackpunkt.

Das glaube ich nicht.

Das hat sich dann auch bestätigt.

#7444652
Lesenswert?

Salvus M. schrieb:

Moin , es gibt Menschen die Ihren Frust hier abladen und die die einfach helfen Besten Dank an die Helfer .

Helfen kann man dir nur wenn du detailliert angibst was du brauchst. Alle möglichen Nachfragen bist du mit Antworten nicht nachgekommen. Die detailreiche Spezifikation deiner Erfordernisse sind aber absolut entscheidend für die Hilfe die man dir geben kann. Keiner wird sich ins Blaue hinein Gedanken machen und hier Vorschläge unterbreiten wenn er nicht weiss wohin es gehen soll. Kapiert?

Kann natürlich auch sein dass du allein durch die Fragen bereits derart überfordert bist dass dein ganzes Projekt weder durchführbar ist noch überhaupt Sinn macht.

Salvus M. schrieb:

Feierabend .

Nur für heute oder für immer? Übrigens, du plenkst!

#7444943
Lesenswert?

Mi N. schrieb:

Wenn ich mir einen Wecker stelle, möchte ich mindestens minutengenau geweckt werden und nicht nach dessen Tageslaune mit +/- 30 Minuten Toleranz, auch wenn es im Jahresmittel wieder genau hinhaut.

Jahrzehntelang haben Uhren mit der Netzfrequenz als Zeitbasis funktioniert, wenn man einmal von Einlagen absieht, wo im Frühjahr 2018 ein Stromanbieter es nicht für nötig befunden habt, ausreichend Regelleistung zur Verfügung zu stellen und damit das europäischen Verbundnetz runtergezogen haben - allerdings hat sich auch das bei weitem nicht auf 30 min aufsummiert, eher 5 Minuten. Hast du ein Beispiel, wann es zu 30 Minuten Abweichungen bei der Netzzeit gekommen sein soll?

#7445047
Lesenswert?

Rainer W. schrieb:

Mi N. schrieb:

Wenn ich mir einen Wecker stelle, möchte ich mindestens minutengenau geweckt werden und nicht nach dessen Tageslaune mit +/- 30 Minuten Toleranz, auch wenn es im Jahresmittel wieder genau hinhaut.

Jahrzehntelang haben Uhren mit der Netzfrequenz als Zeitbasis funktioniert, wenn man einmal von Einlagen absieht, wo im Frühjahr 2018 ein Stromanbieter es nicht für nötig befunden habt, ausreichend Regelleistung zur Verfügung zu stellen und damit das europäischen Verbundnetz runtergezogen haben - allerdings hat sich auch das bei weitem nicht auf 30 min aufsummiert, eher 5 Minuten. Hast du ein Beispiel, wann es zu 30 Minuten Abweichungen bei der Netzzeit gekommen sein soll?

Ist das Mittellungsintervall bzw. die Akkumulation nur lang genug, dann geht die Abweichung wieder auf null zurück. Das ist ja auch das Ziel und wird entsprechend geregelt.

https://www.netzfrequenzmessung.de/netzzeit.php

Wenn der mega@16MHz auch momentane Abweichungen im Bereich < 1KHz macht und der Jitter im Bereich von > 1KHz, so kann man den mittleren Fehler durch beliebig lange Mittelung auch wieder beliebig klein machen. Aber nochmal: ich denke, das dass das Ziel des TO ist. Ich bleibe bei meines Empfehlung des SI5351.

#7445114
Lesenswert?

Rainer W. schrieb:

Hast du ein Beispiel, wann es zu 30 Minuten Abweichungen bei der Netzzeit gekommen sein soll?

Wilhelm hat es ja schon erklärt, daß sich mein (drastisches) Beispiel nicht auf eine absolute Drift bezog, sondern auf Teilintervalle, die sich durch gebrochene Teiler ergeben könnten. Aus dem, was Lothar weiter oben angedeutet hat, könnte man sich 199999 Hz auch aus Intervallen mit Teilerfaktoren 80 und 81 zusammensetzen, wobei bei kurzzeitiger Betrachtung die Sollfrequenz nie erreicht wird.

Wilhelm M. schrieb:

Ich bleibe bei meiner Empfehlung des SI5351.

Was mich noch reizen würde, die Sache mal mit einem RP2040 anzugehen. Bei 300 MHz und mit 2. Kern, DMA und PIO könnte man schon Einiges herausholen. Für stabile Rechteckfrequenzen ist es wohl sinnvoll, ein gefiltertes Sinussignal zu erzeugen und per Komparator umzuformen. Aber dafür ist der Sommer zu schade ;-)

#7445294
Lesenswert?

Wilhelm M. schrieb:

Ist das Mittellungsintervall bzw. die Akkumulation nur lang genug, dann geht die Abweichung wieder auf null zurück.

Bei der Netzfrequenz sollte die erforderliche Mittelungszeit aber nicht Wochen oder Monate betragen, um den aufsummierten Fehler unter eine Minute zu drücken.

Das ist ja auch das Ziel und wird entsprechend geregelt.

Oder eben auch nicht, wenn die dafür erforderliche Regelleistung nicht bereit gestellt wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren