From cfc583a8cf67192bc74270092d934a39de3b7678 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Fri, 17 Jul 2020 00:50:32 +0200 Subject: [PATCH] Added untested pwm input --- firmware/Makefile | 4 ++-- firmware/input.c | 33 +++++++++++++++++++++++++++++++++ firmware/input.h | 12 ++++++++++++ firmware/main.c | 2 ++ 4 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 firmware/input.c create mode 100644 firmware/input.h diff --git a/firmware/Makefile b/firmware/Makefile index d91e459..c2d0db6 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -3,8 +3,8 @@ F_CPU = 8000000 VERSION = 0.1 -HEADERS = pwm.h -SRC = main.c +HEADERS = pwm.h input.h +SRC = main.c input.c TARGET = mate-driver-$(AVRMCU) OBJDIR = bin diff --git a/firmware/input.c b/firmware/input.c new file mode 100644 index 0000000..9a58fe7 --- /dev/null +++ b/firmware/input.c @@ -0,0 +1,33 @@ +#include "input.h" + +uint16_t volatile last_count; + +void input_init() { + MCUCR |= (1 << ISC10); + EIFR |= (1 << INTF1); + + last_count = 0; +} + +ISR(INT1_vect) { + if((PORTB & (1 << PD3)) != 0) { + TCCR1B |= (1 << CS11); //Prescaler 8, enable Timer + TCNT1 = 0; + } else { + TCCR1B &= ~(1 << CS11); //Prescaler 8, disable Timer + last_count = TCNT1; + } +} + +int16_t input_get_result() { + uint16_t tmp = last_count; + if(tmp < 1000) { + tmp = 0; + } + tmp = (tmp - 1000); + if(tmp > 1000) { + tmp = 1000; + } + + return ((int16_t)tmp) / 2 - 1000; +} diff --git a/firmware/input.h b/firmware/input.h new file mode 100644 index 0000000..41f8ffc --- /dev/null +++ b/firmware/input.h @@ -0,0 +1,12 @@ +#ifndef _INPUT_H +#define _INPUT_H + +#include +#include + + +void input_init(void); +int16_t input_get_result(void); + + +#endif diff --git a/firmware/main.c b/firmware/main.c index 59ad433..1a1afef 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -2,6 +2,7 @@ #include #include "pwm.h" +#include "input.h" int main(void) { @@ -9,6 +10,7 @@ int main(void) { _delay_ms(5000); hbridge_init(); + input_init(); while(1) {