From 05c8b0af602b222d00c227560682158333b726a2 Mon Sep 17 00:00:00 2001 From: sicarius Date: Sun, 11 Feb 2007 19:03:00 +0000 Subject: Added lot's of code-files used during work --- source/AVR_Studio/Soccer/hal/board.c | 210 +++++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100755 source/AVR_Studio/Soccer/hal/board.c (limited to 'source/AVR_Studio/Soccer/hal/board.c') diff --git a/source/AVR_Studio/Soccer/hal/board.c b/source/AVR_Studio/Soccer/hal/board.c new file mode 100755 index 0000000..d60834b --- /dev/null +++ b/source/AVR_Studio/Soccer/hal/board.c @@ -0,0 +1,210 @@ +#include "board.h" + +static int beepFreq = 0; + +Board::Board() { + // Pin 1-6 sind ausgänge, 0 und 7 eingänge + DDRA = (1 << PA1) | (1 << PA2) | (1 << PA3) | (1 << PA4) | (1 << PA5) | (1 << PA6); + PORTA = 0; // Alle Low, kein Pollup + + // Alle Ausgänge + DDRB = (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) | (1 << PB5) | (1 << PB6) | (1 << PB7); + PORTB = (1 << PB1); // Alle Low bis PB1 , kein Pollup + + // Alle Ausgänge + DDRC = (1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3) | (1 << PC4) | (1 << PC5) | (1 << PC6) | (1 << PC7); + PORTC = 0; // Alle Low, kein Pollup + + // Alle Ausgänge bis auf PD0+1(I2C) + 2+3(RS232) + DDRD = (1 << PD2) | (1 << PD3) | (1 << PD4) | (1 << PD5) | (1 << PD6) | (1 << PD7); + PORTD = (1 << PD0) | (1 << PD1); // Pollup-Widerstand an PD0+1 aktivieren + + // PE5 ist eingang + DDRE = (1 << PE0) | (1 << PE1) | (1 << PE2) | (1 << PE3) | (1 << PE4) | (1 << PE6) | (1 << PE7); + PORTE = 0; // Alle Low, kein Pollup + + // Alle Eingänge mit Pollup + DDRF = 0; + PORTF = (1 << PF0) | (1 << PF1) | (1 << PF2) | (1 << PF3) | (1 << PF4) | (1 << PF5) | (1 << PF6) | (1 << PF7); + + // Alle Ausgänge, PG0 und PG1 high + DDRG = (1 << PG0) | (1 << PG1) | (1 << PG2) | (1 << PG3) | (1 << PG4); + PORTG = (1 << PG0) | (1 << PG1); + + // aktiviere Kanal A+C auf PWM1 mit 8Bit + //TCCR1A = (1<< COM1A1) | (1<< COM1C1) | (1<< WGM10); + //TCCR1B = (1< enable counter + + // aktiviere Kanal A+B auf PWM3 mit 8Bit + //TCCR3A = (1<< COM3A1) | (1<< COM3B1) | (1<< WGM10); + //TCCR3B = (1< enable counter + + // Schalte Motoren auf 0 + motor(0,0); + motor(1,0); + motor(2,0); + motor(3,0); + + // Uart-Interface einschalten + uart1_init( 10); // 9600 BAUD bei 16MHz Atmel + + // aktiviere interrupt + sei(); +} + +Board::~Board() { + +} + +// Gibt einen Analogen Wert zurück +int Board::GetADC(uint8_t channel) { + uint8_t i; + uint16_t result = 0; + + // Den ADC aktivieren und Teilungsfaktor auf 64 stellen + ADCSRA = (1< 3)) return; + const int OFFSET = 40; // Motor does not work with very low ratio + const int PWM_MAX = 255; + + int pwm = abs(speed)+OFFSET; + if(pwm > PWM_MAX) pwm = PWM_MAX; + + if(i == 0) + { + MOTOR0_PWM = pwm; + if(speed > 0) + { + PORTD |= (1 << 5);//In 1 ein + PORTD &= ~(1 << 4);//In 2 aus + } + else if(speed < 0) + { + PORTD |= (1 << 4);//In 2 ein + PORTD &= ~(1 << 5);//In 1 aus + } + else + { + PORTD |= (1 << 4);//In 2 ein + PORTD |= (1 << 5);//In 1 ein + } + } + else if(i == 1) + { + MOTOR1_PWM = pwm; + if(speed > 0) + { + PORTD |= (1 << 6);//In 1 ein + PORTD &= ~(1 << 7);//In 2 aus + } + else if(speed < 0) + { + PORTD |= (1 << 7);//In 2 ein + PORTD &= ~(1 << 6);//In 1 aus + } + else + { + PORTD |= (1 << 6);//In 2 ein + PORTD |= (1 << 7);//In 1 ein + } + } + else if(i == 2) + { + MOTOR2_PWM = pwm; + if(speed > 0) + { + PORTB |= (1 << 0);//In 1 ein + PORTB &= ~(1 << 1);//In 2 aus + } + else if(speed < 0) + { + PORTB |= (1 << 1);//In 2 ein + PORTB &= ~(1 << 0);//In 1 aus + } + else + { + PORTB |= (1 << 1);//In 2 ein + PORTB |= (1 << 0);//In 1 ein + } + } + else if(i == 3) + { + DRIBBLER_PWM = pwm; + if(speed > 0) + { + PORTB |= (1 << 2);//In 1 ein + PORTB &= ~(1 << 3);//In 2 aus + } + else if(speed < 0) + { + PORTB |= (1 << 3);//In 2 ein + PORTB &= ~(1 << 2);//In 1 aus + } + else + { + PORTB |= (1 << 2);//In 2 ein + PORTB |= (1 << 3);//In 1 ein + } + } +} + +//PWM routine für den Beeper +ISR (TIMER0_OVF_vect) +{ + static int counter = 255; + + if(counter > beepFreq/2) PORTG |= (1<