Subversion Repositories NaviCtrl

Rev

Rev 487 | Rev 500 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 487 Rev 489
Line 54... Line 54...
54
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
54
// + Note: For information on license extensions (e.g. commercial use), please contact us at info(@)hisystems.de.
55
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
55
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Line 56... Line 56...
56
 
56
 
57
#include <string.h>
57
#include <string.h>
-
 
58
#include <math.h>
58
#include <math.h>
59
#include <stdlib.h>
59
#include "91x_lib.h"
60
#include "91x_lib.h"
60
#include "led.h"
61
#include "led.h"
61
#include "gps.h"
62
#include "gps.h"
62
#include "uart1.h"
63
#include "uart1.h"
63
#include "spi_slave.h"
64
#include "spi_slave.h"
64
#include "compass.h"
65
#include "compass.h"
65
#include "timer1.h"
66
#include "timer1.h"
66
#include "timer2.h"
67
#include "timer2.h"
67
#include "config.h"
68
#include "config.h"
68
#include "main.h"
-
 
69
#include "compass.h"
69
#include "main.h"
70
#include "params.h"
-
 
71
#include "stdlib.h"
70
#include "params.h"
72
#include "settings.h"
-
 
Line 73... Line 71...
73
#include "ncmag.h"
71
#include "settings.h"
74
 
72
 
75
#define SPI_RXSYNCBYTE1 0xAA
73
#define SPI_RXSYNCBYTE1 0xAA
76
#define SPI_RXSYNCBYTE2 0x83
74
#define SPI_RXSYNCBYTE2 0x83
Line 124... Line 122...
124
u32 FC_I2C_ErrorConter;
122
u32 FC_I2C_ErrorConter;
125
SPI_Version_t FC_Version;
123
SPI_Version_t FC_Version;
126
s16 POI_KameraNick = 0;
124
s16 POI_KameraNick = 0;
127
u8 NC_Wait_for_LED = 0;
125
u8 NC_Wait_for_LED = 0;
128
s16 GyroCompassCorrected = 0; // corrected with the magnetic declination
126
s16 GyroCompassCorrected = 0; // corrected with the magnetic declination
129
u8 FromFC_LowVoltageHomeActive = 0;
-
 
Line 130... Line 127...
130
 
127
 
131
//--------------------------------------------------------------
128
//--------------------------------------------------------------
132
void SSP0_IRQHandler(void)
129
void SSP0_IRQHandler(void)
133
{
130
{
Line 590... Line 587...
590
                                        if(FCCalibActive)
587
                                        if(FCCalibActive)
591
                                         {
588
                                        {
592
                                            if(--FCCalibActive == 0)
589
                                                if(--FCCalibActive == 0)
593
                                                 {
590
                                                {
594
                                                  FC_is_Calibrated = 1;
591
                                                        FC_is_Calibrated = 1;
595
                                                  ExtCompassOrientation = GetExtCompassOrientation();
592
                                                        Compass_Check();
596
if(ExtCompassOrientation != Calibration.Version / 16) NCMAG_IsCalibrated = 0;
-
 
597
                                                 }
593
                                                }
598
                                         }
594
                                        }
599
                                }
595
                                }
600
                                if(FC.StatusFlags & FC_STATUS_START)
596
                                if(FC.StatusFlags & FC_STATUS_START)
601
                             {
597
                                {
Line 613... Line 609...
613
                                         }
609
                                                }
614
                                         else                                                                                            // Ansonsten die aktuelle Richtung übernehmen
610
                                                else                                                                                             // Ansonsten die aktuelle Richtung übernehmen
615
                                          HeadFreeStartAngle = GyroCompassCorrected; // in 0.1°   
611
                                                HeadFreeStartAngle = GyroCompassCorrected; // in 0.1°
616
                                        }
612
                                        }
617
                                }
613
                                }
-
 
614
 
618
                                Parameter.ActiveSetting = FromFlightCtrl.Param.Byte[9];
615
                                Parameter.ActiveSetting = FromFlightCtrl.Param.Byte[9];
619
                                FC.BAT_Voltage = FromFlightCtrl.Param.Byte[10];
616
                                FC.BAT_Voltage = FromFlightCtrl.Param.Byte[10];
620
                                DebugOut.Analog[7] = FC.BAT_Voltage;
617
                                DebugOut.Analog[7] = FC.BAT_Voltage;
621
                                DebugOut.Analog[5] = FC.StatusFlags;
618
                                DebugOut.Analog[5] = FC.StatusFlags;
622
                                NaviData.FCStatusFlags = FC.StatusFlags;
619
                                NaviData.FCStatusFlags = FC.StatusFlags;
Line 672... Line 669...
672
                        case SPI_FCCMD_PARAMETER2:
669
                        case SPI_FCCMD_PARAMETER2:
673
                                CHK_POTI_MM(Parameter.NaviOut1Parameter,FromFlightCtrl.Param.Byte[0],0,255);
670
                                CHK_POTI_MM(Parameter.NaviOut1Parameter,FromFlightCtrl.Param.Byte[0],0,255);
674
                                if(FromFlightCtrl.Param.Byte[1]) FC.FromFC_SpeakHoTT = FromFlightCtrl.Param.Byte[1];     // will be cleared in the SD-Logging
671
                                if(FromFlightCtrl.Param.Byte[1]) FC.FromFC_SpeakHoTT = FromFlightCtrl.Param.Byte[1];     // will be cleared in the SD-Logging
675
                Parameter.FromFC_LandingSpeed = FromFlightCtrl.Param.Byte[2];
672
                Parameter.FromFC_LandingSpeed = FromFlightCtrl.Param.Byte[2];
