/branches/V0.68d Code Redesign killagreg/fc.c |
---|
64,12 → 64,7 |
#include "uart.h" |
#include "rc.h" |
#include "twimaster.h" |
#ifdef USE_MM3 |
#include "mm3.h" |
#endif |
#ifdef USE_CMPS03 |
#include "cmps03.h" |
#endif |
volatile uint16_t I2CTimeout = 100; |
// gyro readings |
99,8 → 94,8 |
volatile int32_t Reading_Integral_Top = 0; |
// compass course |
volatile int16_t CompassHeading = -1; // negative angle indicates invalid data. |
volatile int16_t CompassCourse = -1; |
volatile int16_t CompassHeading = 0; |
volatile int16_t CompassCourse = 0; |
volatile int16_t CompassOffCourse = 0; |
// flags |
1020,13 → 1015,7 |
{ |
updCompass = 49; // update only at 2ms*50 = 100ms (10Hz) |
// get current compass heading (angule between MK head and magnetic north) |
#ifdef USE_MM3 |
CompassHeading = MM3_Heading(); |
#endif |
#ifdef USE_CMPS03 |
CompassHeading = CMPS03_Heading(); |
#endif |
if (CompassHeading < 0) // no compass data available |
{ |
CompassOffCourse = 0; |
/branches/V0.68d Code Redesign killagreg/main.c |
---|
66,12 → 66,7 |
#include "analog.h" |
#include "printf_P.h" |
//#include "spi.h" |
#ifdef USE_MM3 |
#include "mm3.h" |
#endif |
#ifdef USE_CMPS03 |
#include "cmps03.h" |
#endif |
#include "twimaster.h" |
#include "eeprom.h" |
#include "_Settings.h" |
95,7 → 90,7 |
DDRB = 0x00; |
PORTB = 0x00; |
for(timer = 0; timer < 1000; timer++); // make some delay |
if(PINB & (1<<PINB1)) BoardRelease = 11; |
if(PINB & 0x01) BoardRelease = 11; |
else BoardRelease = 10; |
// set LED ports as output |
126,21 → 121,13 |
TIMER0_Init(); |
TIMER2_Init(); |
USART0_Init(); |
#if defined (__AVR_ATmega644p__) |
if (BoardRelease == 11) USART1_Init(); |
#endif |
#if defined (__AVR_ATmega644p__) |
if (BoardRelease != 10) USART1_Init(); |
#endif |
RC_Init(); |
ADC_Init(); |
I2C_Init(); |
#ifdef USE_MM3 |
MM3_Init(); |
#endif |
#ifdef USE_CMPS03 |
CMPS03_Init(); |
#endif |
//SPI_MasterInit(); |
// enable interrupts global |
166,9 → 153,6 |
timer = SetDelay(500); |
while(!CheckDelay(timer)); |
#ifdef USE_MM3 |
printf("\n\rSupport for Compass Module MM3"); |
//Compass calibration? |
if(PPM_in[ParamSet.ChannelAssignment[CH_THRUST]] > 100 && PPM_in[ParamSet.ChannelAssignment[CH_YAW]] > 100) |
{ |
175,10 → 159,6 |
printf("\n\rCalibrating Compass"); |
MM3_Calibrate(); |
} |
#endif |
#ifdef USE_CMPS03 |
printf("\n\rSupport for Compass Module CMPS03"); |
#endif |
if(ParamSet.GlobalConfig & CFG_HEIGHT_CONTROL) |
/branches/V0.68d Code Redesign killagreg/makefile |
---|
1,7 → 1,6 |
#-------------------------------------------------------------------- |
# MCU name |
#MCU = atmega644 |
MCU = atmega644p |
MCU = atmega644p |
F_CPU = 20000000 |
#------------------------------------------------------------------- |
VERSION_MAJOR = 0 |
10,11 → 9,13 |
VERSION_COMPATIBLE = 7 # PC-Kompatibilität |
#------------------------------------------------------------------- |
#OPTIONS |
COMPASS = MM3 |
#COMPASS = CMPS03 |
#------------------------------------------------------------------- |
ifeq ($(MCU), atmega32) |
# FUSE_SETTINGS= -u -U lfuse:w:0xff:m -U hfuse:w:0xcf:m |
HEX_NAME = MEGA32 |
endif |
ifeq ($(MCU), atmega644) |
FUSE_SETTINGS = -u -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
#FUSE_SETTINGS = -U lfuse:w:0xff:m -U hfuse:w:0xdf:m |
36,16 → 37,7 |
QUARZ = 20MHZ |
endif |
ifeq ($(COMPASS), MM3) |
HEX_NAME +=MM3 |
CFLAGS += -DUSE_MM3 |
endif |
ifeq ($(COMPASS), CMPS03) |
HEX_NAME +=CMPS03 |
CFLAGS += -DUSE_CMPS03 |
endif |
# Output format. (can be srec, ihex, binary) |
FORMAT = ihex |
83,13 → 75,7 |
########################################################################################################## |
# List C source files here. (C dependencies are automatically generated.) |
SRC = main.c uart.c printf_P.c timer0.c timer2.c analog.c menu.c |
SRC += twimaster.c rc.c fc.c GPS.c spi.c eeprom.c |
ifeq ($(COMPASS), MM3) |
SRC +=mm3.c |
endif |
ifeq ($(COMPASS), CMPS03) |
SRC +=cmps03.c |
endif |
SRC += twimaster.c rc.c fc.c GPS.c spi.c eeprom.c mm3.c |
SRC += mymath.c ubx.c fifo.c |
ifeq ($(MCU), atmega644p) |
SRC += uart1.c |
137,15 → 123,7 |
CFLAGS += -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_COMPATIBLE=$(VERSION_COMPATIBLE) -DVERSION_INDEX=$(VERSION_INDEX) |
ifeq ($(COMPASS), MM3) |
CFLAGS += -DUSE_MM3 |
endif |
ifeq ($(COMPASS), CMPS03) |
CFLAGS += -DUSE_CMPS03 |
endif |
# Optional assembler flags. |
# -Wa,...: tell GCC to pass this to the assembler. |
# -ahlms: create listing |
/branches/V0.68d Code Redesign killagreg/menu.c |
---|
15,9 → 15,7 |
#include "uart.h" |
#include "printf_P.h" |
#include "analog.h" |
#ifdef USE_MM3 |
#include "mm3.h" |
#endif |
#include "ubx.h" |
#include "_Settings.h" |
51,13 → 49,8 |
// Display with 20 characters in 4 lines |
void LCD_PrintMenu(void) |
{ |
#ifdef USE_MM3 |
static uint8_t MaxMenuItem = 14; |
#else |
static uint8_t MaxMenuItem = 12; |
#endif |
static uint8_t MaxMenuItem = 14, MenuItem=0; |
static uint8_t MenuItem=0; |
// if KEY1 is activated goto previous menu item |
if(RemoteButtons & KEY1) |
{ |
178,7 → 171,19 |
LCD_printfxy(0,2,"Gs:%4i Ya:%4i ",ExternControl.Thrust, ExternControl.Yaw); |
LCD_printfxy(0,3,"Hi:%4i Cf:%4i ",ExternControl.Hight, ExternControl.Config); |
break; |
case 12://GPS Lat/Lon coords |
case 12:// MM3 Kompass |
LCD_printfxy(0,0,"MM3 Offset"); |
LCD_printfxy(0,1,"X_Offset: %3i",MM3_calib.X_off); |
LCD_printfxy(0,2,"Y_Offset: %3i",MM3_calib.Y_off); |
LCD_printfxy(0,3,"Z_Offset: %3i",MM3_calib.Z_off); |
break; |
case 13://MM3 Range |
LCD_printfxy(0,0,"MM3 Range"); |
LCD_printfxy(0,1,"X_Range: %4i",MM3_calib.X_range); |
LCD_printfxy(0,2,"Y_Range: %4i",MM3_calib.Y_range); |
LCD_printfxy(0,3,"Z_Range: %4i",MM3_calib.Z_range); |
break; |
case 14://GPS Lat/Lon coords |
if (GPSInfo.status == INVALID) |
{ |
LCD_printfxy(0,0,"No data available!"); |
205,20 → 210,6 |
LCD_printfxy(0,3,"Alt: %d.%d m",GPSInfo.altitude/1000L,GPSInfo.altitude%1000L); |
} |
break; |
#ifdef USE_MM3 |
case 13:// MM3 Kompass |
LCD_printfxy(0,0,"MM3 Offset"); |
LCD_printfxy(0,1,"X_Offset: %3i",MM3_calib.X_off); |
LCD_printfxy(0,2,"Y_Offset: %3i",MM3_calib.Y_off); |
LCD_printfxy(0,3,"Z_Offset: %3i",MM3_calib.Z_off); |
break; |
case 14://MM3 Range |
LCD_printfxy(0,0,"MM3 Range"); |
LCD_printfxy(0,1,"X_Range: %4i",MM3_calib.X_range); |
LCD_printfxy(0,2,"Y_Range: %4i",MM3_calib.Y_range); |
LCD_printfxy(0,3,"Z_Range: %4i",MM3_calib.Z_range); |
break; |
#endif |
default: MaxMenuItem = MenuItem - 1; |
MenuItem = 0; |
break; |
/branches/V0.68d Code Redesign killagreg/mm3.c |
---|
62,7 → 62,7 |
MM3_calib_t MM3_calib; |
volatile MM3_working_t MM3; |
volatile uint8_t MM3_Timeout = 0; |
static volatile uint8_t MM3_Timeout = 0; |
118,7 → 118,7 |
/*********************************************/ |
/* Get Data from MM3 */ |
/*********************************************/ |
void MM3_Update(void) // called every 102.4 µs by timer 0 ISR |
void MM3_Update() // called every 102.4 µs by timer 0 ISR |
{ |
switch (MM3.STATE) |
{ |
/branches/V0.68d Code Redesign killagreg/mm3.h |
---|
17,15 → 17,13 |
// Initialization of the MM3 communication |
void MM3_Init(void); |
// should be called cyclic to get actual compass reading |
void MM3_Update(void); |
// this function calibrates the MM3 |
// and returns immediately if the communication to the MM3-Board is broken. |
void MM3_Calibrate(void); |
// calculates the current compass heading in a range from 0 to 360 deg. |
// returns -1 if no compass data are available |
// returns -1 of no compass data are available |
int16_t MM3_Heading(void); |
#endif //_MM3_H |
/branches/V0.68d Code Redesign killagreg/timer0.c |
---|
5,12 → 5,7 |
#include "analog.h" |
#include "main.h" |
#include "fc.h" |
#ifdef USE_MM3 |
#include "mm3.h" |
#endif |
#ifdef USE_CMPS03 |
#include "cmps03.h" |
#endif |
volatile uint16_t CountMilliseconds = 0; |
volatile uint8_t UpdateMotor = 0; |
143,12 → 138,7 |
// update compass value if this option is enabled in the settings |
if(ParamSet.GlobalConfig & CFG_COMPASS_ACTIVE) |
{ |
#ifdef USE_MM3 |
MM3_Update(); // read out mm3 board |
#endif |
#ifdef USE_CMPS03 |
CMPS03_Update(); // read out cmps03 pwm |
#endif |
} |
} |
/branches/V0.68d Code Redesign killagreg/uart.c |
---|
18,12 → 18,6 |
#include "_Settings.h" |
#include "rc.h" |
#if defined (__AVR_ATmega644__) |
#include "ubx.h" |
#endif |
#define FALSE 0 |
#define TRUE 1 |
186,11 → 180,6 |
c = UDR0; // catch the received byte |
// If the ATMEGA644 cpu is used the ublox module should be conneced to rxd of the 1st uart. |
// The ATMEGA644p cpu has a 2nd uart to which the ublox is connected. |
#if defined (__AVR_ATmega644__) |
ubx_parser(c); |
#endif |
if(rxd_buffer_locked) return; // if txd buffer is locked immediately return |