|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
alex Začetnik
Pridružen/-a: Čet Jan 2004 15:10 Prispevkov: 14 Kraj: Rečica ob Savinji
|
Objavljeno: Tor Okt 14, 2008 10:06 am Naslov sporočila: Generator dveh točnih frekvenc z AVR |
|
|
Problem je naslednji:
Na enem pinu bi rad generiral točno 400 Hz.
Na drugem pinu bi rad generiral nastavljivo frekvenco v rangu od 400 do 420 Hz.
Frekvenca mora biti točna na 0,5 Hz.
Poskusil sem s timerji, za začetek samo za eno frekvenco, vendar mi ne deluje. Prav vseeno je, kaj vpišem v "load timer", zadeva ne deluje.
Kakšne ideje?
Alex |
|
Nazaj na vrh |
|
|
alex Začetnik
Pridružen/-a: Čet Jan 2004 15:10 Prispevkov: 14 Kraj: Rečica ob Savinji
|
Objavljeno: Tor Okt 14, 2008 10:12 am Naslov sporočila: Še program... |
|
|
$regfile = "attiny2313.dat"
$hwstack = 32
$swstack = 40
$framesize = 40
$crystal = 8000000
$baud = 19200
Dim Pulz1 As Word , Cas1 As Word
Dim Pulz2 As Word , Cas2 As Word
Levi Alias Portd.4
Config Pind.4 = Output
Desni Alias Portd.5
Config Pind.5 = Output
T1 Alias Pind.2
Config Pind.2 = Input
Config Timer1 = Timer , Edge = Falling , Prescale = 8
On Timer1 Timer_1_int 'interrupt routine
Load Timer1 , 5
Enable Interrupts
Enable Timer1
'cas = 485 - pribl. 412 Hz (pri 5us interupta)
'cas = 500 - pribl. 400 Hz
Cas1 = 500
Cas2 = 485
Pulz1 = 0
Pulz2 = 0
Levi = 0
Desni = 0
Start Timer1
Do
'If Pulz2 = Cas2 Then
' Pulz2 = 0
' Desni = Not Desni
' End If
Loop
End
'***************** prekinitvena rutina *************
Timer_1_int:
Incr Pulz1
If Pulz1 = Cas1 Then
Pulz1 = 0
Levi = Not Levi
End If
'Incr Pulz2
Return |
|
Nazaj na vrh |
|
|
alex Začetnik
Pridružen/-a: Čet Jan 2004 15:10 Prispevkov: 14 Kraj: Rečica ob Savinji
|
Objavljeno: Tor Okt 14, 2008 1:43 pm Naslov sporočila: druga verzija |
|
|
Sedaj sem probal s timerjem0 po helpu iz basc AVR. Vendar: pri kvarcu 16MHz in PRESCALE 1, dobim prekinitev na vsakih 32us.
Ta čas bi rad skrajšal z npr. "load timer", vendar nima nobenega vpliva. Čas 32us je predolg zaradi naslednjega:
32us * 78 = 2496us = 400,6Hz
32us * 77 = 2464us = 405,8Hz
Korak je prevelik...
Še program:
------------------------------------------------------------------------------
'IME : sound-L-D-2.bas
'------------------------------------------------------------------------------
$regfile = "attiny2313.dat"
$hwstack = 32
$swstack = 10
$framesize = 40
$crystal = 8000000
$baud = 19200
Dim Pulz1 As Word , Cas1 As Word
Dim Pulz2 As Word , Cas2 As Word
Levi Alias Portd.4
Config Pind.4 = Output
Desni Alias Portd.5
Config Pind.5 = Output
T1 Alias Pind.2
Config Pind.2 = Input
Config Timer0 = Timer , Prescale = 1
Load Timer0 , 50 'nima nobenega vpliva!!!!!!!!!
On Timer0 Prekinitvena_rutina
Enable Timer0
Enable Interrupts
Cas1 = 78
Cas2 = 77
Pulz1 = 0
Pulz2 = 0
Levi = 0
Desni = 0
Do
'tu noter pride program...
Loop
Prekinitvena_rutina:
Incr Pulz1
If Pulz1 = Cas1 Then
Pulz1 = 0
Levi = Not Levi
End If
Incr Pulz2
If Pulz2 = Cas2 Then
Pulz2 = 0
Desni = Not Desni
End If
Return
End |
|
Nazaj na vrh |
|
|
alex Začetnik
Pridružen/-a: Čet Jan 2004 15:10 Prispevkov: 14 Kraj: Rečica ob Savinji
|
Objavljeno: Pet Okt 17, 2008 1:55 pm Naslov sporočila: CTC |
|
|
Ker mi nihče ni nič sugeriral, sem se malo poglobil v hardware od ATtiny2313.
Zadeva je dokaj simpl, če poznaš notranjo zgradbo chipa.
Koda:
$regfile = "attiny2313.dat"
$hwstack = 32
$swstack = 10
$framesize = 40
$crystal = 8000000
$baud = 19200
Config Pinb.2 = Output 'izhod OC0A
Config Pind.5 = Output 'izhod OC0B
Tccr0a = &B01010010
Ocr0a = 155
Tccr0b = &B00001011
Ocr0b = 140
End
To je vse!
Na izhodu "OC0A" (pin14) dobim lepo točno 400,6 Hz kar je točno toliko kot sem izračunal.
Na izhodu "OC0B" (pin9) pa dobim prav tako 400,6 Hz, malo zamaknjeno in ne 443,2 Hz kot sem teoretično izračunal.
Korak pri 8-bitnem timerju je prevelik, saj znaša cca 3Hz, za svoj projekt pa potrebujem 1 Hz ali še bolje - 0,5 Hz.
Bom poskusil zadevo še s 16-bitnim timerjem.
alex |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|