+++ enhanced framework hardware interface

This commit is contained in:
sicarius 2007-02-17 00:35:01 +00:00
parent 37d4d23f1d
commit 4a2ba4b710
33 changed files with 2328 additions and 1341 deletions

File diff suppressed because one or more lines are too long

View file

@ -10,19 +10,29 @@ Sensor sensor;
int main() {
//board.ledOn();
sleep(2);
sleep(1);
uart1_puts("Hallo hier ist das RNMega128Funk-Board");
while(true)
{
uart1_puts("3");
sleep(1);
}
int speed = 100;
int speed = 255;
board.motor(0, speed);
board.motor(1, speed);
board.motor(2, speed);
sleep(2);
navigation.Aktualisieren(180,0,speed);
while(true) { sleep(1); }
/*for(int i=0;i<360;i+=5) {
navigation.Aktualisieren(0,i,0);
msleep(1000);
}*/
/*sleep(2);
board.motor(0,0);
board.motor(1,0);
board.motor(2,0);
board.motor(3,0);
while(true) { sleep(1); }*/
/*board.motor(0,speed);
board.motor(2,speed);
sleep(2);
@ -83,11 +93,16 @@ int main() {
while(true) {
navigation.Aktualisieren(0,0,speed);
sleep(2);
navigation.Aktualisieren(90,0,speed);
navigation.Aktualisieren(135,0,speed);
sleep(2);
navigation.Aktualisieren(180,0,speed);
sleep(2);
navigation.Aktualisieren(270,0,speed);
navigation.Aktualisieren(225,0,speed);
sleep(2);
board.motor(0,0);
board.motor(1,0);
board.motor(2,0);
board.motor(3,0);
sleep(2);
}

File diff suppressed because it is too large Load diff

View file

@ -7,12 +7,9 @@ Soccer.o: ../Soccer.c ../global.h c:/winavr/bin/../avr/include/stdlib.h \
c:/winavr/bin/../avr/include/avr/iom128.h \
c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/uart.h \
../hal/../global.h ../hal/keylcd.h ../hal/i2c.h \
c:/winavr/bin/../avr/include/compat/twi.h \
c:/winavr/bin/../avr/include/util/twi.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/avr/interrupt.h ../hal/../global.h \
../hal/keylcd.h c:/winavr/bin/../avr/include/string.h ../hal/uart.h \
../navigation.h c:/winavr/bin/../avr/include/math.h ../sensor/sensor.h \
../sensor/../hal/board.h ../sensor/ballsensor.h ../sensor/position.h \
../sensor/../hal/maussensor.h ../sensor/../hal/../global.h \
../sensor/abstand.h ../sensor/../global.h
@ -41,20 +38,14 @@ c:/winavr/bin/../avr/include/avr/version.h:
c:/winavr/bin/../avr/include/avr/interrupt.h:
../hal/uart.h:
../hal/../global.h:
../hal/keylcd.h:
../hal/i2c.h:
c:/winavr/bin/../avr/include/compat/twi.h:
c:/winavr/bin/../avr/include/util/twi.h:
c:/winavr/bin/../avr/include/string.h:
../hal/uart.h:
../navigation.h:
c:/winavr/bin/../avr/include/math.h:

View file

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

View file

@ -1,52 +0,0 @@
keylcd.o: ../hal/keylcd.c ../hal/keylcd.h ../hal/i2c.h ../hal/../global.h \
c:/winavr/bin/../avr/include/stdlib.h \
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h \
../hal/../hal/board.h c:/winavr/bin/../avr/include/avr/io.h \
c:/winavr/bin/../avr/include/avr/sfr_defs.h \
c:/winavr/bin/../avr/include/inttypes.h \
c:/winavr/bin/../avr/include/stdint.h \
c:/winavr/bin/../avr/include/avr/iom128.h \
c:/winavr/bin/../avr/include/avr/portpins.h \
c:/winavr/bin/../avr/include/avr/version.h \
c:/winavr/bin/../avr/include/avr/interrupt.h ../hal/../hal/uart.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/string.h
../hal/keylcd.h:
../hal/i2c.h:
../hal/../global.h:
c:/winavr/bin/../avr/include/stdlib.h:
c:\winavr\bin\../lib/gcc/avr/4.1.1/include/stddef.h:
../hal/../hal/board.h:
c:/winavr/bin/../avr/include/avr/io.h:
c:/winavr/bin/../avr/include/avr/sfr_defs.h:
c:/winavr/bin/../avr/include/inttypes.h:
c:/winavr/bin/../avr/include/stdint.h:
c:/winavr/bin/../avr/include/avr/iom128.h:
c:/winavr/bin/../avr/include/avr/portpins.h:
c:/winavr/bin/../avr/include/avr/version.h:
c:/winavr/bin/../avr/include/avr/interrupt.h:
../hal/../hal/uart.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/string.h:

View file

@ -16,7 +16,7 @@ Board::Board() {
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);
DDRD = (1 << PD3) | (1 << PD4) | (1 << PD5) | (1 << PD6) | (1 << PD7);
PORTD = (1 << PD0) | (1 << PD1); // Pollup-Widerstand an PD0+1 aktivieren
// PE5 ist eingang
@ -33,11 +33,11 @@ Board::Board() {
// aktiviere Kanal A+B auf PWM1 mit 8Bit
TCCR1A = (1<< COM1A1) | (1<< COM1B1) | (1<< WGM10);
TCCR1B = (1<<ICNC1) | (1<<CS12) | (1<<CS10); // set clock/prescaler 1/1024 -> enable counter
TCCR1B = (1<<ICNC1) | (1<<CS11); // | (1<<CS12) | (1<<CS10); // set clock/prescaler 1/1024 -> enable counter
// aktiviere Kanal A+B auf PWM3 mit 8Bit
TCCR3A = (1<< COM3A1) | (1<< COM3B1) | (1<< WGM10);
TCCR3B = (1<<ICNC3) | (1<<CS32) | (1<<CS30); // set clock/prescaler 1/1024 -> enable counter
TCCR3B = (1<<ICNC3) | (1<<CS31); // | (1<<CS32) | (1<<CS30); // set clock/prescaler 1/1024 -> enable counter
// Schalte Motoren auf 0
motor(0,0);
@ -49,8 +49,11 @@ Board::Board() {
PORTE &= ~(1 << PE6); // Pin2 low
PORTA |= (1 << PA2); // Pin1 high
// Uart-Interface einschalten
uart1_init( 10); // 9600 BAUD bei 16MHz Atmel
// Dribbler-richtung einstellen
DRIBBLER_PORT |= DRIBBLER_A; // Pin1 high
DRIBBLER_PORT &= ~DRIBBLER_B; // Pin2 low
// aktiviere interrupt
sei();
@ -202,27 +205,6 @@ void Board::motor(int i, int speed)
MOTOR2_PORT |= MOTOR2_A;//In 1 ein
}
}
else if(i == 3) // Dribbler... hier haben wir kein PWM
{
if(speed > 0)
{
DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein
DRIBBLER_PORT &= ~DRIBBLER_B;//In 2 aus
DRIBBLER_PWMPORT |= DRIBBLER_PWM;
}
else if(speed < 0)
{
DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein
DRIBBLER_PORT &= ~DRIBBLER_A;//In 1 aus
DRIBBLER_PWMPORT |= DRIBBLER_PWM;
}
else
{
DRIBBLER_PORT |= DRIBBLER_B;//In 2 ein
DRIBBLER_PORT |= DRIBBLER_A;//In 1 ein
DRIBBLER_PWMPORT &= ~DRIBBLER_PWM;
}
}
}
void Board::kicker() {
@ -231,6 +213,19 @@ void Board::kicker() {
KICKER_AUS
}
void Board::dribblerOn() {
DRIBBLER_AN
}
void Board::dribblerOff() {
DRIBBLER_AUS
}
void Board::dribbler(bool status) {
if(status) dribblerOn();
else dribblerOff();
}
//PWM routine für den Beeper
ISR (TIMER0_OVF_vect)
{

View file

@ -4,7 +4,7 @@
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "uart.h"
//#include "uart.h"
#include "../global.h"
//#define abs(a) ((a < 0)? -a : a)
@ -26,10 +26,12 @@
#define MOTOR2_PWM OCR3A
#define MOTOR2_A (1 << 5)
#define MOTOR2_B (1 << 4)
// Dribbler
#define DRIBBLER_PORT PORTD
#define DRIBBLER_PWMPORT PORTA
#define DRIBBLER_PWM (1 << 5)
#define DRIBBLER_AN PORTA |= (1 << 5);
#define DRIBBLER_AUS PORTA &= ~(1 << 5);
#define DRIBBLER_A (1 << 6)
#define DRIBBLER_B (1 << 7)
@ -62,6 +64,10 @@ public:
void led(bool status);
void motor(int i, int speed);
void kicker();
void dribbler(bool status);
void dribblerOn();
void dribblerOff();
};
#endif

View file

@ -1,7 +1,8 @@
#include "keylcd.h"
KeyLCD::KeyLCD() : i2c() {
KeyLCD::KeyLCD() {
// Uart-Interface einschalten
uart1_init( 103); // 9600 BAUD bei 16MHz Atmel
}
KeyLCD::~KeyLCD() {
@ -10,12 +11,7 @@ KeyLCD::~KeyLCD() {
// Gibt Daten auf dem keyLCD aus
void KeyLCD::print(char *data) {
int len=strlen(data);
uint8_t buf[len+1];
for (int i=0; i<len; i++) buf[i] = uint8_t(data[i]);
i2c.send(I2C_KEYLCD, buf, len);
uart1_puts(data);
}
// Löscht das keyLCD
@ -23,6 +19,3 @@ void KeyLCD::clear() {
}
uint8_t KeyLCD::error() {
return i2c.error();
}

View file

@ -1,22 +1,18 @@
#ifndef _KEYLCD_H_
#define _KEYLCD_H_
#include "i2c.h"
//#include "i2c.h"
#include "string.h"
#define I2C_KEYLCD 2
#define LCD_CMD_PRINTSTR 0
#include "uart.h"
class KeyLCD
{
private:
I2C i2c;
public:
KeyLCD();
~KeyLCD();
void print(char* data);
uint8_t error();
void clear();
};

View file

@ -26,18 +26,18 @@ void Navigation::SetzeGeschwindigkeit(int nGeschwindigkeit) {
// Aktualieren ohne Parameter
void Navigation::Aktualisieren() {
void Navigation::Aktualisieren() {
// Richtung in x und y-Kompontente zerlegen
double y = cos(richtung); // richtung ist winkel
double x = sin(richtung);
double y = cos((double)richtung*0.01745); // richtung ist winkel
double x = sin((double)richtung*0.01745);
// Abweichung der Ausrichtung ermitteln(als winkel)
int w = sensor.GetAusrichtung() - ausrichtung;
// Stärke der einzelnen Motoren berechnen
double v0 = (-x-sqrt(3)*y)/2;
double v0 = (-x+sqrt(3)*y)/2;
double v1 = x;
double v2 = (-x+sqrt(3)*y)/2;
double v2 = (-x-sqrt(3)*y)/2;
// Ausgerechnete Stärke an die Motoren übergeben
board.motor(0,(int)((double)v0*geschwindigkeit +w));