#include "p24FJ128GA306.h" // uvozovky znamenaji aktualni adresar, <> adresar tam nekde - proste ten jeho // my ted stdio ani string k nicemu nepotrebujeme, takze tady neni // zatim tady nejsou zadne fuses, takze vsechno je default // zejmena : FRC oscilator, Watchdog enabled - !!!!! Musi se vypnout v UP _CONFIG4(0x00FFFF ) _CONFIG3(0x00FFFF ) _CONFIG2(0x0098FF ) _CONFIG1(0x003F7F ) /* vzorkovaci f je 10kHz , a delam 500 Hz theta = 2*Pi*f / fs */ #define DVACOSTHETA 1.9021130325903071442328786667588 #define SINTHETA 0.30901699437494742410229341718282 float yted ; /* vzorek v case ted - vzorek y */ float y_1 ; /* vystup o 1 zpozdeny */ float y_2 ; /* vystup o 2 zpozdeny */ void main (void) { int i; yted = SINTHETA; /* amplitudu to bude mit 1 */ y_1 = 0.0; y_2 = 0.0 ; /* T2CON 1xxx xxxx x000 0x0x poustime cicat TMR2 */ PR2 = 400; /* a tohle je perioda pro PWM */ T2CON = 0x8000; IEC0 = 0; /* povoluji preruseni od TMR2 */ IEC0bits.T2IE = 1; while(1) { kroksinus(); } /* od while */ } // zaviraci zavorka od main void __attribute__((interrupt)) _T2Interrupt(void) { IFS0bits.T2IF = 0; /* shazujeme pozadavkovy bit dejte si sem breakpoint a podivejte se, jak dlouho trva perioda */ } /* zaviraci od podprogramu _T2Interrupt retfie prida prekladac sam, je to dano atributem interrupt */ void kroksinus(void ) { y_2 = y_1 ; y_1 = yted ; yted = y_1 * DVACOSTHETA - y_2 ; } /* trva to 98 mikrosec - takze 10kHz vzork. f je tak dost na hrane */