From 7fc1e4c3ecf8f825416111334aa65b298d8dd1c0 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Fri, 10 Jul 2020 19:01:20 +0200 Subject: [PATCH] Added start of firmware --- .gitignore | 5 + firmware/Makefile | 61 ++++++++ firmware/main.c | 132 ++++++++++++++++++ fp-lib-table => pcb/fp-lib-table | 0 {gerber => pcb/gerber}/mate-driver-1.0.0.zip | Bin {gerber => pcb/gerber}/mate-driver-B_Cu.gbr | 0 {gerber => pcb/gerber}/mate-driver-B_Mask.gbr | 0 .../gerber}/mate-driver-B_SilkS.gbr | 0 .../gerber}/mate-driver-Edge_Cuts.gbr | 0 {gerber => pcb/gerber}/mate-driver-F_Cu.gbr | 0 {gerber => pcb/gerber}/mate-driver-F_Mask.gbr | 0 .../gerber}/mate-driver-F_Paste.gbr | 0 .../gerber}/mate-driver-F_SilkS.gbr | 0 {gerber => pcb/gerber}/mate-driver.drl | 0 .../logos.pretty}/ar3itrary.kicad_mod | 0 .../logos.pretty}/clubmate.kicad_mod | 0 .../mate-driver-cache.lib | 0 .../mate-driver.kicad_pcb | 0 mate-driver.pro => pcb/mate-driver.pro | 0 mate-driver.sch => pcb/mate-driver.sch | 0 20 files changed, 198 insertions(+) create mode 100644 firmware/Makefile create mode 100644 firmware/main.c rename fp-lib-table => pcb/fp-lib-table (100%) rename {gerber => pcb/gerber}/mate-driver-1.0.0.zip (100%) rename {gerber => pcb/gerber}/mate-driver-B_Cu.gbr (100%) rename {gerber => pcb/gerber}/mate-driver-B_Mask.gbr (100%) rename {gerber => pcb/gerber}/mate-driver-B_SilkS.gbr (100%) rename {gerber => pcb/gerber}/mate-driver-Edge_Cuts.gbr (100%) rename {gerber => pcb/gerber}/mate-driver-F_Cu.gbr (100%) rename {gerber => pcb/gerber}/mate-driver-F_Mask.gbr (100%) rename {gerber => pcb/gerber}/mate-driver-F_Paste.gbr (100%) rename {gerber => pcb/gerber}/mate-driver-F_SilkS.gbr (100%) rename {gerber => pcb/gerber}/mate-driver.drl (100%) rename {logos.pretty => pcb/logos.pretty}/ar3itrary.kicad_mod (100%) rename {logos.pretty => pcb/logos.pretty}/clubmate.kicad_mod (100%) rename mate-driver-cache.lib => pcb/mate-driver-cache.lib (100%) rename mate-driver.kicad_pcb => pcb/mate-driver.kicad_pcb (100%) rename mate-driver.pro => pcb/mate-driver.pro (100%) rename mate-driver.sch => pcb/mate-driver.sch (100%) diff --git a/.gitignore b/.gitignore index c6b7354..e3cd262 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,8 @@ _autosave-* *-save.pro *-save.kicad_pcb fp-info-cache + +# Firmware +*.o +*.hex +*.elf diff --git a/firmware/Makefile b/firmware/Makefile new file mode 100644 index 0000000..866fe2d --- /dev/null +++ b/firmware/Makefile @@ -0,0 +1,61 @@ +AVRMCU = attiny2313 +F_CPU = 8000000 + +VERSION = 0.1 + +HEADERS = +SRC = main.c +TARGET = mate-driver-$(AVRMCU) +OBJDIR = bin + +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size + + +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) + +CFLAGS = -Os -Wall -Wstrict-prototypes +CFLAGS += -fshort-enums -fpack-struct -funsigned-char -funsigned-bitfields +CFLAGS += -mmcu=$(AVRMCU) -DF_CPU=$(F_CPU)UL -DVERSION=$(VERSION) + + +all: start $(OBJDIR)/$(TARGET).hex size + @echo ":: Done !" + +start: + @echo "Mate driver firmare version $(VERSION)" + @echo "======================================" + @echo ":: Building for $(AVRMCU)" + @echo ":: MCU operating frequency is $(F_CPU)Hz" + +$(OBJDIR)/%.o: %.c $(HEADERS) + @mkdir -p $$(dirname $@) + $(CC) $(CFLAGS) -c $< -o $@ + + +$(OBJDIR)/$(TARGET).elf: $(OBJ) + $(CC) $(CFLAGS) $+ -o $@ + +$(OBJDIR)/$(TARGET).hex: $(OBJDIR)/$(TARGET).elf + $(OBJCOPY) -O ihex $< $@ + +size: $(OBJDIR)/$(TARGET).elf + @echo + @$(SIZE) --mcu=$(AVRMCU) -C $(OBJDIR)/$(TARGET).elf + @echo + +clean: + @rm -rf $(OBJDIR) + +fuse: + avrdude -c usbasp \ + -p $(AVRMCU) \ + -B 10 \ + -U lfuse:w:0xde:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m + +flash: all + avrdude -c usbasp \ + -p $(AVRMCU) \ + -U flash:w:$(OBJDIR)/$(TARGET).hex diff --git a/firmware/main.c b/firmware/main.c new file mode 100644 index 0000000..d78b0ac --- /dev/null +++ b/firmware/main.c @@ -0,0 +1,132 @@ +#include +#include + +static inline void hbridge_init() { + DDRB |= (1 << PB2); // PWM + DDRB |= (1 << PB0) | (1 << PB1); // H1 L1 + DDRB |= (1 << PB3) | (1 << PB4); // H2 L2 +} + + +static inline void hbridge_set_h1() { + PORTB |= (1 << PB0); +} +static inline void hbridge_unset_h1() { + PORTB &= ~(1 << PB0); +} + +static inline void hbridge_set_l1() { + PORTB |= (1 << PB1); +} +static inline void hbridge_unset_l1() { + PORTB &= ~(1 << PB1); +} + +static inline void hbridge_set_h2() { + PORTB |= (1 << PB3); +} +static inline void hbridge_unset_h2() { + PORTB &= ~(1 << PB3); +} + +static inline void hbridge_set_l2() { + PORTB |= (1 << PB4); +} +static inline void hbridge_unset_l2() { + PORTB &= ~(1 << PB4); +} + + +static inline void pwm_cycle_backwards(uint8_t speed) { + hbridge_unset_l2(); + hbridge_set_l1(); + for(uint8_t i = 0; i < 8; i++) { + if((speed & (1 << i)) != 0) { + hbridge_set_h2(); + } + for(uint8_t j = 0; j < (1 << i); j++) { + _delay_us(2); + } + hbridge_unset_h2(); + } +} + + +static inline void pwm_cycle_forwards(uint8_t speed) { + hbridge_unset_l1(); + hbridge_set_l2(); + for(uint8_t i = 0; i < 8; i++) { + if((speed & (1 << i)) != 0) { + hbridge_set_h1(); + } + for(uint8_t j = 0; j < (1 << i); j++) { + _delay_us(2); + } + hbridge_unset_h1(); + } +} + +int main(void) { + + + _delay_ms(5000); + + hbridge_init(); + + + while(1) { + //hbridge_set_l1(); + + for(uint8_t speed = 20; speed <= 230; speed++) { + for(uint16_t i = 0; i < 250; i++) { + pwm_cycle_forwards(speed); + } + } + + hbridge_unset_h2(); + hbridge_unset_h2(); + hbridge_set_l1(); + hbridge_set_l2(); + _delay_ms(1000); + hbridge_unset_l2(); + hbridge_unset_l2(); + + for(uint8_t speed = 20; speed <= 230; speed++) { + for(uint16_t i = 0; i < 250; i++) { + pwm_cycle_backwards(speed); + } + } + + hbridge_unset_h2(); + hbridge_unset_h2(); + hbridge_set_l1(); + hbridge_set_l2(); + _delay_ms(1000); + hbridge_unset_l2(); + hbridge_unset_l2(); + + /* + + for(uint16_t i = 0; i < 5000; i++) { + hbridge_set_h2(); + _delay_ms(0.9); + hbridge_unset_h2(); + _delay_ms(0.1); + } + + hbridge_set_l2(); + _delay_ms(100); + hbridge_unset_l1(); + + + for(uint16_t i = 0; i < 5000; i++) { + hbridge_set_h1(); + _delay_ms(0.9); + hbridge_unset_h1(); + _delay_ms(0.1); + } +*/ + } + + +} diff --git a/fp-lib-table b/pcb/fp-lib-table similarity index 100% rename from fp-lib-table rename to pcb/fp-lib-table diff --git a/gerber/mate-driver-1.0.0.zip b/pcb/gerber/mate-driver-1.0.0.zip similarity index 100% rename from gerber/mate-driver-1.0.0.zip rename to pcb/gerber/mate-driver-1.0.0.zip diff --git a/gerber/mate-driver-B_Cu.gbr b/pcb/gerber/mate-driver-B_Cu.gbr similarity index 100% rename from gerber/mate-driver-B_Cu.gbr rename to pcb/gerber/mate-driver-B_Cu.gbr diff --git a/gerber/mate-driver-B_Mask.gbr b/pcb/gerber/mate-driver-B_Mask.gbr similarity index 100% rename from gerber/mate-driver-B_Mask.gbr rename to pcb/gerber/mate-driver-B_Mask.gbr diff --git a/gerber/mate-driver-B_SilkS.gbr b/pcb/gerber/mate-driver-B_SilkS.gbr similarity index 100% rename from gerber/mate-driver-B_SilkS.gbr rename to pcb/gerber/mate-driver-B_SilkS.gbr diff --git a/gerber/mate-driver-Edge_Cuts.gbr b/pcb/gerber/mate-driver-Edge_Cuts.gbr similarity index 100% rename from gerber/mate-driver-Edge_Cuts.gbr rename to pcb/gerber/mate-driver-Edge_Cuts.gbr diff --git a/gerber/mate-driver-F_Cu.gbr b/pcb/gerber/mate-driver-F_Cu.gbr similarity index 100% rename from gerber/mate-driver-F_Cu.gbr rename to pcb/gerber/mate-driver-F_Cu.gbr diff --git a/gerber/mate-driver-F_Mask.gbr b/pcb/gerber/mate-driver-F_Mask.gbr similarity index 100% rename from gerber/mate-driver-F_Mask.gbr rename to pcb/gerber/mate-driver-F_Mask.gbr diff --git a/gerber/mate-driver-F_Paste.gbr b/pcb/gerber/mate-driver-F_Paste.gbr similarity index 100% rename from gerber/mate-driver-F_Paste.gbr rename to pcb/gerber/mate-driver-F_Paste.gbr diff --git a/gerber/mate-driver-F_SilkS.gbr b/pcb/gerber/mate-driver-F_SilkS.gbr similarity index 100% rename from gerber/mate-driver-F_SilkS.gbr rename to pcb/gerber/mate-driver-F_SilkS.gbr diff --git a/gerber/mate-driver.drl b/pcb/gerber/mate-driver.drl similarity index 100% rename from gerber/mate-driver.drl rename to pcb/gerber/mate-driver.drl diff --git a/logos.pretty/ar3itrary.kicad_mod b/pcb/logos.pretty/ar3itrary.kicad_mod similarity index 100% rename from logos.pretty/ar3itrary.kicad_mod rename to pcb/logos.pretty/ar3itrary.kicad_mod diff --git a/logos.pretty/clubmate.kicad_mod b/pcb/logos.pretty/clubmate.kicad_mod similarity index 100% rename from logos.pretty/clubmate.kicad_mod rename to pcb/logos.pretty/clubmate.kicad_mod diff --git a/mate-driver-cache.lib b/pcb/mate-driver-cache.lib similarity index 100% rename from mate-driver-cache.lib rename to pcb/mate-driver-cache.lib diff --git a/mate-driver.kicad_pcb b/pcb/mate-driver.kicad_pcb similarity index 100% rename from mate-driver.kicad_pcb rename to pcb/mate-driver.kicad_pcb diff --git a/mate-driver.pro b/pcb/mate-driver.pro similarity index 100% rename from mate-driver.pro rename to pcb/mate-driver.pro diff --git a/mate-driver.sch b/pcb/mate-driver.sch similarity index 100% rename from mate-driver.sch rename to pcb/mate-driver.sch