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