شما لطف داری مهندس ، ولی من از مدارهای مخابراتی زیاد خوشم نمیاد ، اینم چون فرکانسش پائین بود رفتم تو بحرش!
حالا برنامه ای با Atmega8 نوشتم که این کار رو انجام میده. کد برنامه رو پائین گذاشتم. ( با عرض شرمندگی کدی که قبلا گذاشته بودم توی ایجاد فرکانس های زیر 20 هرتز مشکل داشت ، در عوض کدهای جدید درست کار می کنن)
کد شماره ی یک : در این کد از کریستال ساعت برای تولید زمان 1 ثانیه ی دقیق استفاده شده.
کد:
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 10
$framesize = 40
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configurations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Config Timer0 = Counter , Edge = Rising , Prescale = 1
Config Timer1 = Timer , Compare A = Toggle , Clear Timer = 1 , Prescale = 64
Config Timer2 = Timer , Async = On , Prescale = 128
Config Portc.1 = Input
Config Portc.2 = Input
Config Portb.4 = Output
Enable Timer0
Enable Timer1
Enable Timer2
Enable Ovf2
Enable Oc1a
Enable Interrupts
Portb.4 = 0
Stop Timer1
Stop Timer2
Timer2 = 0
Timer1 = 0
Counter0 = 0
On Ovf2 One_secend
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dim Fin As Single
Dim Tin As Single
Dim Tout As Single
Dim Tout1 As Integer
Dim Scale As Single
Dim First_scale As Eram Single
Dim I As Eram Byte
Dim J As Eram Byte
Dim K As Byte
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Start Timer2
Start Timer1
Do
Scale = 1.35
Loop
End
One_secend:
Stop Timer2
Fin = Counter0
Fin = Fin * Scale
Tin = 1 / Fin
Tin = Tin / 2 'Diuration of '1's
Tout = 15625 * Tin
Tout1 = Tout
Compare1a = Tout1
Timer2 = 0
Counter0 = 0
Start Timer2
Return
کد شماره ی دو ، بدون استفاده از کریستال ساعت و دارای کریستال 4 مگاهرتز
کد:
$regfile = "m8def.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 10
$framesize = 40
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Configurations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Config Timer0 = Counter , Edge = Rising , Prescale = 1
Config Timer1 = Timer , Compare A = Toggle , Clear Timer = 1 , Prescale = 64
Config Timer2 = Timer , Prescale = 256
Config Portc.1 = Input
Config Portc.2 = Input
Config Portb.4 = Output
Enable Timer0
Enable Timer1
Enable Timer2
Enable Ovf2
Enable Oc1a
Enable Interrupts
Portb.4 = 0
Stop Timer1
Stop Timer2
Timer2 = 0
Timer1 = 0
Counter0 = 0
On Ovf2 One_secend
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Variable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dim Fin As Single
Dim Tin As Single
Dim Tout As Single
Dim Tout1 As Integer
Dim Scale As Single
Dim First_scale As Eram Single
Dim I As Eram Byte
Dim J As Eram Byte
Dim K As Byte : K = 1
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ initionaliz ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Start Timer2
Start Timer1
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Main program ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Do
scale=1.35
Loop
End
One_secend:
If K = 62 Then
Stop Timer2
K = 1
Fin = Counter0
Fin = Fin * Scale
Tin = 1 / Fin
Tin = Tin / 2 'Diuration of '1's
Tout = 62500 * Tin
Tout1 = Tout
Compare1a = Tout1
Timer2 = 0
Counter0 = 0
Start Timer2
End If
Incr K
Return