mikrokontrollersystemer-pro.../prosjekt.X/fan_speeeed.c
2024-03-20 15:27:41 +01:00

85 lines
2.3 KiB
C

#include "fan speeeed.h"
int voltage_value_counter = 0;
int voltage_value [30];
RTC.PITCTRLA = RTC_PERIOD_CYC32768_gc | RTC_PITEN_bm;
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);
/* 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 */
}
// skal lage en som finner data hvert ... sekund. Datane skal samles inn i en array. Når arrayen er full skal jeg regne ut rpm. Vet t det er ... mange sek mellom så blir enklere. så noe signalbehandling shit.
int read_array_get_RPM() {
f = ((1 / t)*1000);
fan_speed = (f * 60) / 2;
return fan_speed;
}
inline void put_in_array() {
voltage_values[voltage_value_counter] = read_photodiode_voltage();
voltage_value_counter++;
}
void reset_voltage_array(){
for(int i = 0; i < voltage_values_counter; i++){
voltage_values[i]= 0;
}
voltage_value_counter = 0;
}
ISR(RTC_PIT_vect) {
RTC.PITINTFLAGS = RTC_PI_bm;
if(voltage_value_counter < sizeof(voltage_values)/sizeof(voltage_value[0])){
put_in_array();
}
else{
read_array_get_RPM();
reset_voltage_array();
}
}