Code-Work by Marian

This commit is contained in:
sicarius 2007-02-14 17:47:03 +00:00
parent ab9cf92c1a
commit 29618453d2
24 changed files with 1266 additions and 1012 deletions

File diff suppressed because one or more lines are too long

View file

@ -23,8 +23,9 @@ int main() {
board.motor(1, speed); board.motor(1, speed);
board.motor(2, speed); board.motor(2, speed);
board.motor(3, speed); board.motor(3, speed);
PORTB |= (1 << PB5) | (1 << PB7); // Setze PWM-Ports auf high PORTB |= (1 << PB5) | (1 << PB6); // Setze PWM-Ports auf high
PORTE |= (1 << PE3) | (1 << PE4); PORTE |= (1 << PE3); // | (1 << PE4);
PORTA |= (1 << PA4); // | (1 << PA5);
//sleep(10); //sleep(10);
while(true) { sleep(1); } while(true) { sleep(1); }
/*sleep(10); /*sleep(10);

View file

@ -34,7 +34,7 @@ HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0
## Objects that must be built in order to link ## Objects that must be built in order to link
OBJECTS = Soccer.o board.o keylcd.o i2c.o global.o uart.o navigation.o sensor.o ballsensor.o maussensor.o OBJECTS = Soccer.o board.o keylcd.o i2c.o global.o uart.o navigation.o sensor.o ballsensor.o maussensor.o position.o abstand.o
## Objects explicitly added by the user ## Objects explicitly added by the user
LINKONLYOBJECTS = LINKONLYOBJECTS =
@ -73,6 +73,12 @@ ballsensor.o: ../sensor/ballsensor.c
maussensor.o: ../hal/maussensor.c maussensor.o: ../hal/maussensor.c
$(CC) $(INCLUDES) $(CFLAGS) -c $< $(CC) $(INCLUDES) $(CFLAGS) -c $<
position.o: ../sensor/position.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
abstand.o: ../sensor/abstand.c
$(CC) $(INCLUDES) $(CFLAGS) -c $<
##Link ##Link
$(TARGET): $(OBJECTS) $(TARGET): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)

File diff suppressed because it is too large Load diff

View file

@ -8,14 +8,14 @@ Soccer.o: ../Soccer.c ../global.h c:/winavr/bin/../avr/include/stdlib.h \
c:/winavr/bin/../avr/include/avr/portpins.h \ c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \ c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/uart.h \ c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/uart.h \
../hal/keylcd.h ../hal/i2c.h ../hal/../global.h \ ../hal/../global.h ../hal/keylcd.h ../hal/i2c.h \
c:/winavr/bin/../avr/include/compat/twi.h \ c:/winavr/bin/../avr/include/compat/twi.h \
c:/winavr/bin/../avr/include/util/twi.h \ c:/winavr/bin/../avr/include/util/twi.h \
c:/winavr/bin/../avr/include/string.h ../navigation.h \ c:/winavr/bin/../avr/include/string.h ../navigation.h \
c:/winavr/bin/../avr/include/math.h ../sensor/sensor.h \ c:/winavr/bin/../avr/include/math.h ../sensor/sensor.h \
../sensor/../hal/board.h ../sensor/ballsensor.h \ ../sensor/../hal/board.h ../sensor/ballsensor.h ../sensor/position.h \
../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \ ../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \
../sensor/../global.h ../sensor/abstand.h ../sensor/../global.h
../global.h: ../global.h:
@ -43,12 +43,12 @@ c:/winavr/bin/../avr/include/avr/interrupt.h:
../hal/uart.h: ../hal/uart.h:
../hal/../global.h:
../hal/keylcd.h: ../hal/keylcd.h:
../hal/i2c.h: ../hal/i2c.h:
../hal/../global.h:
c:/winavr/bin/../avr/include/compat/twi.h: c:/winavr/bin/../avr/include/compat/twi.h:
c:/winavr/bin/../avr/include/util/twi.h: c:/winavr/bin/../avr/include/util/twi.h:
@ -65,8 +65,12 @@ c:/winavr/bin/../avr/include/math.h:
../sensor/ballsensor.h: ../sensor/ballsensor.h:
../sensor/position.h:
../sensor/../hal/maussensor.h: ../sensor/../hal/maussensor.h:
../sensor/../hal/../global.h: ../sensor/../hal/../global.h:
../sensor/abstand.h:
../sensor/../global.h: ../sensor/../global.h:

View file

@ -9,7 +9,8 @@ ballsensor.o: ../sensor/ballsensor.c ../sensor/ballsensor.h \
c:/winavr/bin/../avr/include/avr/interrupt.h \ c:/winavr/bin/../avr/include/avr/interrupt.h \
c:/winavr/bin/../avr/include/stdlib.h \ c:/winavr/bin/../avr/include/stdlib.h \
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h \ c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h \
../sensor/../hal/uart.h ../sensor/../hal/uart.h ../sensor/../hal/../global.h \
../sensor/../hal/../hal/board.h
../sensor/ballsensor.h: ../sensor/ballsensor.h:
@ -36,3 +37,7 @@ c:/winavr/bin/../avr/include/stdlib.h:
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h: c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h:
../sensor/../hal/uart.h: ../sensor/../hal/uart.h:
../sensor/../hal/../global.h:
../sensor/../hal/../hal/board.h:

View file

@ -8,7 +8,8 @@ board.o: ../hal/board.c ../hal/board.h \
c:/winavr/bin/../avr/include/avr/version.h \ c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h \ c:/winavr/bin/../avr/include/avr/interrupt.h \
c:/winavr/bin/../avr/include/stdlib.h \ c:/winavr/bin/../avr/include/stdlib.h \
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/uart.h c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/uart.h \
../hal/../global.h ../hal/../hal/board.h
../hal/board.h: ../hal/board.h:
@ -33,3 +34,7 @@ c:/winavr/bin/../avr/include/stdlib.h:
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h: c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h:
../hal/uart.h: ../hal/uart.h:
../hal/../global.h:
../hal/../hal/board.h:

View file

@ -7,7 +7,8 @@ global.o: ../global.c ../global.h c:/winavr/bin/../avr/include/stdlib.h \
c:/winavr/bin/../avr/include/avr/iom128.h \ c:/winavr/bin/../avr/include/avr/iom128.h \
c:/winavr/bin/../avr/include/avr/portpins.h \ c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \ c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/uart.h c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/uart.h \
../hal/../global.h
../global.h: ../global.h:
@ -34,3 +35,5 @@ c:/winavr/bin/../avr/include/avr/version.h:
c:/winavr/bin/../avr/include/avr/interrupt.h: c:/winavr/bin/../avr/include/avr/interrupt.h:
../hal/uart.h: ../hal/uart.h:
../hal/../global.h:

View file

@ -9,7 +9,7 @@ i2c.o: ../hal/i2c.c ../hal/i2c.h ../hal/../global.h \
c:/winavr/bin/../avr/include/avr/portpins.h \ c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \ c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h \ c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h \
c:/winavr/bin/../avr/include/compat/twi.h \ ../hal/../hal/../global.h c:/winavr/bin/../avr/include/compat/twi.h \
c:/winavr/bin/../avr/include/util/twi.h c:/winavr/bin/../avr/include/util/twi.h
../hal/i2c.h: ../hal/i2c.h:
@ -40,6 +40,8 @@ c:/winavr/bin/../avr/include/avr/interrupt.h:
../hal/../hal/uart.h: ../hal/../hal/uart.h:
../hal/../hal/../global.h:
c:/winavr/bin/../avr/include/compat/twi.h: c:/winavr/bin/../avr/include/compat/twi.h:
c:/winavr/bin/../avr/include/util/twi.h: c:/winavr/bin/../avr/include/util/twi.h:

View file

@ -9,7 +9,7 @@ keylcd.o: ../hal/keylcd.c ../hal/keylcd.h ../hal/i2c.h ../hal/../global.h \
c:/winavr/bin/../avr/include/avr/portpins.h \ c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \ c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h \ c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h \
c:/winavr/bin/../avr/include/compat/twi.h \ ../hal/../hal/../global.h c:/winavr/bin/../avr/include/compat/twi.h \
c:/winavr/bin/../avr/include/util/twi.h \ c:/winavr/bin/../avr/include/util/twi.h \
c:/winavr/bin/../avr/include/string.h c:/winavr/bin/../avr/include/string.h
@ -43,6 +43,8 @@ c:/winavr/bin/../avr/include/avr/interrupt.h:
../hal/../hal/uart.h: ../hal/../hal/uart.h:
../hal/../hal/../global.h:
c:/winavr/bin/../avr/include/compat/twi.h: c:/winavr/bin/../avr/include/compat/twi.h:
c:/winavr/bin/../avr/include/util/twi.h: c:/winavr/bin/../avr/include/util/twi.h:

View file

@ -8,7 +8,8 @@ maussensor.o: ../hal/maussensor.c ../hal/maussensor.h ../hal/../global.h \
c:/winavr/bin/../avr/include/avr/iom128.h \ c:/winavr/bin/../avr/include/avr/iom128.h \
c:/winavr/bin/../avr/include/avr/portpins.h \ c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \ c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.h \
../hal/../hal/../global.h
../hal/maussensor.h: ../hal/maussensor.h:
@ -37,3 +38,5 @@ c:/winavr/bin/../avr/include/avr/version.h:
c:/winavr/bin/../avr/include/avr/interrupt.h: c:/winavr/bin/../avr/include/avr/interrupt.h:
../hal/../hal/uart.h: ../hal/../hal/uart.h:
../hal/../hal/../global.h:

View file

@ -10,9 +10,10 @@ navigation.o: ../navigation.c ../navigation.h \
c:/winavr/bin/../avr/include/avr/interrupt.h \ c:/winavr/bin/../avr/include/avr/interrupt.h \
c:/winavr/bin/../avr/include/stdlib.h \ c:/winavr/bin/../avr/include/stdlib.h \
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/uart.h \ c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h ../hal/uart.h \
../sensor/sensor.h ../sensor/../hal/board.h ../sensor/ballsensor.h \ ../hal/../global.h ../hal/../hal/board.h ../sensor/sensor.h \
../sensor/../hal/board.h ../sensor/ballsensor.h ../sensor/position.h \
../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \ ../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \
../sensor/../hal/../hal/board.h ../sensor/../global.h ../sensor/abstand.h ../sensor/../global.h
../navigation.h: ../navigation.h:
@ -42,16 +43,22 @@ c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h:
../hal/uart.h: ../hal/uart.h:
../hal/../global.h:
../hal/../hal/board.h:
../sensor/sensor.h: ../sensor/sensor.h:
../sensor/../hal/board.h: ../sensor/../hal/board.h:
../sensor/ballsensor.h: ../sensor/ballsensor.h:
../sensor/position.h:
../sensor/../hal/maussensor.h: ../sensor/../hal/maussensor.h:
../sensor/../hal/../global.h: ../sensor/../hal/../global.h:
../sensor/../hal/../hal/board.h: ../sensor/abstand.h:
../sensor/../global.h: ../sensor/../global.h:

View file

@ -9,9 +9,11 @@ sensor.o: ../sensor/sensor.c ../sensor/sensor.h ../sensor/../hal/board.h \
c:/winavr/bin/../avr/include/avr/interrupt.h \ c:/winavr/bin/../avr/include/avr/interrupt.h \
c:/winavr/bin/../avr/include/stdlib.h \ c:/winavr/bin/../avr/include/stdlib.h \
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h \ c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h \
../sensor/../hal/uart.h ../sensor/ballsensor.h \ ../sensor/../hal/uart.h ../sensor/../hal/../global.h \
../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \ ../sensor/../hal/../hal/board.h ../sensor/ballsensor.h \
../sensor/../hal/../hal/board.h ../sensor/../global.h ../sensor/position.h ../sensor/../hal/maussensor.h \
c:/winavr/bin/../avr/include/math.h ../sensor/abstand.h \
../sensor/../global.h
../sensor/sensor.h: ../sensor/sensor.h:
@ -39,12 +41,18 @@ c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h:
../sensor/../hal/uart.h: ../sensor/../hal/uart.h:
../sensor/ballsensor.h:
../sensor/../hal/maussensor.h:
../sensor/../hal/../global.h: ../sensor/../hal/../global.h:
../sensor/../hal/../hal/board.h: ../sensor/../hal/../hal/board.h:
../sensor/ballsensor.h:
../sensor/position.h:
../sensor/../hal/maussensor.h:
c:/winavr/bin/../avr/include/math.h:
../sensor/abstand.h:
../sensor/../global.h: ../sensor/../global.h:

View file

@ -22,6 +22,17 @@ inline void msleep(int msec)
} }
}; };
inline void usleep(int usec)
{
usec *= 100;
for (int s=0; s<usec; s++) {
for (long int i=0; i<1405; i++) {
asm volatile("nop");
}
}
};
void *operator new(size_t sz); void *operator new(size_t sz);
void operator delete(void *p); void operator delete(void *p);

View file

@ -92,6 +92,29 @@ int Board::GetADC(uint8_t channel) {
return result; return result;
} }
// Gibt den Wert vom Abstandsensor zurück
int Board::GetAbstand(int i) {
int result = -1;
if((i < 0) || (i > 3)) return result; // Ungültige Nummern rausfiltern
// Sende zunächst einen Impuls aus
ABSTAND_DDR |= (1 << i); // Konfiguriere Pin als Ausgang
ABSTAND_PORT |= (1 << i); // Und setze ihn auf High
usleep(10); // Warte jetzt 10us
ABSTAND_PORT &= ~(1 << i); // Und setze den Pin wieder auf Low
ABSTAND_DDR &= ~(1 << i); // Konfiguriere Pin als Eingang
// Jetzt warten wir auf die Antwort vom Sensor
while(!(ABSTAND_PIN & i)) {} // während er low ist nichts machen
while(ABSTAND_PIN & i) { // Und während er high ist
result++; //schleifendurchläufe zähenlen (unsauber, ich weiß)
asm volatile("nop"); // ein ganz bisschen warten
}
// Die Zahl der Schleifendurchläufe geben wir dann zurück
return result;
}
void Board::beep(int freq) { void Board::beep(int freq) {
beepFreq = freq; beepFreq = freq;
} }

View file

@ -5,6 +5,7 @@
#include <avr/interrupt.h> #include <avr/interrupt.h>
#include <stdlib.h> #include <stdlib.h>
#include "uart.h" #include "uart.h"
#include "../global.h"
//#define abs(a) ((a < 0)? -a : a) //#define abs(a) ((a < 0)? -a : a)
@ -31,6 +32,11 @@
#define DRIBBLER_A (1 << 2) #define DRIBBLER_A (1 << 2)
#define DRIBBLER_B (1 << 3) #define DRIBBLER_B (1 << 3)
// Definiere Konstanten für Abstandsensoren
#define ABSTAND_PORT PORTC
#define ABSTAND_DDR DDRC
#define ABSTAND_PIN PINC
#define UART_BAUD_RATE 9600 #define UART_BAUD_RATE 9600
class Board class Board
@ -40,7 +46,9 @@ public:
Board(); Board();
~Board(); ~Board();
int GetADC(uint8_t channel); int GetADC(uint8_t channel);
int GetAbstand(int i);
void beep(int freq); void beep(int freq);
void ledOn(); void ledOn();
void ledOff(); void ledOff();

View file

@ -1,6 +1,15 @@
#include "maussensor.h" #include "maussensor.h"
Maussensor::Maussensor(int index) { Maussensor::Maussensor() {
}
Maussensor::~Maussensor() {
}
// Initialisiert den Maussensor
void Maussensor::init(int index) {
// Setze die Pins entsprechend dem übergebenen Index // Setze die Pins entsprechend dem übergebenen Index
if(index == MAUSSENSOR0) { if(index == MAUSSENSOR0) {
sda_pin = MAUS0_SDA; sda_pin = MAUS0_SDA;
@ -15,9 +24,6 @@ Maussensor::Maussensor(int index) {
maus_sens_init(); maus_sens_init();
} }
Maussensor::~Maussensor() {
}
// Gibt die X-Koordinate Zurück // Gibt die X-Koordinate Zurück
uint8 Maussensor::GetX() { uint8 Maussensor::GetX() {
return maus_sens_read(MOUSE_DELTA_X_REG); return maus_sens_read(MOUSE_DELTA_X_REG);

View file

@ -111,9 +111,11 @@ void maus_image_prepare(void);
*/ */
public: public:
Maussensor(int index); Maussensor();
~Maussensor(); ~Maussensor();
void init(int index);
uint8 GetX(); uint8 GetX();
uint8 GetY(); uint8 GetY();
uint8 GetSqual(); uint8 GetSqual();

View file

@ -2,10 +2,11 @@
// Initialisiert die Klasse // Initialisiert die Klasse
Navigation::Navigation() { Navigation::Navigation() {
// Am Anfang stehen wir an der Stelle
richtung = 0; richtung = 0;
ausrichtung = 0; ausrichtung = 0;
geschwindigkeit = 0; geschwindigkeit = 0;
Aktualisieren(); Aktualisieren(); // und änderungen anwenden
} }
Navigation::~Navigation() { Navigation::~Navigation() {
} }
@ -27,11 +28,11 @@ void Navigation::SetzeGeschwindigkeit(int nGeschwindigkeit) {
// Aktualieren ohne Parameter // Aktualieren ohne Parameter
void Navigation::Aktualisieren() { void Navigation::Aktualisieren() {
// Richtung in x und y-Kompontente zerlegen // Richtung in x und y-Kompontente zerlegen
int y = (int)cos(richtung); // richtung ist winkel float y = cos(richtung); // richtung ist winkel
int x = (int)sin(richtung); float x = sin(richtung);
// Abweichung der Ausrichtung ermitteln(als winkel) // Abweichung der Ausrichtung ermitteln(als winkel)
int w = sensor.getAusrichtung() - ausrichtung; int w = sensor.GetAusrichtung() - ausrichtung;
// Stärke der einzelnen Motoren berechnen // Stärke der einzelnen Motoren berechnen
float v0 = x; float v0 = x;

View file

@ -10,12 +10,19 @@ Ballsensor::Ballsensor() {
winkel[5] = 260; winkel[5] = 260;
winkel[6] = 300; winkel[6] = 300;
winkel[7] = 330; winkel[7] = 330;
// Der Winkel ist erstmal 0
ballwinkel = 0;
} }
Ballsensor::~Ballsensor() { Ballsensor::~Ballsensor() {
} }
int Ballsensor::getBallwinkel() { int Ballsensor::GetBallwinkel() {
return ballwinkel;
}
void Ballsensor::Aktualisieren() {
// Erstelle ein Array für die Sensorwerte // Erstelle ein Array für die Sensorwerte
int sensor[NUM_BALLSENSOR]; int sensor[NUM_BALLSENSOR];
int result = 0; // und einer Variable fürs Ergebnis int result = 0; // und einer Variable fürs Ergebnis
@ -30,6 +37,6 @@ int Ballsensor::getBallwinkel() {
if(sensor[i] < current) result = i; // Ergebnis ist erstmal index if(sensor[i] < current) result = i; // Ergebnis ist erstmal index
} }
// Gebe den Winkel zum index result zurück // Setze den Winkel zum index result
return winkel[result]; ballwinkel = winkel[result];
} }

View file

@ -12,11 +12,13 @@ class Ballsensor
{ {
private: private:
int winkel[NUM_BALLSENSOR]; int winkel[NUM_BALLSENSOR];
int ballwinkel;
public: public:
Ballsensor(); Ballsensor();
~Ballsensor(); ~Ballsensor();
int getBallwinkel(); // Gibt den aktuellen Winkel vom Ball zurück int GetBallwinkel(); // Gibt den aktuellen Winkel vom Ball zurück
void Aktualisieren(); // Aktualisiert die Variable
}; };
#endif #endif

View file

@ -6,10 +6,14 @@ Sensor::Sensor() :ballsensor() {
Sensor::~Sensor() { Sensor::~Sensor() {
} }
// Aktualisiert die ganzen Sachen ;)
void Sensor::Aktualisieren() { void Sensor::Aktualisieren() {
position.Aktualisieren(); // Aktualisiere die Position
ballsensor.Aktualisieren(); // Aktualisiere den Ballwinkel
abstand.Aktualisieren(); // Aktualsiere die abstandsdaten
} }
int Sensor::getAusrichtung() { // Gebe die aktuelle Ausrichtung zurück
return 0; int Sensor::GetAusrichtung() {
return position.GetAusrichtung();
} }

View file

@ -3,7 +3,8 @@
#include "../hal/board.h" #include "../hal/board.h"
#include "ballsensor.h" #include "ballsensor.h"
#include "../hal/maussensor.h" #include "position.h"
#include "abstand.h"
#include "../global.h" #include "../global.h"
extern Board board; extern Board board;
@ -12,13 +13,15 @@ class Sensor
{ {
private: private:
Ballsensor ballsensor; Ballsensor ballsensor;
Position position;
Abstand abstand;
public: public:
Sensor(); Sensor();
~Sensor(); ~Sensor();
void Aktualisieren(); void Aktualisieren();
int getAusrichtung(); // Gibt die aktuelle Ausrichtung des Roboters zurück int GetAusrichtung(); // Gibt die aktuelle Ausrichtung des Roboters zurück
}; };
#endif #endif