diff options
author | Jakob Odersky <jodersky@gmail.com> | 2014-01-24 20:10:45 +0100 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2014-01-24 20:10:45 +0100 |
commit | 6cdf34b0e87bc915de39a6d5817980a825a720da (patch) | |
tree | 1b8710106c0201ecad5e199099b4f084795b96ea /kernel/tshield | |
download | mux-6cdf34b0e87bc915de39a6d5817980a825a720da.tar.gz mux-6cdf34b0e87bc915de39a6d5817980a825a720da.tar.bz2 mux-6cdf34b0e87bc915de39a6d5817980a825a720da.zip |
initial commit
Diffstat (limited to 'kernel/tshield')
-rw-r--r-- | kernel/tshield/include/tshield/tshield.h | 50 | ||||
-rw-r--r-- | kernel/tshield/tshield.c | 115 |
2 files changed, 165 insertions, 0 deletions
diff --git a/kernel/tshield/include/tshield/tshield.h b/kernel/tshield/include/tshield/tshield.h new file mode 100644 index 0000000..2624131 --- /dev/null +++ b/kernel/tshield/include/tshield/tshield.h @@ -0,0 +1,50 @@ +#ifndef TSHIElD_H +#define TSHIELD_H + +/* + * Custom test shield + * Pin mappings + * + * Leds (from left to right) + * ===== + * Color | Arduino pin | atmega2560 + * ---------------------------------- + * Green D6 PH3 + * Yellow D7 PH4 + * Red D5 PE3 + * Red D4 PG5 + * + * + * Buttons (from left to right) + * ===== + * Number | Arduino pin | atmega2560 + * --------------------------------- + * 0 D2 PE4 (INT4) + * 1 D8 PH5 + * 2 D10 PB4 + * + * Outputs (from top to bottom) + * ===== + * Type | Arduino pin | atmega2560 + * ------------------------------------------------------ + * Servo 11, Vcc, GND PB5 + * Diode protected (max 200mA) 12 PB6 + * + */ + + #define TSHIELD_LED_IDLE 0 + +void tshield_init(); + +void tshield_test(); + +unsigned char tshield_read(); + +void tshield_led(unsigned char led, unsigned char value); + +void tshield_pp(unsigned char value); + +void tshield_servo(unsigned char angle); + + +#endif diff --git a/kernel/tshield/tshield.c b/kernel/tshield/tshield.c new file mode 100644 index 0000000..ccf234d --- /dev/null +++ b/kernel/tshield/tshield.c @@ -0,0 +1,115 @@ +#include <avr/io.h> +#include "tshield/tshield.h" + +static void tshield_init_servo(); + +void tshield_init() { + + DDRH |= (1 << 3) | (1 << 4); //leds + PORTH &= ~( (1 << 3) | (1 << 4)); + DDRE |= (1 << 3); + PORTE &= ~(1 << 3); + DDRG |= (1 << 5); + PORTG &= ~(1 << 5); + + DDRE &= ~(1 << 4); // buttons + PORTE |= (1 << 4); + DDRH &= ~(1 << 5); + PORTH |= (1 << 5); + DDRB &= ~(1 << 4); + PORTB |= (1 << 4); + + DDRB |= (1 << 6); + PORTB &= ~(1 << 6); + + tshield_init_servo(); + +} + +#define WAIT_VALUE 20000 +#define WAIT() \ + for (volatile long x = 0; x < WAIT_VALUE; ++x){} + +void tshield_test() { + while(1) { + PORTG |= (1 << 5); + WAIT(); + PORTG &= ~(1 << 5); + PORTE |= (1 << 3); + WAIT(); + PORTE &= ~(1 << 3); + PORTH |= (1 << 3); + WAIT(); + PORTH &= ~(1 << 3); + PORTH |= (1 << 4); + WAIT(); + PORTH &= ~(1 << 4); + } + +} + +unsigned char tshield_read() { + return ((PINE & (1 << 4) ? 0 : 1) << 2 ) | + ((PINH & (1 << 5) ? 0 : 1) << 1 ) | + (PINB & (1 << 4) ? 0 : 1); +} + +void tshield_led(unsigned char led, unsigned char value) { + volatile unsigned char* port; + unsigned char bit; + switch (led) { + case 0: + port = &PORTG; + bit = 5; + break; + case 1: + port = &PORTE; + bit = 3; + break; + case 2: + port = &PORTH; + bit = 3; + break; + case 3: + port = &PORTH; + bit = 4; + break; + default: + return; + } + + if (value) { + *port |= (1 << bit); + } else { + *port &= ~(1 << bit); + } + +} + +void tshield_pp(unsigned char value) { + if (value) { + PORTB |= (1 << 6); + } else { + PORTB &= ~(1 << 6); + } +} + +void tshield_init_servo() { + + TCCR1A |= (1<<COM1A1); // non inverted pwm on channel A + TCCR1B |= (1<<CS11) | (1<<CS10); // prescaler 64 + + //fast pwm + TCCR1A |= (1<<WGM11); + TCCR1B|=(1<<WGM13) | (1<<WGM12); + + ICR1=4999; //fPWM=50Hz (Period = 20ms Standard). + + DDRB |= (1<< 5); +} + +void tshield_servo(unsigned char angle) { + unsigned long k = (unsigned long) angle; + unsigned long counter = (450 * k) / 255 + 150; + OCR1A = (unsigned int) counter; +}
\ No newline at end of file |