Skip to content

Commit

Permalink
add baseline code
Browse files Browse the repository at this point in the history
  • Loading branch information
cnlohr committed Feb 15, 2015
1 parent 2992bd8 commit ffa6dbc
Show file tree
Hide file tree
Showing 5 changed files with 675 additions and 0 deletions.
39 changes: 39 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@

all : test.hex burn test.lst
PART=attiny85
PROGPART=t85

#21800000UL for Ch7, 3rd.
#61.25/2 = 30.625 nom.
CFLAGS=-g -Wall -Os -mmcu=$(PART) -DF_CPU=30625000UL
ASFLAGS:=$(CFLAGS)
CC=avr-gcc


test.hex : test.elf
avr-objcopy -j .text -j .data -O ihex test.elf test.hex

test.elf : test.o
avr-gcc -I -g -Wall -pedantic -Os -mmcu=$(PART) -Wl,-Map,test.map -o $@ $^ -L/usr/lib/binutils/avr/2.18

test.lst : test.c
avr-gcc -c -g -Wa,-a,-ad $(CFLAGS) $^ > $@

burn : test.hex
avrdude -c usbtiny -p $(PROGPART) -V -U flash:w:test.hex

#For PLL
burnfuses :
avrdude -c usbtiny -p $(PROGPART) -U lfuse:w:0x41:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

burnfuses_legacy_timer_1 :
avrdude -c usbtiny -p $(PROGPART) -U lfuse:w:0x53:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

burnfuses_default :
avrdude -c usbtiny -p $(PROGPART) -U lfuse:w:0x62:m -U hfuse:w:0xdf:m -U efuse:w:0xff:m

readfuses :
avrdude -c usbtiny -p $(PROGPART) -U hfuse:r:high.txt:b -U lfuse:r:low.txt:b

clean :
rm -f *~ high.txt low.txt test.hex test.map test.elf *.o sendpack.S makesendpack
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,18 @@
# avr_vhf
Channel 3 VHF Broadcasting with an AVR

Broadcast analog video, Channel 3 with your ATTiny85!

I strongly recommend using an analog TV, as it will be much easier to debug your signal.

This is set up for North America NTSC Channel 3 Only.

Do not add an amplifier to this device. You will likely violate broadcast restrictions.

# Setup

*Plug two wires into PB3 and PB4 of your AVR, PB3 should be shorter than PB4.
*Turn on an analog TV set to channel 3. If you don't see static, it's unlikely you'll be able to do this project.
*Program your AVR, then change the OSCCAL value until you find the correct frequency for broadcast on your particular AVR. All AVRs have different clocks.

You now have an AVR Multimeter, Pin PB2 contains the analog input.
133 changes: 133 additions & 0 deletions ntscfont.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
//From http://overcode.yak.net/12
//#include <avr/pgmspace.h>

