Generovani frekvence PICem
Lukas Grepl
L.Grepl@sh.cvut.cz
Středa Březen 1 14:38:47 CET 2006
> Jak je videt tak stejne cela debata ze vcera byla asi k nicemu. Abych
> dodrzel pozadovanou frekvenci musel bych mit takt minimalne stokrat
> vetsi. :-(
>
> Pokud bych se teda snizil k tomu, ze to zaokrouhlim na cele us je nejake
> jine reseni nez pouzit skok v tabulce a jeji otrocke natukani? Pocitat
> zpozdeni nemuzu - to by trvalo moc dlouho.
Nesleduji tento problem detailne, ale neslo by pouzit neco jako princip
DDS? Tedy zapsano v Ccku neco na tento zpusob:
#define PERIOD 100 // [us] pri XTAL 4MHz a prescaleru 1:1
unsigned int frequency;
void interrupt isr()
{
static unsigned int i;
TMR0 -= PERIOD;
T0IF = 0;
i += frequency;
if (i & 0x8000)
GPIO0 = 1;
if (!(i & 0x8000))
GPIO0 = 0;
}
Na pinu bude signal o "prumerne" frekvenci rovne frequency/T/65536 s
teoretickym rozlisenim 1/T/65536 (tedy cca 0.15Hz pri T=100us).
Problem je samozrejme, ze cim se budete blizit limitni frekvenci (pri
5kHz pri T=100us), tim bude signal mene pravidelny - bude to neco jako
0101010010101001010100 apod., nicmene treba by to ve vasi aplikaci
nemuselo vadit.
Pripadne byste mohl zkusit tento signal vyfiltrovat a pak okomparovat -
to by tento problem vyresilo, resp. omezilo.
Vyhodou je linearni zavislost vystupni frekvence na ridici hodnote
(promene frequency). Zkuste, treba se to ovsedci.
Lukas Grepl
Další informace o konferenci Hw-list