From 7a9eb33c51d5e87cb3d6b87c32586419d0cde7d5 Mon Sep 17 00:00:00 2001 From: Rihards Skuja Date: Fri, 24 Nov 2017 14:01:11 +0200 Subject: [PATCH 1/3] Clean up unused typedefs --- include/main.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/main.h b/include/main.h index 7e52ff4..ecff1db 100644 --- a/include/main.h +++ b/include/main.h @@ -1,8 +1,6 @@ #ifndef MAIN_H #define MAIN_H -typedef unsigned char byte; - void initIO(void); void blinkLed(void); void readTemp(void); From b014926833f2018d6307c50bcd5aa5950a73d8bb Mon Sep 17 00:00:00 2001 From: Rihards Skuja Date: Fri, 24 Nov 2017 17:24:12 +0200 Subject: [PATCH 2/3] Add debugging support with simavr --- Makefile | 6 +++++- include/debug.h | 16 ++++++++++++++++ src/main.c | 4 ++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 include/debug.h diff --git a/Makefile b/Makefile index 907e8c6..33686aa 100644 --- a/Makefile +++ b/Makefile @@ -42,9 +42,11 @@ CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums #CEXTRA = -Wa,-adhlns=$(<:.c=.lst) CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) - #ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs +ifeq ($(BUILD),debug) + CFLAGS += -DDEBUG +endif #Additional libraries. @@ -140,6 +142,8 @@ program: $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).eep $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) +debug: + make "BUILD=debug" # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. diff --git a/include/debug.h b/include/debug.h new file mode 100644 index 0000000..aa7197a --- /dev/null +++ b/include/debug.h @@ -0,0 +1,16 @@ +#ifndef DEBUG_H +#define DEBUG_H + +#include +#include "/usr/include/simavr/avr/avr_mcu_section.h" +AVR_MCU(F_CPU, "atmega328p"); +const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = { + { AVR_MCU_VCD_SYMBOL("DDRB"), .what = (void *) &DDRB, }, + { AVR_MCU_VCD_SYMBOL("DDRD"), .what = (void *) &DDRD, }, + { AVR_MCU_VCD_SYMBOL("PORTD"), .what = (void *) &PORTD, }, + { AVR_MCU_VCD_SYMBOL("TCCR0B"), .what = (void *) &TCCR0B, }, + { AVR_MCU_VCD_SYMBOL("TCCR0A"), .what = (void *) &TCCR0A, }, + { AVR_MCU_VCD_SYMBOL("OCR0A"), .what = (void*)&OCR0A, }, +}; + +#endif /* DEBUG_H */ diff --git a/src/main.c b/src/main.c index f6eec79..f9466e7 100644 --- a/src/main.c +++ b/src/main.c @@ -5,6 +5,10 @@ #include "main.h" #include "io.h" +#ifdef DEBUG +#include "debug.h" +#endif /* DEBUG */ + void initIO() { DDRD |= (1 << LED_1); From 2bd66fda7db28a9529a51e4aa98c0a4a397f55f9 Mon Sep 17 00:00:00 2001 From: Rihards Skuja Date: Fri, 24 Nov 2017 22:14:50 +0200 Subject: [PATCH 3/3] Control left servo motor with PWM --- include/debug.h | 10 +++++----- src/main.c | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/include/debug.h b/include/debug.h index aa7197a..1f6e677 100644 --- a/include/debug.h +++ b/include/debug.h @@ -3,14 +3,14 @@ #include #include "/usr/include/simavr/avr/avr_mcu_section.h" + AVR_MCU(F_CPU, "atmega328p"); const struct avr_mmcu_vcd_trace_t _mytrace[] _MMCU_ = { { AVR_MCU_VCD_SYMBOL("DDRB"), .what = (void *) &DDRB, }, - { AVR_MCU_VCD_SYMBOL("DDRD"), .what = (void *) &DDRD, }, - { AVR_MCU_VCD_SYMBOL("PORTD"), .what = (void *) &PORTD, }, - { AVR_MCU_VCD_SYMBOL("TCCR0B"), .what = (void *) &TCCR0B, }, - { AVR_MCU_VCD_SYMBOL("TCCR0A"), .what = (void *) &TCCR0A, }, - { AVR_MCU_VCD_SYMBOL("OCR0A"), .what = (void*)&OCR0A, }, + { AVR_MCU_VCD_SYMBOL("TCCR1A"), .what = (void *) &TCCR1A, }, + { AVR_MCU_VCD_SYMBOL("TCCR1B"), .what = (void *) &TCCR1B, }, + { AVR_MCU_VCD_SYMBOL("OCR1A"), .what = (void *) &OCR1A, }, + { AVR_MCU_VCD_SYMBOL("OCR1B"), .what = (void *) &OCR1B, }, }; #endif /* DEBUG_H */ diff --git a/src/main.c b/src/main.c index f9466e7..307fe21 100644 --- a/src/main.c +++ b/src/main.c @@ -11,6 +11,15 @@ void initIO() { + /* Servos */ + DDRB |= (1 << SERVO_L); + /* Phase Correct PWM, 9-bit; Inverting mode */ + TCCR1A |= 1 << WGM11 | 1 << COM1A1 | 1 << COM1A0; + /* "Clear Timer on Compare match" mode; Prescaler = 1 */ + TCCR1B |= 1 << WGM13 | 1 << WGM12 | 1 << CS10; + ICR1 = 19999; // F_CPU / 50Hz - 1 + + /* LED */ DDRD |= (1 << LED_1); } @@ -30,10 +39,27 @@ void readTemp() } } +void runServos() +{ + /* Stop */ + OCR1A = ICR1 - 1500; + _delay_ms(1500); + + /* Reverse */ + OCR1A = ICR1 - 2000; + _delay_ms(1500); + + /* Forwards */ + OCR1A = ICR1 - 1000; + _delay_ms(1500); +} + int main(void) { initIO(); + runServos(); readTemp(); + return 0; }