1750Hz Sinusgenerator mit µC

  • Hallo Forum,

    für ein kleines Projekt habe ich einen 1750Hz Sinusgenerator mit µC als Designstudie aufgesetzt.

    Es kommt ein attiny45 (attiny85) mit 16MHz PLL Clock zum Einsatz, der PWMA (OCR1) Ausgang muss für reale Anwendungen noch ein 2-3 stufiges RC TP-Filter erhalten.

    • Timer0 generiert ein 1750Hz Sinussignal durch nutzen einer Sinustabelle mit 135 Stützstellen.
    • Jeder einzelne dieser 135 PWM Stützstellen wird mit 236,25kHz in das Register OCR1A von Timer1 geschrieben.
    • Das Signal für für 800ms generiert, danach geht der Atmel AVR µC in den Powerdownmodus.
    • Timer1 generiert ein PWM Signal mit 64MHz PLL Clock


    Timer0 enthält keine Interrupt-Service-Routine, sondern es wird im Hauptprogramm das Timer0 Interrupt-Request-Flag abgefragt und so das Zeitsignal verarbeitet.
    Da man nun nur noch 67 Takte für die Berechnungen und Ausgabe des nächsten PWM Wertes Zeit hat, habe ich diesen Teil in Assembler/ LunaAVR codiert.
    Der LunaAVR Code ist natürlich zum Vergleich auch vorhanden.
    Weitere Einzelheiten sind um Quellcode dokumentiert.

    Das Programm unterstützt weitere Sinustabellen mit unterschiedlichen Anzahl von Stützstellen, nicht alle sind brauchbar:

    • 64
    • 96
    • 128
    • 135
    • 160
    • 192
    • 224
    • 256


    64 Stützstellen laufen noch mit einem reinen LunaAVR Programm und 192 Stützstellen ist die maximal Anzahl für den Hybrid Assembler/ LunaAVR Code.

    Und hier noch eine Bildschirmkopie des 1750Hz Sinus mit 192 Stützstellen und zwei nachgeschalteten RC TP-Filter mit R=75Ohm, C=1µF.

    Info:
    Die Fusebits für avrdude eines attiny45/85 sind:

    Quote

    -U lfuse:w:0xc1:m -U hfuse:w:0xdc:m -U efuse:w:0xff:m


    Link:
    * LunaAVR V2014 R2.4 (stable)
    * zum Forum

    Edit
    * 31.03.15 Firmware und LunaAVR Sourcecode

  • Hallo Forum,

    hier noch ein kleines Update des Projekt:

    Ich habe die Schaltung nun mit einen 3-stufigen RC TP-Filter (R=2,2kOhm, C=33nF) mit Emitterfolger ergänzt.
    Der Attiny45 generiert über eine PWM-Sinustabelle mit 135 Stützstellen das 1750Hz Sinussignal.
    Aufgenommen habe ich es an R5 (1kOhm) mit einem 1MOhm Tastkopf - schön wie ich finde. ^^

  • Hallo Uwe,

    das ist ja ein gutes Signal, erstaunlich, was man mit PWM erreichen kann! Und eine pfiffige Idee, den Controller nach dem Piep "schlafen zu legen".

    Da ich mich mit ähnlichen Problemen beschäftige, demnächst ein Sinusgenerator mit 12 Bit DA- Wandler (Cortex M4), sollten wir in Kontakt bleiben.

    73, Wolfgang

  • Hallo OM,

    für unseren Fieldday auf dem Wirberg bei Grünberg, 01.10.15 bis 4.10.15, haben wir uns entschlossen dieses kleine Projekt dort aufzubauen.

    Die Platine des 2.ten Prototypen habe ich gerade erfolgreich aufgebaut, die Firmware kann einfach über den Bootloader Fastboot V2.9 von Peter Dannegger eingespielt werden.

    Der 3.te Prototyp wird noch einen regelbaren Ausgang für direkte Einspeisung des Signals in ein Mikrofon enthalten.

  • Moin Uwe,

    wäre es nicht besser am Emitter des Transistors einen Serien C zu setzen, damit der Lautsprecher nicht mit Gleichspannungsanteilen beaufschlagt werden kann?

    73, Tom

    Ich bin dann mal weg ...

  • Hallo Tom,

    ja eigentlich, wenn man einen normalen Lautsprecher mit einer Spule verwenden würde.

    Ich habe aber eine Piezoschallwandler "C" angeschlossen und nur wenn ein Signal ausgegeben wird, ist dort auch eine Spannung vorhanden.

    In der nächsten Version wird eine Bestückung eines Kondensators möglich sein.

    73 de Uwe
    DC5PI

  • Moin Uwe,

    okay, das ging aus dem Schaltplan nicht hervor ;)

    Und der Piezowandler gibt die 1750 Hz genau wieder oder musstest Du die Frequenz vom Controller anpassen?

    73, Tom

    Ich bin dann mal weg ...

  • Hallo OM,

    hier seht ihr noch ein Bild des 2.ten Prototypen, mit Steckverbindern und noch ohne direkte Mikrofon Einkopplung am TRX.

    Den aktuellen (neuen) Schaltplan, Layout der endgültigen Platine findet ihr im Download Anhang.

  • Hallo OM,

    CTCSS Subtongenerator
    Angeregt durch eine Diskussion im Forum forum.db3om.de habe ich eine weitere
    Firmware den CTCSS-Generator programmiert.

    Man kann über 3 Eingangspins: PB0, PB2 und PB3 des Attiny85 max. 2^8 = 8 CTCSS
    Töne auswählen. Diese 8 CTCSS Subtöne können natürlich frei gewählt werden und
    werden im Programm hinterlegt.

    In meinem Beispielprogramm habe ich diese CTCSS Subtöne eingetragen:

    Code
    Input | CTCSS Subton [Hz]
    0 | 67.0
    1 | 82.5
    2 | 85.4
    3 | 88.5
    4 | 100.0
    5 | 110.9
    6 | 123.0
    7 | 136.5

    Insgesamt stehen 38 CTCSS Subtöne zur Auswahl.
    Siehe: https://de.wikipedia.org/wiki/CTCSS

    Die Platine kann man, bis auf die Kondensatoren C4-C6 = 220nF NPO/COG (SMD 1206)
    des dreistufigen Tiefpassfilter, gleich aufbauen.

    73 de Uwe
    DC5PI

    Edited 2 times, last by DC5PI (September 15, 2015 at 9:25 PM).