- LiFePO4 Speicher Test         
Ergebnis 1 bis 6 von 6

Thema: Anfängerfrage: Ton per Timer erzeugen

  1. #1

    Anfängerfrage: Ton per Timer erzeugen

    Anzeige

    Praxistest und DIY Projekte
    Einen wunderschönen guten Abend!

    Eins vorweg: Habe schon die Suche benutzt, aber bei den Stichwörtern "Timer Ton" und "Timer Sound" nichts passendes gefunden, wenn ich nur nach "Timer" Suche wird es leicht unübersichtlich, nach 23seiten hab ich es aufgegeben alles durch zu gucken

    Und zwar geht es darum: ich möchte mit meinem uC einen (bzw. mehrere Töne hintereinander) erzeugen. Nur habe ich absolut keine Ahnung wie ich dies per Timer anstellen soll. Mit dem Sound Befehl hab ich es schon versucht, aber der ist leider zu ungenau. Onkel Google hab ich auch schon gefragt, aber ich bin nur so weit gekommen das irgendwo mal stand es ist mit einem Timer möglich, natürlich stand da nicht bei wie man das in Bascom verwirklicht.

    Wenn ich jetzt einen Ton von 2000Hz haben will, muss ich dann den Ausgang 2000x pro sek ein und aus schalten, oder wie mache ich das ? Kann mir gut vorstellen das das irgendwas mit der Taktrate des uC´s zu tun hat.

    Vielen dank schonmal für eure Hilfe!

    Gruß aus dem Sauerland
    Daniel

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    15.06.2007
    Beiträge
    18
    Guten Morgen,
    bei 4 mhz und einem prescale von 256kommst du auf eine Frequenz
    15625hz jetzt musst du nur noch ausrechnen mit was du den timer laden musst. Bei jedem Timer Overflow löst der AVR einen Interrupt aus der den Port toggelt.

  3. #3
    hmm, hast du evtl. einen kleinen beispielcode um das zu veranschaulichen? hab das jetzt nicht so ganz verstanden wie du auf die werde gekommen bist
    gruß
    Daniel

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    15.06.2007
    Beiträge
    18
    ich hab einfach den takt des microcontrollers durch den timer prescale(vorteiler für den timer dass er nicht mit voller taktgeschwindigkeit des controllers mit läuft) beispielcode kann ich morgen(heut mittag) machen

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    15.06.2007
    Beiträge
    18
    hey,hier der versprochene code
    Code:
    $regfile "m8def.dat"
    $crystal = 4000000
    
    Config Timer1 = Timer , Prescale = 64
    
    
    On Timer1 Ton
    Enable Timer1
    Enable Interrupts
    
    Ddrd = &B0000100
    
    
    
    
    Do
    Loop
    
    
    
    Ton:
    Toggle Portd.2
    Timer1 = 5666
    Return
    unten wo steht Timer1= musst du mit dem wert experimentiereen und oben wo steht prescale =64 musst du auch ausprobieren (es geht 8,64,256,1024)
    müsste so eigentlich funktionieren
    vielleicht kann aber jemand mir helfen wen ich die frequenz messe komme ich auf 326hz kann das mal jemand messen kommt bei mir egal was für werte ich für prescale und timer nehme

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    28.10.2005
    Ort
    Berlin
    Beiträge
    116
    Hallo Loosi,

    sieh dir mal das Wiki zu dem Timer an, das ist eigentlich ganz simpel.
    https://www.roboternetz.de/wissen/in...scom_und_Timer

    ganz unten ist auch ein link zu einem Berechnungstool mit dem du ganz bequem, nach Angabe deines Taktes und der gewünschten Frequenz, die restlichen Einstellungen berechnen lassen kannst. Außerdem gibt er dir auch den benötigten Code mit aus, den du einfach in dein Programm einfügen kannst.
    Bsp.:

    Code:
    'wenn mega 32, dann ändern in  $regfile = "m32def.dat"
    $regfile = "m16def.dat"
    
    'Quarzfrequenz, entsprechend ihren Angaben
    'der passende Quarz muss in die Fassung gesteckt werden
    $crystal = 16000000
    
    'Hier wird der Timer und der Teiler festgelegt
    Config Timer0 = Timer, Prescale = 64
    
    'Der Port mit der dritten LED auf RN-Control wird als Ausgang programmiert
    Config Pinc.2 = Output
    'Hier geben wir der Definition einen schöneren Namen
    Led3 Alias Portc.2
    
    'Hier wird das Unterprogramm festgelegt, das
    'in dem von ihnen eingestellten Intervall aufgerufen wird
    On Timer0 Timer_irq
    
    'Diese Vorgabe wurde berechnet um die genaue Intervallfrequenz zu erreichen
    Const Timervorgabe = 131
    
    
    'Hier werden die Timer aktiviert
    Enable Timer0
    Enable Interrupts
    
    'Hier ist die Programmhauptschleife
    Do
    'Hier könnte Ihr Hauptprogramm stehen
    Loop
    
    
    
    'Dies ist der Programmteil, der in dem von ihnen gewählten
    'Intervall aufgerufen wird
    Timer_irq:
      Timer0 = Timervorgabe
    
    'Hier könnte nun ihre beliebige IRQ-Routine stehen
    'Dabei sollte man darauf achten das diese nicht mehr Zeit
    'benötigt, als das Intervall zuläßt
    
    'Der Zustand der LED wir umgekehrt, wodurch sich blinken in der halben Frequenz ergibt
    'Hohe Frequenzen sind natürlich nicht mehr sichtbar
       Toggle Led3
    
       Return
    Wenn du jetzt die LED mit einem Speaker ersetzt solltest du einen 1kHz Ton hören. So kannst du dann in gewissem Rahmen jede Frequenz erzeugen, die du magst.

    mfg milkbubi

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus