From 2895e2ee36b406d45c655a6986f0f5f3fb3435de Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Mon, 13 Sep 2021 19:37:01 +0200 Subject: move fan specific code seperate file --- table-fan/Makefile | 2 +- table-fan/fan.c | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ table-fan/fan.h | 33 ++++++++++++++++++ table-fan/table-fan.c | 76 +++-------------------------------------- 4 files changed, 132 insertions(+), 72 deletions(-) create mode 100644 table-fan/fan.c create mode 100644 table-fan/fan.h diff --git a/table-fan/Makefile b/table-fan/Makefile index c41073f..36e971a 100644 --- a/table-fan/Makefile +++ b/table-fan/Makefile @@ -22,7 +22,7 @@ NAME := table-fan BOARD_TYPE := sparkfunProMicro -OBJ := $(NAME).o +OBJ := $(NAME).o fan.o LIBS := util led lufa-descriptor-usbserial usbio EXTERNAL_LIBS := lufa SPREADAVR_PATH := ../contrib/avr-utils diff --git a/table-fan/fan.c b/table-fan/fan.c new file mode 100644 index 0000000..daa33f4 --- /dev/null +++ b/table-fan/fan.c @@ -0,0 +1,93 @@ +/* + * spreadspace avr utils + * + * + * Copyright (C) 2021 Christian Pointner + * + * This file is part of spreadspace avr utils. + * + * spreadspace avr utils is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * spreadspace avr utils is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with spreadspace avr utils. If not, see . + */ + +#include +#include + +#include + + +#define PWM_VAL_MAX 160 + +void fan_init(void) +{ + // timer for tacho + DDRD &= ~(1< PWM_VAL_MAX) ? PWM_VAL_MAX : val; +} + +uint8_t fan_speed_get(void) +{ + return OCR4B; +} + +void fan_speed_inc(void) +{ + if(OCR4B < PWM_VAL_MAX) + OCR4B++; +} + +void fan_speed_dec(void) +{ + if(OCR4B > 0) + OCR4B--; +} + +ISR(TIMER1_CAPT_vect) +{ + static uint16_t tacho_last_ts = 0; + uint16_t current = ICR1; + uint16_t diff = 0; + if(current > tacho_last_ts) { + diff = current - tacho_last_ts; + } else { + diff = (UINT16_MAX - tacho_last_ts) + current; + } + tacho_last_ts = current; + + uint16_t rpm = 1875000 / diff; + printf("\rspeed: %6d rpm", rpm); +} diff --git a/table-fan/fan.h b/table-fan/fan.h new file mode 100644 index 0000000..125d7aa --- /dev/null +++ b/table-fan/fan.h @@ -0,0 +1,33 @@ +/* + * spreadspace avr utils + * + * + * Copyright (C) 2021 Christian Pointner + * + * This file is part of spreadspace avr utils. + * + * spreadspace avr utils is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * spreadspace avr utils is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with spreadspace avr utils. If not, see . + */ + +#ifndef TABLEFAN_fan_h_INCLUDED +#define TABLEFAN_fan_h_INCLUDED + +void fan_init(void); + +void fan_speed_set(uint8_t val); +uint8_t fan_speed_get(void); +void fan_speed_inc(void); +void fan_speed_dec(void); + +#endif diff --git a/table-fan/table-fan.c b/table-fan/table-fan.c index 6580b26..e3c3842 100644 --- a/table-fan/table-fan.c +++ b/table-fan/table-fan.c @@ -2,7 +2,7 @@ * spreadspace avr utils * * - * Copyright (C) 2013-2015 Christian Pointner + * Copyright (C) 2021 Christian Pointner * * This file is part of spreadspace avr utils. * @@ -21,7 +21,6 @@ */ -#include #include #include #include @@ -31,80 +30,16 @@ #include "led.h" #include "usbio.h" -#define PWM_VAL OCR4B -#define PWM_MAX 160 - -void pwm_init(void) -{ - DDRB |= (1< 0) - PWM_VAL--; -} - - -void tacho_init(void) -{ - DDRD &= ~(1< tacho_last_ts) { - diff = current - tacho_last_ts; - } else { - diff = (UINT16_MAX - tacho_last_ts) + current; - } - tacho_last_ts = current; - - uint16_t rpm = 1875000 / diff; - printf("\rspeed: %6d rpm", rpm); -} - +#include "fan.h" void handle_cmd(uint8_t cmd) { switch(cmd) { - case '+': pwm_inc(); break; // printf("pwm = %d\r\n", PWM_VAL); break; - case '-': pwm_dec(); break; // printf("pwm = %d\r\n", PWM_VAL); break; + case '+': fan_speed_inc();/* printf("pwm = %d\r\n", fan_speed_get()); */ break; + case '-': fan_speed_dec();/* printf("pwm = %d\r\n", fan_speed_get()); */ break; case 'r': reset2bootloader(); break; default: return; // printf("error\r\n"); return; } - } int main(void) @@ -117,8 +52,7 @@ int main(void) led_init(); usbio_init(); - pwm_init(); - tacho_init(); + fan_init(); sei(); // rotary encoder -- cgit v1.2.3