commit 4d6f3bfec992bddbf2603fcf623229163aecccf5 Author: Olaf Rempel Date: Sat May 27 15:25:58 2006 +0200 initial version diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..52f0906 --- /dev/null +++ b/Makefile @@ -0,0 +1,71 @@ +PRG = dmx3chan +OBJ = dmx3chan.o +MCU_TARGET = at90s2313 +OPTIMIZE = -Os + +DEFS = +LIBS = + +# You should not have to change anything below here. + +CC = avr-gcc + +# Override is only needed by avr-lib build system. + +override CFLAGS = -g -Wall $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) +override LDFLAGS = -Wl,-Map,$(PRG).map + +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size + +all: $(PRG).elf lst text eeprom + $(SIZE) -x -A $(PRG).elf + +$(PRG).elf: $(OBJ) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) + +clean: + rm -rf *.o *.lst *.map $(PRG).elf *.hex *.bin *.srec + +lst: $(PRG).lst + +%.lst: %.elf + $(OBJDUMP) -h -S $< > $@ + +# Rules for building the .text rom images + +text: hex bin srec + +hex: $(PRG).hex +bin: $(PRG).bin +srec: $(PRG).srec + +%.hex: %.elf + $(OBJCOPY) -j .text -j .data -O ihex $< $@ + +%.srec: %.elf + $(OBJCOPY) -j .text -j .data -O srec $< $@ + +%.bin: %.elf + $(OBJCOPY) -j .text -j .data -O binary $< $@ + +# Rules for building the .eeprom rom images + +eeprom: ehex ebin esrec + +ehex: $(PRG)_eeprom.hex +ebin: $(PRG)_eeprom.bin +esrec: $(PRG)_eeprom.srec + +%_eeprom.hex: %.elf + $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ + +%_eeprom.srec: %.elf + $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@ + +%_eeprom.bin: %.elf + $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@ + +install: text + avrdude -p m16 -c butterfly -b 19200 -U flash:w:$(PRG).srec diff --git a/dmx8chan.c b/dmx8chan.c new file mode 100644 index 0000000..3758a10 --- /dev/null +++ b/dmx8chan.c @@ -0,0 +1,134 @@ +/*************************************************************************** + * Copyright (C) 05/2006 by Olaf Rempel * + * razzor@kopf-tisch.de * + * * + * This program 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 2 of the License, or * + * (at your option) any later version. * + * * + * This program 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 this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include +#include + +#define TIMER1_STEP 40 +#define TIMER1_RELOAD (0xFFFF - (256 * TIMER1_STEP)) + +// rx variables +static uint16_t rx_chan; +static uint16_t my_base; + +// channel values +static uint8_t chan[8] = { 0xFF, 0xC0, 0xB0, 0x80, 0x40, 0x20, 0x10, 0x00 }; + +// next OCR1 value +static uint8_t cnt; +static uint16_t pwm_load; + +/* + * Timer 1 Overflow (every 10ms) + * - reload 10ms + * - schedule compare match in 40us + */ +ISR(SIG_OVERFLOW1) +{ + TCNT1 = TIMER1_RELOAD; + OCR1 = (TIMER1_RELOAD + TIMER1_STEP); + pwm_load = (TIMER1_RELOAD + (TIMER1_STEP * 2)); + cnt = 0x00; +} + +/* + * Timer 1 Compare Match (every 40us) + * - schedule next compare match in 40us + */ +ISR(SIG_OUTPUT_COMPARE1A) +{ + OCR1 = pwm_load; + pwm_load += TIMER1_STEP; + + uint8_t *tmp = chan; + + cnt--; + + if (cnt == 0xFF) + PORTB = 0x00; + + if (*tmp++ >= cnt) + PORTB |= (1<= cnt) + PORTB |= (1<= cnt) + PORTB |= (1<= cnt) + PORTB |= (1<= cnt) + PORTB |= (1<= cnt) + PORTB |= (1<= cnt) + PORTB |= (1<= cnt) + PORTB |= (1< Reset + if (USR & (1<