/trunk/main.c |
---|
107,8 → 107,8 |
int16_t Heading = -1; // the current compass heading in deg |
int16_t ZeroHeading = 180; |
unsigned char InternalCalstate = 0, ActualCalstate = 0; |
signed char PotiToFC[8] = {10,20,30,40,50,60,70,80}; |
uint8_t InternalCalstate = 0, ActualCalstate = 0; |
int8_t PotiToFC[8] = {10,20,30,40,50,60,70,80}; |
void CalcFields(void) |
{ |
369,7 → 369,7 |
DebugOut.Analog[6] = I2C_WriteAttitude.Nick; |
DebugOut.Analog[7] = I2C_WriteAttitude.Roll; |
break; |
default: |
default: |
DebugOut.Analog[6] = -1; |
DebugOut.Analog[7] = -1; |
break; |
415,22 → 415,22 |
#ifdef HEADTRACKER |
void CalcFcPotis(void) |
{ |
signed int tmp0, tmp1, tmp2; |
if(AccPresent) |
{ |
tmp0 = AccAttitudeNick/4; |
tmp1 = AccAttitudeRoll/4; |
int16_t tmp0, tmp1, tmp2; |
if(AccPresent) |
{ |
tmp0 = AccAttitudeNick/4; |
tmp1 = AccAttitudeRoll/4; |
tmp2 = (360 + Heading - ZeroHeading) % 360; |
tmp2 /= 2; |
tmp2 -= 90; |
if(tmp0 > 127) tmp0 = 127; else if(tmp0 < -127) tmp0 = -127; |
if(tmp1 > 127) tmp1 = 127; else if(tmp1 < -127) tmp1 = -127; |
if(tmp2 > 127) tmp2 = 127; else if(tmp2 < -127) tmp2 = -127; |
PotiToFC[0] = tmp0; |
PotiToFC[1] = tmp1; |
PotiToFC[2] = tmp2; |
} |
tmp2 = (360 + Heading - ZeroHeading) % 360; |
tmp2 /= 2; |
tmp2 -= 90; |
if(tmp0 > 127) tmp0 = 127; else if(tmp0 < -127) tmp0 = -127; |
if(tmp1 > 127) tmp1 = 127; else if(tmp1 < -127) tmp1 = -127; |
if(tmp2 > 127) tmp2 = 127; else if(tmp2 < -127) tmp2 = -127; |
PotiToFC[0] = tmp0; |
PotiToFC[1] = tmp1; |
PotiToFC[2] = tmp2; |
} |
} |
#endif |
459,7 → 459,7 |
USART0_Print("ACC present\n"); |
} |
#ifdef HEADTRACKER |
else USART0_Print("\nERROR: NO ACC\n"); |
else USART0_Print("\nERROR: NO ACC\n"); |
#endif |
LED_GRN_ON; |
472,7 → 472,7 |
InternalCalstate = 0; |
ExternData.CalState = 0; |
I2C_WriteCal.CalByte = 0; |
ActualCalstate = 0; |
ActualCalstate = 0; |
statetimer = SetDelay(0); |
// main loop |
while (1) |
521,8 → 521,8 |
state = 0; |
CalcFields(); |
// check both sources of communication for calibration request |
if(InternalCalstate) ActualCalstate = InternalCalstate; |
else |
if(InternalCalstate) ActualCalstate = InternalCalstate; |
else |
if(I2C_WriteCal.CalByte) ActualCalstate = I2C_WriteCal.CalByte; |
else ActualCalstate = ExternData.CalState; |
if(ActualCalstate) Calibrate(); |
532,7 → 532,7 |
if(PC_Connected) PC_Connected--; |
// fall back to attitude estimation from onboard acc sensor if NC or FC does'nt send attitude data |
#ifdef HEADTRACKER |
CalcFcPotis(); |
CalcFcPotis(); |
if(AccPresent) AttitudeSource = ATTITUDE_SOURCE_ACC; |
#else |
if(!FC_Connected && ! NC_Connected) |
/trunk/main.h |
---|
1,7 → 1,6 |
#ifndef _MAIN_H_ |
#define _MAIN_H_ |
#define HEADTRACKER |
#include <avr/eeprom.h> |
#include <inttypes.h> |
27,10 → 26,10 |
extern AttitudeSource_t AttitudeSource; |
extern Orientation_t Orientation; |
extern unsigned char InternalCalstate, ActualCalstate; |
extern uint8_t InternalCalstate, ActualCalstate; |
extern int16_t MagX, MagY, MagZ; |
extern signed char PotiToFC[8]; |
extern int8_t PotiToFC[8]; |
void SetDebugValues(void); |
/trunk/makefile |
---|
5,6 → 5,8 |
#------------------------------------------------------------------- |
#BOARD = 10 |
BOARD = 11 |
#OPTION = HEADTRACKER |
VERSION_MAJOR = 0 |
VERSION_MINOR = 23 |
VERSION_PATCH = 0 |
105,8 → 107,8 |
CFLAGS += $(CDEFS) |
CFLAGS += -DVERSION_MAJOR=$(VERSION_MAJOR) -DVERSION_MINOR=$(VERSION_MINOR) -DVERSION_PATCH=$(VERSION_PATCH) -DVERSION_SERIAL_MAJOR=$(VERSION_SERIAL_MAJOR) -DVERSION_SERIAL_MINOR=$(VERSION_SERIAL_MINOR) -DBOARD=$(BOARD) -DNC_I2C_COMPATIBLE=$(NC_I2C_COMPATIBLE) |
ifeq ($(AVR_CTRL_PLATINE), 1) |
CFLAGS += -DAVR_CTRL_PLATINE=$(AVR_CTRL_PLATINE) |
ifeq ($(OPTION), HEADTRACKER) |
CFLAGS += -DHEADTRACKER |
endif |
/trunk/menu.c |
---|
64,15 → 64,15 |
// print menu item number in the upper right corner |
if(MenuItem < 10) |
{ |
LCD_printfxy(17,0,"[%i]",MenuItem); |
LCD_printfxy(17,0,"[%i]",MenuItem); |
} |
else |
{ |
LCD_printfxy(16,0,"[%i]",MenuItem); |
LCD_printfxy(16,0,"[%i]",MenuItem); |
} |
switch(MenuItem) |
{ |
case 0:// Version Info Menu Item |
case 0:// Version Info Menu Item |
LCD_printfxy(0,0,"++ MK3MAG ++ "); |
LCD_printfxy(0,1," V %d.%d%c", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH + 'a'); |
if(AccPresent) |
107,7 → 107,7 |
{ |
default: |
case 0: LCD_printfxy(0,2," -- "); break; |
case 3: |
case 3: |
case 1: LCD_printfxy(0,2," pause "); break; |
case 2: LCD_printfxy(0,2,"measure horizontal"); break; |
case 4: LCD_printfxy(0,2,"measure vertical"); break; |
115,14 → 115,14 |
} |
if(!ActualCalstate) LCD_printfxy(13,3,"(start)") |
else LCD_printfxy(9,3,"(ESC)(step)"); |
if(RemoteKeys & KEY4) InternalCalstate++; |
if(RemoteKeys & KEY4) InternalCalstate++; |
if(ActualCalstate >= 5 || (RemoteKeys & KEY3)) InternalCalstate = 0; |
break; |
default: |
MaxMenuItem = MenuItem - 1; |
MenuItem = 0; |
break; |
} |
RemoteKeys = 0; |
default: |
MaxMenuItem = MenuItem - 1; |
MenuItem = 0; |
break; |
} |
RemoteKeys = 0; |
} |
/trunk/uart.c |
---|
247,10 → 247,10 |
USART0_putchar ('0' + VERSION_MINOR/10); |
USART0_putchar ('0' + VERSION_MINOR%10); |
USART0_putchar ('a' + VERSION_PATCH); |
USART0_putchar ('\n'); |
USART0_putchar ('\n'); |
// restore global interrupt flags |
SREG = sreg; |
// restore global interrupt flags |
SREG = sreg; |
} |
// --------------------------------------------------------------------------------- |
267,7 → 267,7 |
void USART0_DisableTXD(void) |
{ |
while(!txd_complete){ }; |
//changing the interrupt flag yields to strange effects |
//changing the interrupt flag yields to strange effects |
//UCSR0B &= ~(1 << TXCIE0); // disable TX-Interrupt |
UCSR0B &= ~(1 << TXEN0); // disable TX in USART |
DDRD &= ~(1<<DDD1); // set TXD pin as input |