-         

Ergebnis 1 bis 3 von 3

Thema: Tonerzeugung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2004
    Beiträge
    121

    Tonerzeugung

    Anzeige

    Hallo, ich muß Frequenzgenaue Töne mit einem Mega8 erzeugen, und wollte dazu den Timer nehmen. Es muß im fertigen Programm eine schnelle Tonfolge gespielt werden. Meine Frage ist, kann ich die Timerwerte wie Vorteiler und Vorgabewert im laufenden Programm ändern ?

    Danke !!!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Die ATmega8-Hardware kann es, dann muss es nur noch deine Programmierumgebung bzw. -sprache gestatten. Geeignet ist dazu Timer1 in einem der PWM-Modi (bevorzugt phase & frequency correct pwm)
    Disclaimer: none. Sue me.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.03.2004
    Beiträge
    121
    Also mit folgendem Code läuft es. Mit den Timern kenne ich mich noch nicht so gut aus. Sollte man das anders machen ?

    Danke!!!

    $regfile "m8def.dat"
    $crystal = 4000000

    Cls
    Cursor Off
    Upperline
    Lcd " 5-Ton Erzeuger "

    Config Portb = Output
    Config Portd.0 = Output
    Config Portd.1 = Input
    Config Timer1 = Timer , Prescale = 1

    Dim Ton(11) As Long
    Dim Folge_string As String * 5
    Dim Folge As Long
    Dim Ziffer(11) As String * 1
    Dim X1 As Byte , X2 As Byte , Y As String * 1
    Dim Z As Byte

    Piepser Alias Portd.0

    Folge = 78395
    Folge_string = Str(folge)
    Y = ""
    Z = 0

    On Timer1 Timer_irq


    Restore Vorgabe
    For X1 = 1 To 11
    Read Ton(x1)
    Next

    Restore Zeichen
    For X1 = 1 To 11
    Read Ziffer(x1)
    Next

    Do

    Lowerline
    Lcd "Folge=" ; Folge

    If Pind.1 = 0 Then
    For X1 = 1 To 2
    For X2 = 1 To 5
    Y = Mid(folge_string , X2 , 1)
    Z = Val(y)
    Enable Timer1
    Enable Interrupts
    Waitms 70
    Disable Timer1
    Disable Interrupts
    Next
    Waitms 600
    Next
    End If

    Loop

    Timer_irq:
    Timer1 = Ton(z)
    Toggle Piepser
    Return

    Vorgabe:
    Data 63649& , 63812& , 63961& , 64107& , 64229& , 64338& , 64443& , 64536& , 64627& , 64703& , 64767&

    Zeichen:
    Data "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "0" , "R"

Berechtigungen

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