Frequenzerzeugung mit ATmega

Gast #1023229
Lesenswert?
• ▲
▼
Meine Aufgabe ist über einen ATmega 4 unterschiedlich einstellbare 
Frequenzen von 0-20kHz zu erzeugen. Im CTC-Mode würde das relativ 
einfach funktionieren, aber man bräuchte für jede Frequenz einen Timer 
(insgesamt 4), so wie ich das aus dem Datenblatt sehe. 4 Timer dafür zu 
verwenden ist zu viel, da ich noch welche für andere Zwecke benötige.

Meine Idee ist jetzt einen Timer-Interrupt mit 20kHz (alle 50us) zu 
definieren. In der ISR werden dann 4 Zähler verwaltet und hochgezählt 
bis zu einem einstellbaren Wert. Bei erreichen des Wertes soll der 
entsprechende PIN getoggelt werden. Auf diese weise wären 4 verschiedene 
Frequenzen in 1Hz-Schritten realisierbar. Soweit die Theorie.

Da der ATmega auch noch andere Aufgaben übernehmen soll, wäre 
interessant zu wissen, wieviel Zeit die Bearbeitung der ISR ca. in 
Anspruch nimmt. Der ATmega soll mit ca. 8MHz getaktet werden. Oder ist 
eine externe einstellbare Frequenzerzeugung unumgänglich?

Gruß MaBu
Gast #1023274
Lesenswert?
• ▲
▼
Ja richtig! Der Timer-Interrupt muss natürlich mit 40kHz laufen um beide 
Flanken erzeugen zu können.

Meine Frage: ist der ATmega damit überfordert alle 25us die ISR 
aufzurufen, 4 externe Variablen zu inkrementieren und 4 Abfragen 
externer Variablen durchzuführen?
Gast #1023416
Lesenswert?
• ▲
▼
3 Möglichkeiten:
1. für jede Frequenz einen eigenen Timer, da brauchst Du einen anderen 
Controller.

2. einen Timer, der per Software alle 4 Frequenzen erzeugt:
eine Tabelle, bei welchem nächsten Zählerstand die Pins getoggelt werden 
müssen.
Bei jedem Interrupt den Timer auf den jeweils nächsten Eintrag der 
Tabelle setzen (naheliegende Zählerstände zusammenfassen).

3. DDS, z.B. Jespers "Poor Man's DDS"
Für Rechteck geht das ohne Sin-Tabelle noch einfacher.
Gast #1030980
Lesenswert?
• ▲
▼
Ich habe mir jetzt Samples vom AD9833 und AD5932 bestellt und werde 
diese testen. Ist zwar etwas überdimensioniert, aber so bleibt später 
noch Raum für höhere Anforderungen.

Ich bin zwar nicht sicher, ob der "Square-Wave Output" nicht doch zu 
viel Jitter im DutyCycle verursacht. Problematisch wird es, wenn hier 
Einstellungen ungleich der 2er-Basis getroffen werden. Ich benötige 50% 
DutyCycle. Falls doch muss der "Triangle Output" und ein hinterher 
geschalteter Komparator herhalten.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.