Initial Git import from existing sources
This commit is contained in:
commit
3a92b9a242
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
*~
|
||||||
|
.idea
|
||||||
|
firmware/*.o
|
||||||
|
firmware/*.elf
|
||||||
|
firmware/*.hex
|
||||||
|
hardware/*.b#*
|
||||||
|
hardware/*.s#*
|
16
firmware/Makefile
Executable file
16
firmware/Makefile
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
CC=avr-gcc
|
||||||
|
CFLAGS=-g -Os -Wall -mcall-prologues -mmcu=attiny2313
|
||||||
|
OBJ2HEX=avr-objcopy
|
||||||
|
AVRDUDE=avrdude
|
||||||
|
TARGET=midifs
|
||||||
|
|
||||||
|
program : $(TARGET).hex
|
||||||
|
$(AVRDUDE) -p t2313 -c stk500v2 -P /dev/ttyS0 -U $(TARGET).hex
|
||||||
|
%.obj : %.o
|
||||||
|
$(CC) $(CFLAGS) $< -o $@
|
||||||
|
|
||||||
|
%.hex : %.obj
|
||||||
|
$(OBJ2HEX) -R .eeprom -O ihex $< $@
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm -f *.hex *.obj *.o
|
196
firmware/midifs.c
Normal file
196
firmware/midifs.c
Normal file
@ -0,0 +1,196 @@
|
|||||||
|
// midifs.c
|
||||||
|
// Typ: C-Sourcerfile
|
||||||
|
// Project: MIDI Footswitch
|
||||||
|
// Date: 17.06.2014
|
||||||
|
// Author: ska
|
||||||
|
|
||||||
|
#define F_CPU 8000000UL
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include "midifs.h"
|
||||||
|
#include "usart.h"
|
||||||
|
|
||||||
|
volatile unsigned char status_channel, status, channel, data1, data2;
|
||||||
|
volatile unsigned int iBtn1_counter = 0, iBtn2_counter = 0, iBtn3_counter = 0, iBtn4_counter = 0, iSw1_counter = 0, iSw2_counter = 0;
|
||||||
|
volatile unsigned char cBtn1 = 0, cBtn2 = 0, cBtn3 = 0, cBtn4 = 0, cSw1 = 0, cSw2 = 0;
|
||||||
|
volatile unsigned char cChannel = 0, cBank = 0; cTuner = 0;
|
||||||
|
unsigned int cnt = 0;
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
DDRB = 0x00; // PB1..7 as inputs
|
||||||
|
PORTB = 0xFF; // interlan pull-ups for PB0..7y
|
||||||
|
DDRD = 0x30; // PD4..5 as outputs
|
||||||
|
PORTD = 0x0C; // internal pull-ups for PD2..3
|
||||||
|
|
||||||
|
OUT_LED = 0x30; // LEDs off
|
||||||
|
|
||||||
|
// Timer1 init
|
||||||
|
TCCR1A |= (1 << WGM01); // set timer 0 to CTC-Mode
|
||||||
|
TCCR1B &= ~(1 << CS10); // prescaler 8 (1MHz)
|
||||||
|
TCCR1B |= (1 << CS11);
|
||||||
|
TCCR1B &= ~(1 << CS12);
|
||||||
|
OCR1A = 499; // period of 1 ms
|
||||||
|
|
||||||
|
cli(); // disable interrupts
|
||||||
|
TIMSK |= (1 << TOIE1); // activate timer 1
|
||||||
|
sei(); // enable interrupts
|
||||||
|
|
||||||
|
//USART_Init(38400); // initialize USART with 38400 baud (debug)
|
||||||
|
USART_Init(31250); // initialize USART with 31250 baud
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (iBtn1_counter > BTN_THRESHOLD && cBtn1 == 0) // Button 1
|
||||||
|
{
|
||||||
|
Bank(cBank);
|
||||||
|
USART_Transmit(0xC0); // Channel 1
|
||||||
|
USART_Transmit(0x00);
|
||||||
|
|
||||||
|
cChannel = 0;
|
||||||
|
cTuner = 0;
|
||||||
|
|
||||||
|
cBtn1 = 1;
|
||||||
|
}
|
||||||
|
else if (iBtn1_counter < BTN_THRESHOLD && cBtn1 == 1)
|
||||||
|
cBtn1 = 0;
|
||||||
|
|
||||||
|
if(iBtn2_counter > BTN_THRESHOLD && cBtn2 == 0) // Button 2
|
||||||
|
{
|
||||||
|
Bank(cBank);
|
||||||
|
USART_Transmit(0xC0); // Channel 2
|
||||||
|
USART_Transmit(0x01);
|
||||||
|
cChannel = 1;
|
||||||
|
cTuner = 0;
|
||||||
|
|
||||||
|
cBtn2 = 1;
|
||||||
|
}
|
||||||
|
else if (iBtn2_counter < BTN_THRESHOLD && cBtn2 == 1)
|
||||||
|
cBtn2 = 0;
|
||||||
|
|
||||||
|
if(iBtn3_counter > BTN_THRESHOLD && cBtn3 == 0) // Button 3
|
||||||
|
{
|
||||||
|
Bank(cBank);
|
||||||
|
USART_Transmit(0xC0); // Channel 3
|
||||||
|
USART_Transmit(0x02);
|
||||||
|
cChannel = 2;
|
||||||
|
cTuner = 0;
|
||||||
|
|
||||||
|
cBtn3 = 1;
|
||||||
|
}
|
||||||
|
else if (iBtn3_counter < BTN_THRESHOLD && cBtn3 == 1)
|
||||||
|
cBtn3 = 0;
|
||||||
|
|
||||||
|
if(iBtn4_counter > BTN_THRESHOLD && cBtn4 == 0) // Button 4
|
||||||
|
{
|
||||||
|
USART_Transmit(0xB0); // Tuner on
|
||||||
|
USART_Transmit(0x0F);
|
||||||
|
USART_Transmit(0x7F);
|
||||||
|
|
||||||
|
//OUT_LED |= (1 << LED_RT); // LEDs off
|
||||||
|
//OUT_LED |= (1 << LED_GN);
|
||||||
|
|
||||||
|
cTuner = 1;
|
||||||
|
|
||||||
|
cBtn4 = 1;
|
||||||
|
}
|
||||||
|
else if (iBtn4_counter < BTN_THRESHOLD && cBtn4 == 1)
|
||||||
|
cBtn4 = 0;
|
||||||
|
|
||||||
|
if (iSw1_counter > BTN_THRESHOLD && cSw1 == 0) // Switch Pos. 1
|
||||||
|
{
|
||||||
|
Bank(0);
|
||||||
|
cBank = 0;
|
||||||
|
cTuner = 0;
|
||||||
|
|
||||||
|
cSw1 = 1;
|
||||||
|
}
|
||||||
|
else if (iSw1_counter < BTN_THRESHOLD && cSw1 == 1)
|
||||||
|
{
|
||||||
|
cSw1 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(iSw2_counter > BTN_THRESHOLD && cSw2 == 0) // Switch Pos. 2
|
||||||
|
{
|
||||||
|
Bank(1);
|
||||||
|
cBank = 1;
|
||||||
|
cTuner = 0;
|
||||||
|
|
||||||
|
cSw2 = 1;
|
||||||
|
}
|
||||||
|
else if (iSw2_counter < BTN_THRESHOLD && cSw2 == 1)
|
||||||
|
{
|
||||||
|
cSw2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bank(unsigned char num) {
|
||||||
|
if(num == 0) {
|
||||||
|
USART_Transmit(0xB0); // Bank 1
|
||||||
|
USART_Transmit(0x00);
|
||||||
|
USART_Transmit(0x00);
|
||||||
|
USART_Transmit(0xC0);
|
||||||
|
USART_Transmit(0x00);
|
||||||
|
USART_Transmit(cChannel);
|
||||||
|
OUT_LED &= ~(1 << LED_RT); // LED green
|
||||||
|
OUT_LED |= (1 << LED_GN);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
USART_Transmit(0xB0); // Bank 2
|
||||||
|
USART_Transmit(0x00);
|
||||||
|
USART_Transmit(0x01);
|
||||||
|
USART_Transmit(0xC0);
|
||||||
|
USART_Transmit(0x00);
|
||||||
|
USART_Transmit(cChannel);
|
||||||
|
OUT_LED &= ~(1 << LED_GN); // LED green
|
||||||
|
OUT_LED |= (1 << LED_RT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* interrupt function: TIMER1_OVF1_vect
|
||||||
|
*
|
||||||
|
* Timer interrupt. Increments counters for inputs
|
||||||
|
*/
|
||||||
|
ISR(TIMER1_OVF_vect)
|
||||||
|
{
|
||||||
|
if(++cnt == 250) cnt = 0;
|
||||||
|
if(cTuner == 1 && cnt == 1) {
|
||||||
|
if(cBank == 1) OUT_LED ^= (1<<LED_GN);
|
||||||
|
else OUT_LED ^= (1<<LED_RT);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bit_is_clear(IN_BTN, BTN1)) { // Button 1
|
||||||
|
if (iBtn1_counter < BTN_MAX) iBtn1_counter++;
|
||||||
|
} else {
|
||||||
|
if (iBtn1_counter > 0) iBtn1_counter--;
|
||||||
|
}
|
||||||
|
if (bit_is_clear(IN_BTN, BTN2)) { // Button 2
|
||||||
|
if (iBtn2_counter < BTN_MAX) iBtn2_counter++;
|
||||||
|
} else {
|
||||||
|
if (iBtn2_counter > 0) iBtn2_counter--;
|
||||||
|
}
|
||||||
|
if (bit_is_clear(IN_BTN, BTN3)) { // Button 3
|
||||||
|
if (iBtn3_counter < BTN_MAX) iBtn3_counter++;
|
||||||
|
} else {
|
||||||
|
if (iBtn3_counter > 0) iBtn3_counter--;
|
||||||
|
}
|
||||||
|
if (bit_is_clear(IN_BTN, BTN4)) { // Button 4
|
||||||
|
if (iBtn4_counter < BTN_MAX) iBtn4_counter++;
|
||||||
|
} else {
|
||||||
|
if (iBtn4_counter > 0) iBtn4_counter--;
|
||||||
|
}
|
||||||
|
if (bit_is_clear(IN_SW, SW1)) { // Switch 1
|
||||||
|
if (iSw1_counter < BTN_MAX) iSw1_counter++;
|
||||||
|
} else {
|
||||||
|
if (iSw1_counter > 0) iSw1_counter--;
|
||||||
|
}
|
||||||
|
if (bit_is_clear(IN_SW, SW2)) { // Switch 2
|
||||||
|
if (iSw2_counter < BTN_MAX) iSw2_counter++;
|
||||||
|
} else {
|
||||||
|
if (iSw2_counter > 0) iSw2_counter--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
39
firmware/midifs.h
Normal file
39
firmware/midifs.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// midi-to-parport.h
|
||||||
|
// Typ: C-Headerfile
|
||||||
|
// Project: MIDI-to-Parallelport interface
|
||||||
|
// Date: 27.08.2012
|
||||||
|
// Author: ska
|
||||||
|
|
||||||
|
#define IN_SW PIND
|
||||||
|
#define SW1 PD2
|
||||||
|
#define SW2 PD3
|
||||||
|
|
||||||
|
#define IN_BTN PINB
|
||||||
|
#define BTN1 PB0
|
||||||
|
#define BTN2 PB1
|
||||||
|
#define BTN3 PB2
|
||||||
|
#define BTN4 PB3
|
||||||
|
|
||||||
|
#define OUT_LED PORTD
|
||||||
|
#define LED_RT PD5
|
||||||
|
#define LED_GN PD4
|
||||||
|
|
||||||
|
#define BTN_THRESHOLD 50
|
||||||
|
#define BTN_MAX 100
|
||||||
|
|
||||||
|
|
||||||
|
void delayms(unsigned int millis) {
|
||||||
|
// uint16_t loop;
|
||||||
|
while ( millis ) {
|
||||||
|
_delay_ms(1);
|
||||||
|
millis--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void delayus(unsigned long millis) {
|
||||||
|
// uint16_t loop;
|
||||||
|
while ( millis ) {
|
||||||
|
_delay_us(1);
|
||||||
|
millis--;
|
||||||
|
}
|
||||||
|
}
|
84
firmware/midifs.hex
Normal file
84
firmware/midifs.hex
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
:1000000012C01FC01EC01DC01CC07BC01AC019C0BA
|
||||||
|
:1000100018C017C016C015C014C013C012C011C03C
|
||||||
|
:1000200010C00FC00EC011241FBECFEDCDBF20E009
|
||||||
|
:10003000A0E6B0E001C01D92AD37B207E1F74AD1AA
|
||||||
|
:1000400070C2DECF009741F0EFECF7E03197F1F7A7
|
||||||
|
:1000500000C000000197F6CF089561157105810574
|
||||||
|
:10006000910549F022E02A95F1F700C0615071092D
|
||||||
|
:1000700081099109F2CF08959B01AC0184E0220F20
|
||||||
|
:10008000331F441F551F8A95D1F760E072E18AE75C
|
||||||
|
:1000900090E025D22150310932B929B9539A86E02E
|
||||||
|
:1000A00083B908955F9BFECF8CB108955D9BFECF11
|
||||||
|
:1000B0008CB908955F9B02C08CB1FCCF089581116B
|
||||||
|
:1000C00010C080EBF3DF80E0F1DF80E0EFDF80EC59
|
||||||
|
:1000D000EDDF80E0EBDF80916500E8DF9598949A92
|
||||||
|
:1000E000089580EBE3DF80E0E1DF81E0DFDF80EC9B
|
||||||
|
:1000F000DDDF80E0DBDF80916500D8DF9498959AA2
|
||||||
|
:1001000008951F920F920FB60F9211248F939F9311
|
||||||
|
:10011000809160009091610001968A3F910529F0DD
|
||||||
|
:10012000909361008093600004C01092610010926F
|
||||||
|
:1001300060008091620090916300019781F480914A
|
||||||
|
:10014000600090916100019751F48091640092B336
|
||||||
|
:10015000813011F480E101C080E2892782BBB0992F
|
||||||
|
:100160000DC0809176009091770084369105A8F4B7
|
||||||
|
:10017000809176009091770001960BC08091760077
|
||||||
|
:1001800090917700892B49F08091760090917700CB
|
||||||
|
:1001900001979093770080937600B1990DC080917C
|
||||||
|
:1001A00074009091750084369105A8F480917400D4
|
||||||
|
:1001B0009091750001960BC080917400909175002C
|
||||||
|
:1001C000892B49F08091740090917500019790936C
|
||||||
|
:1001D000750080937400B2990DC080917200909167
|
||||||
|
:1001E000730084369105A8F4809172009091730099
|
||||||
|
:1001F00001960BC08091720090917300892B49F099
|
||||||
|
:100200008091720090917300019790937300809396
|
||||||
|
:100210007200B3990DC08091700090917100843686
|
||||||
|
:100220009105A8F4809170009091710001960BC027
|
||||||
|
:100230008091700090917100892B49F0809170003D
|
||||||
|
:100240009091710001979093710080937000829952
|
||||||
|
:100250000DC080916E0090916F0084369105A8F4D6
|
||||||
|
:1002600080916E0090916F0001960BC080916E009E
|
||||||
|
:1002700090916F00892B49F080916E0090916F00F2
|
||||||
|
:10028000019790936F0080936E0083990DC08091C9
|
||||||
|
:100290006C0090916D0084369105A8F480916C00FB
|
||||||
|
:1002A00090916D0001960BC080916C0090916D0053
|
||||||
|
:1002B000892B49F080916C0090916D00019790938B
|
||||||
|
:1002C0006D0080936C009F918F910F900FBE0F90E7
|
||||||
|
:1002D0001F90189517BA8FEF88BB80E381BB9CE015
|
||||||
|
:1002E00092BB82BB8FB582608FBD8EB58E7F8EBD77
|
||||||
|
:1002F0008EB582608EBD8EB58B7F8EBD83EF91E013
|
||||||
|
:100300009BBD8ABDF89489B7806889BF789462E103
|
||||||
|
:100310007AE780E090E0B0DEC1E001E010E080919B
|
||||||
|
:10032000760090917700C397A8F080916B008111BF
|
||||||
|
:1003300011C08091640090E0C2DE80ECB7DE80E006
|
||||||
|
:10034000B5DE109265001092630010926200C093B7
|
||||||
|
:100350006B000CC08091760090917700C29730F4CA
|
||||||
|
:1003600080916B00813011F410926B0080917400C9
|
||||||
|
:1003700090917500C397A8F080916A00811111C017
|
||||||
|
:100380008091640090E09BDE80EC90DE81E08EDE68
|
||||||
|
:10039000C09365001092630010926200C0936A00DF
|
||||||
|
:1003A0000CC08091740090917500C29730F48091D8
|
||||||
|
:1003B0006A00813011F410926A008091720090916D
|
||||||
|
:1003C0007300C397B0F080916900811112C08091D1
|
||||||
|
:1003D000640090E074DE80EC69DE82E067DE82E03B
|
||||||
|
:1003E000809365001092630010926200C0936900D0
|
||||||
|
:1003F0000CC08091720090917300C29730F480918C
|
||||||
|
:100400006900813011F41092690080917000909120
|
||||||
|
:100410007100C39788F08091680081110DC080EB56
|
||||||
|
:1004200045DE8FE043DE8FE741DE109363000093EB
|
||||||
|
:100430006200C09368000CC08091700090917100C0
|
||||||
|
:10044000C29730F480916800813011F410926800F6
|
||||||
|
:1004500080916E0090916F00C39780F0809167004B
|
||||||
|
:1004600081110CC080E090E02ADE109264001092AE
|
||||||
|
:10047000630010926200C09367000CC080916E0010
|
||||||
|
:1004800090916F00C29730F480916700813011F431
|
||||||
|
:100490001092670080916C0090916D00C39780F07E
|
||||||
|
:1004A0008091660081110CC081E090E008DEC0936D
|
||||||
|
:1004B00064001092630010926200C09366002FCF18
|
||||||
|
:1004C00080916C0090916D00C29708F028CF8091C8
|
||||||
|
:1004D0006600813009F023CF1092660020CFA1E2A0
|
||||||
|
:1004E0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1FAE
|
||||||
|
:1004F000FF1FA217B307E407F50720F0A21BB30BF9
|
||||||
|
:10050000E40BF50B661F771F881F991F1A9469F774
|
||||||
|
:1005100060957095809590959B01AC01BD01CF01D0
|
||||||
|
:060520000895F894FFCFDE
|
||||||
|
:00000001FF
|
36
firmware/usart.h
Normal file
36
firmware/usart.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
void USART_Init( unsigned long baud )
|
||||||
|
{
|
||||||
|
/* Calculate UBRR */
|
||||||
|
unsigned int ubrr_val = (unsigned int)((F_CPU/(baud*16L))-1);
|
||||||
|
/* Set baud rate */
|
||||||
|
UBRRH = (unsigned char)(ubrr_val>>8);
|
||||||
|
UBRRL = (unsigned char)ubrr_val;
|
||||||
|
/* Enable transmitter */
|
||||||
|
UCSRB |= (1<<TXEN);
|
||||||
|
/* Set frame format: 8data, 1stop bit */
|
||||||
|
UCSRC = (3<<UCSZ0);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char USART_Receive( void )
|
||||||
|
{
|
||||||
|
/* Wait for data to be received */
|
||||||
|
while ( !(UCSRA & (1<<RXC)) )
|
||||||
|
;
|
||||||
|
/* Get and return received data from buffer */
|
||||||
|
return UDR;
|
||||||
|
}
|
||||||
|
|
||||||
|
void USART_Transmit( unsigned char data )
|
||||||
|
{
|
||||||
|
/* Wait for empty transmit buffer */
|
||||||
|
while ( !( UCSRA & (1<<UDRE)) )
|
||||||
|
;
|
||||||
|
/* Put data into buffer, sends the data */
|
||||||
|
UDR = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void USART_Flush( void )
|
||||||
|
{
|
||||||
|
unsigned char dummy;
|
||||||
|
while ( UCSRA & (1<<RXC) ) dummy = UDR;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user