Forum: Mikrocontroller und Digitale Elektronik Verschiedene Frequenzen mit nur einem Timer


von Michael R. (michi42)


Lesenswert?

Hi Forum,

ich würde gerne zwei unabhängig voneinander einstellbare Frequenzen 
(Rechteck) mit einem Tiny45 erzeugen.
Ich möchte dafür aber nur Timer0 verwenden.
Erste Versuche im Toggle/ctc Mode waren nicht so erfolgreich 
(Verschiedene  ocra/B Werte (dachte ich im jugendlichen Leichtsinn...)
Der Counter wird ja stets von Overflow on A zurückgesetzt :-(

Frage:
Gibt's noch einen WGM Mode, den ich übersehen habe

- oder bleibt nur der Weg über Timerinterupt einen/zwei/drei Phasenakkus 
als Zeiger in eine DDS Tabelle weiterzuzählen und die Pins  dann selbst 
(PORTB=) zu toggeln.
DDS hätte noch den netten Nebeneffekt, dass ich auch noch ein 
vorausberechnetes ein-Bit codiertes Rauschen auf einem dritten Pin mit 
ausgeben kann.

von ... (Gast)


Lesenswert?

Michael R. schrieb:
> ich würde gerne zwei unabhängig voneinander einstellbare Frequenzen
> (Rechteck) mit einem Tiny45 erzeugen.

Und um was für Frequenzen geht es?
Wie hoch darf der Jitter sein?

von spontan (Gast)


Lesenswert?

>DDS hätte noch den netten Nebeneffekt, dass ich auch noch ein
>vorausberechnetes ein-Bit codiertes Rauschen auf einem dritten Pin mit
>ausgeben kann.

Dann machs doch. Oder was hält Dich ab?

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Michael R. schrieb:
> - oder bleibt nur der Weg über Timerinterupt einen/zwei/drei Phasenakkus > als 
Zeiger in eine DDS Tabelle weiterzuzählen und die Pins  dann selbst
> (PORTB=) zu toggeln.

Rischtisch. Ein Timer kann immer nur eine einzige Frequenz gleichzeitig 
erzeugen. Aus dieser Frequenz musst Du dir dann (z.B. mittels DDS) deine 
anderen Frequenzen ableiten. Um welche Frequenzen geht es denn?


Gruß
Jonathan

von Peter D. (peda)


Lesenswert?

Michael R. schrieb:
> ich würde gerne zwei unabhängig voneinander einstellbare Frequenzen
> (Rechteck) mit einem Tiny45 erzeugen.

Dann spezifizier erstmal die Anforderungen (max, min, Auflösung, 
Genauigkeit), sonst wird das nix.

Zum Lösen einer Aufgabe gehört zu allererst die Spezifikation.


Peter

von Michael R. (michi42)


Lesenswert?

Die Anforderungen sind m.E. nicht besonders hoch
fmin= 4 kHz, fMax 40 kHz, Auflösung ca. 100Hz
Phasenjitter ist weitgehend egal. 10° ist sicher drin.

Genauigkeit: interner Rc Oszillator ist ausreichend.
Mit dem 8-Bit Teiler hätte ich bei 40kHz auch kaum mehr als 1kHz Steps 
hinbekommen und das wäre auch noch ok gewesen.

Werd's wohl mal mit einer 16-Bit dds probieren (meine erste :-).
Die Lookup-Tabelle lässt sich bei Rechteck ja recht gut "komprimieren" 
und bei 40 KHz bleiben reichlich cpu-Takte die man in einer ISR 
verbraten darf.

von Hinz (Gast)


Lesenswert?

Michael R. schrieb:
> Die Lookup-Tabelle lässt sich bei Rechteck ja recht gut "komprimieren"

Stimmt, da sollte eine Vergleichsoperation ausreichen ;-)

von Falk B. (falk)


Lesenswert?

http://www.myplace.nu/avr/minidds/index.htm

Das ganze in der Software doppelt, verringert zwar die Abtastrate um 
Faktor zwei, für 40 kHz Sinus reicht es aber noch locker.

von Michael R. (michi42)


Lesenswert?

yep, so ungefahr...

mal sehen ob der gcc-code schnell genug dafür ist oder ob es Handarbeit 
braucht.

Btw: wie bekomme ich das 1-Bit Rauschen hin? (alle Ausgänge digital, 
kein r/2r Netzwerk)
Längere Lookup-Tabele, klar. 256 Stützstellen sind nicht so wirklich 
berauschend.
Das Rauschen sollte natürlich auch  > 4kHz HP gefiltert sein. Also 
weisses Rauschen im Audacity an passender Grenzfrequenz HP filtern und 
das ganze dann mit Sigma/delta auf ein Bit encoden?

Das hier könnte evtl nützlich sein. 
http://www.romanblack.com/BTc_alg.htm
Hat das schon jemand versucht oder bin ich auf dem Holzweg.

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
Noch kein Account? Hier anmelden.