From f1c9a0707e5dfc27692e9c50bf73e4edac480bf3 Mon Sep 17 00:00:00 2001 From: Inamr Date: Tue, 9 Apr 2024 14:53:32 +0200 Subject: [PATCH] made code for fan speed --- prosjekt.X/fan_speeeed.c | 95 ++++++++++------------------------------ prosjekt.X/fan_speeeed.h | 15 ++++--- 2 files changed, 33 insertions(+), 77 deletions(-) diff --git a/prosjekt.X/fan_speeeed.c b/prosjekt.X/fan_speeeed.c index 48dd5df..ea66791 100644 --- a/prosjekt.X/fan_speeeed.c +++ b/prosjekt.X/fan_speeeed.c @@ -1,84 +1,35 @@ - - - #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 */ - +void TCA0_init() { +TCA0.SINGLE.INTCTRL = TCA_SINGLE_OVF_bm ; +TCA0.SINGLE.CTRLA = TCA_SINGLE_ENABLE_bm | TCA_SINGLE_CLKSEL_DIV1024_gc ; /* Sysclk /1024 */ +TCA0.SINGLE.PERBUF = 0x0F42; } -// 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; + +void TCA0_update_period_ms() { +TCA0.SINGLE.PERBUF = (F_CPU*(1/timer_period)/1024); /* F_CPU * F_IRQ / TCA_prescaler */ +} + +int read_input_get_RPM() { + fan_speed=(voltage_value_counter/timer_period)*6000*3; + voltage_value_counter = 0; 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; +void PORT_init(){ + PORTB.PIN2CTRL = PORT_ISC_FALLING_gc; } -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(); - } + +ISR ( TCA0_OVF_vect ) { + read_input_get_RPM(); + TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm ; +} + +ISR(PORTB_PORT_vect){ + PORTB.INTFLAGS = PIN2_bm; + voltage_value_counter ++; } diff --git a/prosjekt.X/fan_speeeed.h b/prosjekt.X/fan_speeeed.h index 7746664..476d539 100644 --- a/prosjekt.X/fan_speeeed.h +++ b/prosjekt.X/fan_speeeed.h @@ -23,12 +23,17 @@ extern "C" { #include #include #include -#include "voltage.h" - - int RTC_init(); - int read_array_get_RPM(int voltage_value); - inline void put_in_array(); + volatile uint16_t voltage_value_counter = 0; + int timer_period = 1; + int fan_speed; + + void TCA0_init (); + void PORT_init(); + + void TCA0_update_period_ms (); + int read_input_get_RPM(); + int interrpt(); #ifdef __cplusplus } #endif