Mr-400-Volt
28.12.2006, 23:39
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 !!!
SprinterSB
29.12.2006, 00:42
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)
Mr-400-Volt
29.12.2006, 01:01
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"
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.