From bc7afa8389867caced50214d6ca3341ec3e9e310 Mon Sep 17 00:00:00 2001 From: Mika Tuupola Date: Mon, 14 Mar 2011 21:21:24 +0200 Subject: [PATCH] Move files to root. --- til311/Makefile | 60 ++++++++++++++++++++++++++++++++++++ til311/main.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 til311/Makefile create mode 100644 til311/main.c diff --git a/til311/Makefile b/til311/Makefile new file mode 100644 index 0000000..788fcab --- /dev/null +++ b/til311/Makefile @@ -0,0 +1,60 @@ +DEVICE = atmega328p +CLOCK = 16000000L +BAUD = 57600 +SERIALPORT = /dev/tty.usb* +PROGRAMMER = arduino +OBJECTS = main.o +#FUSES = -U hfuse:w:0xd9:m -U lfuse:w:0x24:m + +# Tune the lines below only if you know what you are doing: +AVRDUDE = avrdude -c $(PROGRAMMER) -b $(BAUD) -P $(SERIALPORT) -p $(DEVICE) +COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE) + +# symbolic targets: +all: main.hex + +.c.o: + $(COMPILE) -c $< -o $@ + +.S.o: + $(COMPILE) -x assembler-with-cpp -c $< -o $@ +# "-x assembler-with-cpp" should not be necessary since this is the default +# file type for the .S (with capital S) extension. However, upper case +# characters are not always preserved on Windows. To ensure WinAVR +# compatibility define the file type manually. + +.c.s: + $(COMPILE) -S $< -o $@ + +flash: all + $(AVRDUDE) -U flash:w:main.hex:i + +fuse: + $(AVRDUDE) $(FUSES) + +# Xcode uses the Makefile targets "", "clean" and "install" +install: flash fuse + +# if you use a bootloader, change the command below appropriately: +load: all + bootloadHID main.hex + +clean: + rm -f main.hex main.elf $(OBJECTS) + +# file targets: +main.elf: $(OBJECTS) + $(COMPILE) -o main.elf $(OBJECTS) + +main.hex: main.elf + rm -f main.hex + avr-objcopy -j .text -j .data -O ihex main.elf main.hex +# If you have an EEPROM section, you must also create a hex file for the +# EEPROM and add it to the "flash" target. + +# Targets for code debugging and analysis: +disasm: main.elf + avr-objdump -d main.elf + +cpp: + $(COMPILE) -E main.c diff --git a/til311/main.c b/til311/main.c new file mode 100644 index 0000000..041efcc --- /dev/null +++ b/til311/main.c @@ -0,0 +1,82 @@ +/* + * Loops through 0-F and displays it on TIL311. Pure C version. + * + * TIL311 pin 3 -> Arduino Digital 2 (PORTD2) + * TIL311 pin 2 -> Arduino Digital 3 (PORTD3) + * TIL311 pin 13 -> Arduino Digital 4 (PORTD4) + * TIL311 pin 12 -> Arduino Digital 5 (PORTD5) + * + * Led at Arduino Digital 13 (PORTB5) + * + * To compile and upload run: make clean; make; make flash; + * + * Copyright 2009 Mika Tuupola + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/mit-license.php + * + */ + +#include +#include + +#define BIT_AT(value, bit) (value & (1 << bit)) + +int main(void) { + + /* Make PORTB5 (Arduino 13) and PORTD0-PORTD3 (Arduino 2-5) as an output. */ + DDRB |= _BV(PORTB5); + DDRD |= _BV(PORTD2) | _BV(PORTD3) | _BV(PORTD4) | _BV(PORTD5); + + for(;;) { + + /* Reset displayed value. */ + int value = 0; + + while (value < 16) { + /* Toggle led at PORTB5 */ + PORTB ^= _BV(PORTB5); + + /* Short way would be to directly write the value to PORTD. */ + /* Shift by 2 because first TIL311 port is PORTD2. However */ + /* This would zero PORTD0, PORTD1, PORTD6 and PORTD7. */ + /* PORTD = value << 2; */ + + /* TIL311 pin 3, latch data input A (1). */ + if (0 == BIT_AT(value, 0)) { + PORTD &= ~(_BV(PORTD2)); + } else { + PORTD |= _BV(PORTD2); + } + + /* TIL311 pin 2, latch data input B (2). */ + if (0 == BIT_AT(value, 1)) { + PORTD &= ~(_BV(PORTD3)); + } else { + PORTD |= _BV(PORTD3); + } + + /* TIL311 pin 13, latch data input C (4). */ + if (0 == BIT_AT(value, 2)) { + PORTD &= ~(_BV(PORTD4)); + } else { + PORTD |= _BV(PORTD4); + } + + /* TIL311 pin 12, latch data input D (8). */ + if (0 == BIT_AT(value, 3)) { + PORTD &= ~(_BV(PORTD5)); + } else { + PORTD |= _BV(PORTD5); + } + + value++; + _delay_ms(500); + } + } + + /* This is never reached. */ + return 0; +} + +