www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenzerzeugung mit ATmega


Autor: MaBu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Skua C:\> (skua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Prinzip richtig gedacht aber mit 20kHz Timer wird das nix mit 1Hz 
Schritten bis 20kHz.
fMax = 10 kHz
1Hz Schritte Rechne noch mal nach.

Autor: MaBu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Skua C:\> (skua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du dir mal die Zeiten anschaust die du machen kannst
50uS 20kHz
100uS 10kHz
150uS 6,6kHz


40kHz timer = 200 befehle pro zyklus.

Autor: Jadeclaw Dinosaur (jadeclaw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal im Datenblatt hinten in die Befehlsliste (Instruction Set 
Summary), da steht auch bei, wieviele Takte jeder einzelne Befehl 
braucht. Dazu kommt dann noch Einsprung und Rückkehr aus dem Interrupt, 
minimal 8 Takte. bei 8MHz-Takt also 1µs.

Gruß
Jadeclaw.

Autor: eProfi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: MaBu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.