Zitat Zitat von Halvar
Wenn ich den Timer configuriert habe, lässt er sich doch nicht ganz fix um stellen?
Hallo Halvar!

Code:
$regfile = "M8def.dat"
$crystal = 8000000
$hwstack = 100
$swstack = 100
$framesize = 100

Config Portb.1 = Output       'OC1A

Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
Stop Timer1

Declare Sub Frequency_set(byval Frequency As Word)
Declare Sub Frequency_output_on()
Declare Sub Frequency_output_off()


Do
   Call Frequency_set(1060)
   Call Frequency_output_on()
   Waitms 70
   Call Frequency_set(1500)
   Waitms 70
   Call Frequency_set(2600)
   Waitms 70
   Call Frequency_output_off()
   Wait 3
Loop

End


Sub Frequency_set(byval Frequency As Word)
   'Voreinstellung = 8000000 / (Hz * 2)

   '1060 Hz: 8000000 / (1060 * 2) = 3773,5849 = 3774
   'Test: 8000000 / 3774 / 2 = 1059,88 Hz

   '1500 Hz: 8000000 / (1500 * 2) = 2666,66 = 2667
   'Test: 8000000 / 2667 / 2 = 1499,81 Hz

   '2600 Hz: 8000000 / (2600 * 2) = 1538,46 = 1538
   'Test: 8000000 / 1538 / 2 = 2600,78 Hz

   Local Tmp_single As Single
   Local Tmp_word As Word

   Tmp_single = Frequency * 2
   Tmp_single = 8000000 / Tmp_single
   Tmp_word = Tmp_single

   Compare1a = Tmp_word
End Sub


Sub Frequency_output_on()
   Start Timer1
End Sub


Sub Frequency_output_off()
   Stop Timer1
End Sub
mfg
Gerold
:-)

EDIT: Code ausgebessert