const unsigned char font_8x8_data[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 1
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 3
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 4
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 5
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 6
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 7
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 9
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 10
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 11
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 12
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 13
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 14
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 15
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 16
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 17
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 18
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 19
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 20
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 21
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 22
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 23
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 24
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 25
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 26
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 27
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 28
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 29
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 30
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 31
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ' '
0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x10, 0x00, // '!'
0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // '"'
0x28, 0x28, 0xfe, 0x28, 0xfe, 0x28, 0x28, 0x00, // '#'
0x10, 0x78, 0x14, 0x38, 0x50, 0x3c, 0x10, 0x00, // '$'
0x00, 0x4c, 0x2c, 0x10, 0x68, 0x64, 0x00, 0x00, // '%'
0x18, 0x14, 0x08, 0x14, 0x62, 0x22, 0x5c, 0x00, // '&'
0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // '''
0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00, // '('
0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, // ')'
0x10, 0x92, 0x54, 0x38, 0x54, 0x92, 0x10, 0x00, // '*'
0x10, 0x10, 0x10, 0xfe, 0x10, 0x10, 0x10, 0x00, // '+'
0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x20, 0x10, // ','
0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, // '-'
0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, // '.'
0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, // '/'
0x38, 0x44, 0x44, 0x54, 0x44, 0x44, 0x38, 0x00, // '0'
0x10, 0x18, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, // '1'
0x38, 0x44, 0x40, 0x20, 0x10, 0x08, 0x7c, 0x00, // '2'
0x38, 0x44, 0x40, 0x30, 0x40, 0x44, 0x38, 0x00, // '3'
0x30, 0x28, 0x24, 0x7c, 0x20, 0x20, 0x70, 0x00, // '4'
0x7c, 0x04, 0x04, 0x3c, 0x40, 0x44, 0x38, 0x00, // '5'
0x38, 0x44, 0x04, 0x3c, 0x44, 0x44, 0x38, 0x00, // '6'
0x7c, 0x40, 0x20, 0x10, 0x08, 0x08, 0x08, 0x00, // '7'
0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00, // '8'
0x38, 0x44, 0x44, 0x78, 0x40, 0x44, 0x38, 0x00, // '9'
0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, // ':'
0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x20, 0x10, // ';'
0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x00, // '<'
0x00, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00, // '='
0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x04, 0x00, // '>'
0x38, 0x44, 0x40, 0x20, 0x10, 0x00, 0x10, 0x00, // '?'
0x38, 0x44, 0x74, 0x54, 0x74, 0x04, 0x38, 0x00, // '@'
0x38, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, // 'A'
0x3c, 0x44, 0x44, 0x3c, 0x44, 0x44, 0x3c, 0x00, // 'B'
0x38, 0x44, 0x04, 0x04, 0x04, 0x44, 0x38, 0x00, // 'C'
0x3c, 0x44, 0x44, 0x44, 0x44, 0x44, 0x3c, 0x00, // 'D'
0x7c, 0x04, 0x04, 0x3c, 0x04, 0x04, 0x7c, 0x00, // 'E'
0x7c, 0x04, 0x04, 0x7c, 0x04, 0x04, 0x04, 0x00, // 'F'
0x38, 0x44, 0x04, 0x74, 0x44, 0x44, 0x38, 0x00, // 'G'
0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, // 'H'
0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, // 'I'
0x70, 0x20, 0x20, 0x20, 0x24, 0x24, 0x18, 0x00, // 'J'
0x44, 0x44, 0x24, 0x1c, 0x24, 0x44, 0x44, 0x00, // 'K'
0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x78, 0x00, // 'L'
0x82, 0xc6, 0xaa, 0x92, 0x82, 0x82, 0x82, 0x00, // 'M'
0x44, 0x4c, 0x54, 0x54, 0x64, 0x44, 0x44, 0x00, // 'N'
0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, // 'O'
0x38, 0x48, 0x48, 0x38, 0x08, 0x08, 0x08, 0x00, // 'P'
0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x60, // 'Q'
0x3c, 0x44, 0x44, 0x3c, 0x14, 0x24, 0x44, 0x00, // 'R'
0x38, 0x44, 0x04, 0x38, 0x40, 0x44, 0x38, 0x00, // 'S'
0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, // 'T'
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, // 'U'
0x44, 0x44, 0x44, 0x28, 0x28, 0x10, 0x10, 0x00, // 'V'
0x82, 0x82, 0x82, 0x54, 0x54, 0x28, 0x28, 0x00, // 'W'
0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x00, // 'X'
0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x10, 0x00, // 'Y'
0x7c, 0x40, 0x20, 0x10, 0x08, 0x04, 0x7c, 0x00, // 'Z'
0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, // '['
0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, // '\'
0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, // ']'
0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, // '^'
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, // '_'
0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // '`'
0x00, 0x38, 0x40, 0x78, 0x44, 0x44, 0xb8, 0x00, // 'a'
0x08, 0x08, 0x38, 0x48, 0x48, 0x48, 0x34, 0x00, // 'b'
0x00, 0x00, 0x38, 0x04, 0x04, 0x04, 0x38, 0x00, // 'c'
0x40, 0x40, 0x70, 0x48, 0x48, 0x48, 0xb0, 0x00, // 'd'
0x00, 0x00, 0x38, 0x44, 0x7c, 0x04, 0x38, 0x00, // 'e'
0x30, 0x48, 0x08, 0x1c, 0x08, 0x08, 0x08, 0x00, // 'f'
0x00, 0x00, 0xb8, 0x44, 0x44, 0x78, 0x40, 0x38, // 'g'
0x04, 0x04, 0x34, 0x4c, 0x44, 0x44, 0x44, 0x00, // 'h'
0x00, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x00, // 'i'
0x00, 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x0c, // 'j'
0x04, 0x04, 0x24, 0x14, 0x0c, 0x14, 0x24, 0x00, // 'k'
0x18, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, // 'l'
0x00, 0x00, 0x6d, 0x92, 0x92, 0x82, 0x82, 0x00, // 'm'
0x00, 0x00, 0x34, 0x48, 0x48, 0x48, 0x48, 0x00, // 'n'
0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, // 'o'
0x00, 0x00, 0x34, 0x48, 0x48, 0x38, 0x08, 0x08, // 'p'
0x00, 0x00, 0x58, 0x24, 0x24, 0x38, 0x20, 0x20, // 'q'
0x00, 0x00, 0x34, 0x0c, 0x04, 0x04, 0x04, 0x00, // 'r'
0x00, 0x00, 0x38, 0x04, 0x18, 0x20, 0x1c, 0x00, // 's'
0x00, 0x10, 0x38, 0x10, 0x10, 0x10, 0x10, 0x00, // 't'
0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x58, 0x00, // 'u'
0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, // 'v'
0x00, 0x00, 0x82, 0x82, 0x92, 0xaa, 0x44, 0x00, // 'w'
0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, // 'x'
0x00, 0x00, 0x48, 0x48, 0x48, 0x70, 0x40, 0x38, // 'y'
0x00, 0x00, 0x3c, 0x20, 0x10, 0x08, 0x3c, 0x00, // 'z'
0x30, 0x08, 0x08, 0x04, 0x08, 0x08, 0x30, 0x00, // '{'
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, // '|'
0x0c, 0x10, 0x10, 0x20, 0x10, 0x10, 0x0c, 0x00, // '}'
0x00, 0x00, 0x0c, 0x92, 0x60, 0x00, 0x00, 0x00, // '~'
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ''
};
Loading

0 comments on commit ffa6dbc

Please sign in to comment.