diff --git a/prosjekt.X/fan speeeed.h b/prosjekt.X/fan speeeed.h index 8774e4f..1fe8baf 100644 --- a/prosjekt.X/fan speeeed.h +++ b/prosjekt.X/fan speeeed.h @@ -13,18 +13,19 @@ #ifdef __cplusplus extern "C" { #endif - - #include - #include - #include - #include - #include - #include - #include - - - int fan_speed(float value); +#include +#include +#include +#include +#include +#include +#include +#include +#include + int RTC_init(); + int fan_speed(float voltage_value); + inline void fan_speed_toggle(); #ifdef __cplusplus } diff --git a/prosjekt.X/fan speeeeeeeed.c b/prosjekt.X/fan speeeeeeeed.c index f3a8d41..59429bf 100644 --- a/prosjekt.X/fan speeeeeeeed.c +++ b/prosjekt.X/fan speeeeeeeed.c @@ -1,32 +1,76 @@ #include "fan speeeed.h" +RTC.PITCTRLA = RTC_PERIOD_CYC32768_gc | RTC_PITEN_bm; -int fan_speed(float voltage_value){ - init_millis() - sei(); - float fan_speed; - float t = 0; - float past_time = 0; - float start_time = 0; - int old_value = 0; - int f; - if (voltage_value > 300 && old_value < 300){ - start_time = init_millis() - t =(start_time - past_time); - past_time = start_time; - } - voltage_value = old_value; - f = ((1/t)*1000); - fan_speed = (f*60)/2; - return fan_speed; +int RTC_init() { + uint8_t temp; + /* Initialize 32.768kHz Oscillator: */ + /* Disable oscillator: */ + temp = CLKCTRL.XOSC32KCTRLA; + temp &= ~CLKCTRL_ENABLE_bm; + /* Writing to protected register */ + ccp_write_io((void*) &CLKCTRL.XOSC32KCTRLA, temp); + + while (CLKCTRL.MCLKSTATUS & CLKCTRL_XOSC32KS_bm) { + ; /* Wait until XOSC32KS becomes 0 */ } + /* SEL = 0 (Use External Crystal): */ + temp = CLKCTRL.XOSC32KCTRLA; + temp &= ~CLKCTRL_SEL_bm; + /* Writing to protected register */ + ccp_write_io((void*) &CLKCTRL.XOSC32KCTRLA, temp); -ISR(PORTB_PORT_vect) -{ - static int counter = 0; - if (counter >=5){ - PORTB.OUT ^= 0x0F; - counter = 0; - } - PORTB.INFLAFS = PIN2_bm; + /* Enable oscillator: */ + temp = CLKCTRL.XOSC32KCTRLA; + temp |= CLKCTRL_ENABLE_bm; + /* Writing to protected register */ + ccp_write_io((void*) &CLKCTRL.XOSC32KCTRLA, temp); + + /* Initialize RTC: */ + while (RTC.STATUS > 0) { + ; /* Wait for all register to be synchronized */ + } + /* 32.768kHz External Crystal Oscillator (XOSC32K) */ + RTC.CLKSEL = RTC_CLKSEL_TOSC32K_gc; + /* Run in debug: enabled */ + RTC.DBGCTRL = RTC_DBGRUN_bm; + + RTC.PITINTCTRL = RTC_PI_bm; /* Periodic Interrupt: enabled */ + + RTC.PITCTRLA = RTC_PERIOD_CYC32768_gc /* RTC Clock Cycles 32768 */ + | RTC_PITEN_bm; /* Enable: enabled */ + +} + +int fan_speed(float voltage_value) { + int counter = 0; + int old_value = 0; + + if (voltage_value > 300 && old_value < 300) { + counter++; + } + voltage_value = old_value; + return old_value; +} + +inline void fan_speed_toggle() { + float fan_speed; + float t = 0; + f = ((1 / t)*1000); + fan_speed = (f * 60) / 2; + return fan_speed; +} + +ISR(RTC_PIT_vect) { + RTC.PITINTFLAGS = RTC_PI_bm; + fan_speed_toggle(); +} + +int main(void) { + fan_speed(); + RTC_init(); + sei(); + while (1) { + + } } \ No newline at end of file