PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tonerzeugung



Mr-400-Volt
28.12.2006, 22: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
28.12.2006, 23: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, 00: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"