676
                                Parameter.ComingHomeAltitude = FromFlightCtrl.Param.Byte[3];
673
                                Parameter.ComingHomeAltitude = FromFlightCtrl.Param.Byte[3];
677
                                FromFC_LowVoltageHomeActive = FromFlightCtrl.Param.Byte[4];
674
                                Parameter.FromFC_LowVoltageHomeActive = FromFlightCtrl.Param.Byte[4];
678
                                break;
675
                                break;
679
                        case SPI_FCCMD_STICK:
676
                        case SPI_FCCMD_STICK:
680
                                FC.StickGas     = FromFlightCtrl.Param.sByte[0];
677
                                FC.StickGas     = FromFlightCtrl.Param.sByte[0];
681
                                FC.StickYaw     = FromFlightCtrl.Param.sByte[1];
678
                                FC.StickYaw     = FromFlightCtrl.Param.sByte[1];
682
                                FC.StickRoll    = FromFlightCtrl.Param.sByte[2];
679
                                FC.StickRoll    = FromFlightCtrl.Param.sByte[2];
Line 742... Line 739...
742
                                FC.Error[0]                     |= FromFlightCtrl.Param.Byte[5];
739
                                FC.Error[0]                     |= FromFlightCtrl.Param.Byte[5];
743
                                FC.Error[1]                     |= FromFlightCtrl.Param.Byte[6];
740
                                FC.Error[1]                     |= FromFlightCtrl.Param.Byte[6];
744
                                if(FromFlightCtrl.Param.Byte[7] >= 68 && FromFlightCtrl.Param.Byte[7] <= 188)
741
                                if(FromFlightCtrl.Param.Byte[7] >= 68 && FromFlightCtrl.Param.Byte[7] <= 188)
745
                                {
742
                                {
746
                                 FC.FromFC_DisableDeclination = 1;
743
                                        FC.FromFC_DisableDeclination = 1;
747
                                 FC.FromFC_CompassOffset = 10 * (signed char) ((unsigned char) FromFlightCtrl.Param.Byte[7] - 128);
744
                                        FC.FromFC_CompassOffset = 10 * (s8) (FromFlightCtrl.Param.Byte[7] - 128);
748
                                 GeoMagDec = 0;
745
                                        GeoMagDec = 0;
749
                                }
746
                                }
750
                                else
747
                                else
751
                                {
748
                                {
752
                                 FC.FromFC_DisableDeclination = 0;
749
                                        FC.FromFC_DisableDeclination = 0;
753
                                 FC.FromFC_CompassOffset = 10 * (signed char) FromFlightCtrl.Param.Byte[7];
750
                                        FC.FromFC_CompassOffset = 10 * FromFlightCtrl.Param.sByte[7];
754
                                }
751
                                }
755
                                Parameter.GlobalConfig = FromFlightCtrl.Param.Byte[8];
752
                                Parameter.GlobalConfig = FromFlightCtrl.Param.Byte[8];
756
                                Parameter.ExtraConfig = FromFlightCtrl.Param.Byte[9];
753
                                Parameter.ExtraConfig = FromFlightCtrl.Param.Byte[9];
757
                                Parameter.OrientationAngle = FromFlightCtrl.Param.Byte[10];
754
                                Parameter.OrientationAngle = FromFlightCtrl.Param.Byte[10];
758
                                Parameter.GlobalConfig3 = FromFlightCtrl.Param.Byte[11];
755
                                Parameter.GlobalConfig3 = FromFlightCtrl.Param.Byte[11];
Line 818... Line 815...
818
                        SPI0_UpdateBuffer();
815
                        SPI0_UpdateBuffer();
819
                        if (FC_Version.Major != 0xFF)  break;
816
                        if (FC_Version.Major != 0xFF)  break;
820
                }while (!CheckDelay(timeout));
817
                }while (!CheckDelay(timeout));
821
                UART1_PutString(".");
818
                UART1_PutString(".");
822
                repeat++;
819
                repeat++;
823
//              FCCalibActive = 1;
820
                FCCalibActive = 1;
824
        }while((FC_Version.Major == 0xFF) && (repeat < 40)); // 40*250ms = 10s
821
        }while((FC_Version.Major == 0xFF) && (repeat < 40)); // 40*250ms = 10s
825
        // if we got it
822
        // if we got it
826
        if (FC_Version.Major != 0xFF)
823
        if (FC_Version.Major != 0xFF)
827
        {
824
        {
828
                sprintf(msg, " FC V%d.%02d%c HW:%d.%d", FC_Version.Major, FC_Version.Minor, 'a'+FC_Version.Patch, FC_Version.Hardware/10,FC_Version.Hardware%10);
825
                sprintf(msg, " FC V%d.%d%c HW:%d.%02d", FC_Version.Major, FC_Version.Minor, 'a'+FC_Version.Patch, FC_Version.Hardware/10,FC_Version.Hardware%10);
829
                UART1_PutString(msg);
826
                UART1_PutString(msg);
830
        }
827
        }
831
        else UART1_PutString("\n\r not found!");
828
        else UART1_PutString("\n\r not found!");
832
}
829
}
Line -... Line 830...
-
 
830
 
-
 
831
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
832
// + extended Current measurement -> 200 = 20A    201 = 21A    255 = 75A (20+55)
-
 
833
// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
 
834
u16 BL3_Current(u8 who) // in 0,1A
-
 
835
{
-
 
836
        if(Motor[who].Current <= 200) return((u16) Motor[who].Current);
-
 
837
        else
-
 
838
        {
-
 
839
                if(Motor_Version[who] & MOTOR_STATE_BL30) return(200 + 10 * (u16) (Motor[who].Current - 200));
-
 
840
                else return((u16) Motor[who].Current);
-
 
841
        }