Subversion Repositories MK3Mag

Compare Revisions

Ignore whitespace Rev 68 → Rev 69

/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