Subversion Repositories FlightCtrl

Rev

Rev 2248 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*****************************************************************************************************************************
* File:                 eeprom.c
*
* Purpose:              storing or loading the EEPROM values to RAM or writing them to EE_Parameter
*
* Functions:    void DefaultStickMapping(void)                  // stick setting at RC control for incoming sum signal chain
*                               void DefaultKonstanten3(void)                   //      
*                               void DefaultKonstanten2(void)                   //
*                               void DefaultKonstanten1(void)                   //
*                               void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
*                               void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
*                               unsigned char GetActiveParamSetNumber(void)
*                               void SetActiveParamSetNumber(unsigned char number)
*
*****************************************************************************************************************************/

#include "eeprom.h"


unsigned char EEPromArray[E2END+1] EEMEM;               //              E2END = 2047
// wird im EEPROM deklariert
// in den I/O-Headern wird die letzte EEPROM-Adresse als E2END definiert
// #define EEMEM __attribute__ ((section (".eeprom")))
// EEPROM Size = 2 Kbytes // Page Size = 8 bytes // No. of Pages = 256 // siehe Atmega644 manual S287


// ---------------------------------------------------------------------------------------------------------------------------
// + Konstanten
// + 0-250 -> normale Werte
// + 251 -> Poti1
// + 252 -> Poti2
// + 253 -> Poti3
// ---------------------------------------------------------------------------------------------------------------------------


//-----------------------------------------------------------------------------------------------------------------------------
//      stick setting at RC control for incoming sum signal chain
//-----------------------------------------------------------------------------------------------------------------------------
void DefaultStickMapping(void)                                          // remote control is set to mode 2
{
        EE_Parameter.Kanalbelegung[K_NICK]  = 3;                // #define K_NICK    0  // Koptertool -> Einstellungen -> Kanäle -> "NICK"
        EE_Parameter.Kanalbelegung[K_ROLL]  = 2;                // #define K_ROLL    1  // Koptertool -> Einstellungen -> Kanäle -> "ROLL"
        EE_Parameter.Kanalbelegung[K_GAS]   = 1;                // #define K_GAS     2  // Koptertool -> Einstellungen -> Kanäle -> "GAS"
        EE_Parameter.Kanalbelegung[K_GIER]  = 4;                // #define K_GIER    3  // Koptertool -> Einstellungen -> Kanäle -> "Gier"
        EE_Parameter.Kanalbelegung[K_POTI1] = 5;                // #define K_POTI1   4  // Koptertool -> Einstellungen -> Kanäle -> "POTI1"
        EE_Parameter.Kanalbelegung[K_POTI2] = 6;                // #define K_POTI2   5  // Koptertool -> Einstellungen -> Kanäle -> "POTI2"
        EE_Parameter.Kanalbelegung[K_POTI3] = 7;                // #define K_POTI3   6  // Koptertool -> Einstellungen -> Kanäle -> "POTI3"
        EE_Parameter.Kanalbelegung[K_POTI4] = 8;                // #define K_POTI4   7  // Koptertool -> Einstellungen -> Kanäle -> "POTI4"
}
//-----------------------------------------------------------------------------------------------------------------------------



//-----------------------------------------------------------------------------------------------------------------------------
void DefaultKonstanten3(void)
{
 EE_Parameter.GlobalConfig = CFG_KOMPASS_AKTIV;
 //
 // #define CFG_HOEHENREGELUNG       0x01
 // #define CFG_HOEHEN_SCHALTER      0x02
 // #define CFG_HEADING_HOLD         0x04
 // #define CFG_KOMPASS_AKTIV        0x08
 // #define CFG_KOMPASS_FIX          0x10
 // #define CFG_GPS_AKTIV            0x20
 // #define CFG_ACHSENKOPPLUNG_AKTIV 0x40
 // #define CFG_DREHRATEN_BEGRENZER  0x80
 
EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;
 //
 // #define CFG2_HEIGHT_LIMIT                   0x01                                    // Koptertool -> Einstellungen -> Höhe -> Höhenregelung aktiv -> "Höhenbegrenzung"
 // #define CFG2_VARIO_BEEP                             0x02                                    // Koptertool -> Einstellungen -> Höhe -> Höhenregelung aktiv -> "akustisches Variometer"
 // #define CFG_SENSITIVE_RC                        0x04                                        // Koptertool -> Einstellungen -> Konfiguration -> "Erweiterte Empfangssignalprüfung"
 // #define CFG_3_3V_REFERENCE                      0x08                                        // Koptertool -> Einstellungen -> Verschiedenes -> "Voltage Reference" 3.0V
 // #define CFG_NO_RCOFF_BEEPING                0x10                                    // Koptertool -> Einstellungen -> Verschiedenes -> "kein Signalton ohne aktiven Empfänger"
 // #define CFG_GPS_AID                                 0x20                                // Koptertool -> ???
 // #define CFG_LEARNABLE_CAREFREE              0x40                                    // Koptertool -> Einstellungen -> Easy Setup -> "Teachable Carefree"
 // #define CFG_IGNORE_MAG_ERR_AT_STARTUP   0x80               
 
 EE_Parameter.Hoehe_MinGas = 30;
 EE_Parameter.MaxHoehe     = 251;                               // Wert : 0-250   251 -> Poti1
 EE_Parameter.Hoehe_P      = 10;                                // Wert : 0-32
 EE_Parameter.Luftdruck_D  = 30;                                // Wert : 0-250
 EE_Parameter.Hoehe_ACC_Wirkung = 30;                           // Wert : 0-250
 EE_Parameter.Hoehe_HoverBand = 5;                              // Wert : 0-250
 EE_Parameter.Hoehe_GPS_Z = 64;                                 // Wert : 0-250
 EE_Parameter.Hoehe_StickNeutralPoint = 0;                      // Wert : 0-250 (0 = Hoover-Estimation)
 EE_Parameter.Hoehe_Verstaerkung = 15;                          // Wert : 0-50
 EE_Parameter.Stick_P = 8;                                      // Wert : 1-6
 EE_Parameter.Stick_D = 16;                                     // Wert : 0-64
 EE_Parameter.Gier_P  = 6;                                      // Wert : 1-20
 EE_Parameter.Gas_Min = 8;                                      // Wert : 0-32
 EE_Parameter.Gas_Max = 230;                                    // Wert : 33-250
 EE_Parameter.GyroAccFaktor = 30;                               // Wert : 1-64
 EE_Parameter.KompassWirkung = 128;                             // Wert : 0-250
 EE_Parameter.Gyro_P = 100;                                     // Wert : 0-250
 EE_Parameter.Gyro_I = 120;                                     // Wert : 0-250
 EE_Parameter.Gyro_D = 3;                                       // Wert : 0-250
 EE_Parameter.Gyro_Gier_P = 100;                                // Wert : 0-250
 EE_Parameter.Gyro_Gier_I = 120;                                // Wert : 0-250
 EE_Parameter.UnterspannungsWarnung = 33;                       // Wert : 0-250         // Automatische Zellenerkennung bei < 50
 EE_Parameter.NotGas = 35;                                      // Wert : 0-250     // Gaswert bei Empangsverlust
 EE_Parameter.NotGasZeit = 20;                                  // Wert : 0-250     // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
 EE_Parameter.UfoAusrichtung = 0;                               // X oder + Formation
 EE_Parameter.I_Faktor = 16;
 
 EE_Parameter.UserParam1 =   0;                                 // zur freien Verwendung
 EE_Parameter.UserParam2 =   0;                                 // zur freien Verwendung
 EE_Parameter.UserParam3 =   0;                                 // zur freien Verwendung
 EE_Parameter.UserParam4 =   0;                                 // zur freien Verwendung
 EE_Parameter.UserParam5 =   0;                                 // zur freien Verwendung
 EE_Parameter.UserParam6 =   0;                                 // zur freien Verwendung
 EE_Parameter.UserParam7 = 0;                                   // zur freien Verwendung
 EE_Parameter.UserParam8 = 0;                                   // zur freien Verwendung
 
 EE_Parameter.ServoNickControl = 100;                           // Wert : 0-250     // Stellung des Servos
 EE_Parameter.ServoNickComp = 40;                               // Wert : 0-250     // Einfluss Gyro/Servo
 EE_Parameter.ServoCompInvert = 1;                              // Wert : 0-250     // Richtung Einfluss Gyro/Servo
 EE_Parameter.ServoNickMin = 0;                                 // Wert : 0-250     // Anschlag
 EE_Parameter.ServoNickMax = 250;                               // Wert : 0-250     // Anschlag
 EE_Parameter.ServoNickRefresh = 6;
 EE_Parameter.ServoRollControl = 100;                           // Wert : 0-250     // Stellung des Servos
 EE_Parameter.ServoRollComp = 40;                               // Wert : 0-250     // Einfluss Gyro/Servo
 EE_Parameter.ServoRollMin = 0;                                 // Wert : 0-250     // Anschlag
 EE_Parameter.ServoRollMax = 250;                               // Wert : 0-250     // Anschlag
 
 EE_Parameter.LoopGasLimit = 50;
 EE_Parameter.LoopThreshold = 90;                               // Wert: 0-250  Schwelle für Stickausschlag
 EE_Parameter.LoopHysterese = 50;
 
 EE_Parameter.BitConfig = 0;                                    // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
 EE_Parameter.AchsKopplung1 = 90;
 EE_Parameter.AchsKopplung2 = 80;
 EE_Parameter.CouplingYawCorrection = 70;
 EE_Parameter.WinkelUmschlagNick = 85;
 EE_Parameter.WinkelUmschlagRoll = 85;
 EE_Parameter.GyroAccAbgleich = 32;        // 1/k
 EE_Parameter.Driftkomp = 32;
 EE_Parameter.DynamicStability = 50;
 EE_Parameter.J16Bitmask = 95;
 EE_Parameter.J17Bitmask = 243;
 EE_Parameter.WARN_J16_Bitmask = 0xAA;
 EE_Parameter.WARN_J17_Bitmask = 0xAA;
 EE_Parameter.J16Timing = 30;
 EE_Parameter.J17Timing = 30;
 
 EE_Parameter.NaviGpsModeControl = 252;
 EE_Parameter.NaviGpsGain = 100;
 EE_Parameter.NaviGpsP = 90;
 EE_Parameter.NaviGpsI = 90;
 EE_Parameter.NaviGpsD = 90;
 EE_Parameter.NaviGpsPLimit = 75;
 EE_Parameter.NaviGpsILimit = 75;
 EE_Parameter.NaviGpsDLimit = 75;
 EE_Parameter.NaviGpsACC = 0;
 EE_Parameter.NaviGpsMinSat = 6;
 EE_Parameter.NaviStickThreshold = 8;
 EE_Parameter.NaviWindCorrection = 90;
 EE_Parameter.NaviSpeedCompensation = 30;
 EE_Parameter.NaviOperatingRadius = 100;
 EE_Parameter.NaviAngleLimitation = 100;
 EE_Parameter.NaviPH_LoginTime = 4;
 memcpy(EE_Parameter.Name, "Beginner\0", 12);
}
//-----------------------------------------------------------------------------------------------------------------------------




//-----------------------------------------------------------------------------------------------------------------------------
void DefaultKonstanten2(void)
{
 EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER;
 EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC
 EE_Parameter.Hoehe_MinGas = 30;
 EE_Parameter.MaxHoehe     = 251;               // Wert : 0-250   251 -> Poti1
 EE_Parameter.Hoehe_P      = 10;                // Wert : 0-32
 EE_Parameter.Luftdruck_D  = 30;                // Wert : 0-250
 EE_Parameter.Hoehe_ACC_Wirkung = 30;           // Wert : 0-250
 EE_Parameter.Hoehe_HoverBand = 5;              // Wert : 0-250
 EE_Parameter.Hoehe_GPS_Z = 64;                 // Wert : 0-250
 EE_Parameter.Hoehe_StickNeutralPoint = 0; // Wert : 0-250 (0 = Hoover-Estimation)
 EE_Parameter.Hoehe_Verstaerkung = 15;          // Wert : 0-50
 EE_Parameter.Stick_P = 10;                     // Wert : 1-6
 EE_Parameter.Stick_D = 16;                     // Wert : 0-64
 EE_Parameter.Gier_P = 6;                       // Wert : 1-20
 EE_Parameter.Gas_Min = 8;                      // Wert : 0-32
 EE_Parameter.Gas_Max = 230;                    // Wert : 33-250
 EE_Parameter.GyroAccFaktor = 30;               // Wert : 1-64
 EE_Parameter.KompassWirkung = 128;             // Wert : 0-250
 EE_Parameter.Gyro_P = 90;                // Wert : 0-250
 EE_Parameter.Gyro_I = 120;               // Wert : 0-250
 EE_Parameter.Gyro_D = 3;                 // Wert : 0-250
 EE_Parameter.Gyro_Gier_P = 90;           // Wert : 0-250
 EE_Parameter.Gyro_Gier_I = 120;          // Wert : 0-250
 EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-250 ( Automatische Zellenerkennung bei < 50)
 EE_Parameter.NotGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
 EE_Parameter.NotGasZeit = 30;            // Wert : 0-250     // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
 EE_Parameter.UfoAusrichtung = 0;         // X oder + Formation
 EE_Parameter.I_Faktor = 32;
 EE_Parameter.UserParam1 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam2 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam3 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam4 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam5 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam6 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam7 = 0;             // zur freien Verwendung
 EE_Parameter.UserParam8 = 0;             // zur freien Verwendung
 EE_Parameter.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
 EE_Parameter.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
 EE_Parameter.ServoCompInvert = 1;        // Wert : 0-250     // Richtung Einfluss Gyro/Servo
 EE_Parameter.ServoNickMin = 0;           // Wert : 0-250     // Anschlag
 EE_Parameter.ServoNickMax = 250;         // Wert : 0-250     // Anschlag
 EE_Parameter.ServoNickRefresh = 6;
 EE_Parameter.ServoRollControl = 100;     // Wert : 0-250     // Stellung des Servos
 EE_Parameter.ServoRollComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
 EE_Parameter.ServoRollMin = 0;           // Wert : 0-250     // Anschlag
 EE_Parameter.ServoRollMax = 250;         // Wert : 0-250     // Anschlag
 EE_Parameter.LoopGasLimit = 50;
 EE_Parameter.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
 EE_Parameter.LoopHysterese = 50;
 EE_Parameter.BitConfig = 0;              // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts
 EE_Parameter.AchsKopplung1 = 90;
 EE_Parameter.AchsKopplung2 = 80;
 EE_Parameter.CouplingYawCorrection = 60;
 EE_Parameter.WinkelUmschlagNick = 85;
 EE_Parameter.WinkelUmschlagRoll = 85;
 EE_Parameter.GyroAccAbgleich = 32;        // 1/k
 EE_Parameter.Driftkomp = 32;
 EE_Parameter.DynamicStability = 75;
 EE_Parameter.J16Bitmask = 95;
 EE_Parameter.J17Bitmask = 243;
 EE_Parameter.WARN_J16_Bitmask = 0xAA;
 EE_Parameter.WARN_J17_Bitmask = 0xAA;
 EE_Parameter.J16Timing = 20;
 EE_Parameter.J17Timing = 20;
 EE_Parameter.NaviGpsModeControl = 252;
 EE_Parameter.NaviGpsGain = 100;
 EE_Parameter.NaviGpsP = 90;
 EE_Parameter.NaviGpsI = 90;
 EE_Parameter.NaviGpsD = 90;
 EE_Parameter.NaviGpsPLimit = 75;
 EE_Parameter.NaviGpsILimit = 75;
 EE_Parameter.NaviGpsDLimit = 75;
 EE_Parameter.NaviGpsACC = 0;
 EE_Parameter.NaviGpsMinSat = 6;
 EE_Parameter.NaviStickThreshold = 8;
 EE_Parameter.NaviWindCorrection = 90;
 EE_Parameter.NaviSpeedCompensation = 30;
 EE_Parameter.NaviOperatingRadius = 100;
 EE_Parameter.NaviAngleLimitation = 100;
 EE_Parameter.NaviPH_LoginTime = 4;
 memcpy(EE_Parameter.Name, "Normal\0", 12);
}
//-----------------------------------------------------------------------------------------------------------------------------



//-----------------------------------------------------------------------------------------------------------------------------
void DefaultKonstanten1(void)
{
 EE_Parameter.GlobalConfig = CFG_ACHSENKOPPLUNG_AKTIV | CFG_KOMPASS_AKTIV | CFG_GPS_AKTIV | CFG_HOEHEN_SCHALTER;
 EE_Parameter.ExtraConfig = CFG2_HEIGHT_LIMIT;// | CFG2_VARIO_BEEP | CFG_SENSITIVE_RC
 EE_Parameter.Hoehe_MinGas = 30;
 EE_Parameter.MaxHoehe     = 251;      // Wert : 0-250   251 -> Poti1
 EE_Parameter.Hoehe_P      = 10;       // Wert : 0-32
 EE_Parameter.Luftdruck_D  = 30;       // Wert : 0-250
 EE_Parameter.Hoehe_ACC_Wirkung = 30;  // Wert : 0-250
 EE_Parameter.Hoehe_HoverBand = 5;     // Wert : 0-250
 EE_Parameter.Hoehe_GPS_Z = 64;        // Wert : 0-250
 EE_Parameter.Hoehe_StickNeutralPoint = 0; // Wert : 0-250 (0 = Hoover-Estimation)
 EE_Parameter.Hoehe_Verstaerkung = 20; // Wert : 0-50
 EE_Parameter.Stick_P = 14;            // Wert : 1-6
 EE_Parameter.Stick_D = 16;            // Wert : 0-64
 EE_Parameter.Gier_P = 12;             // Wert : 1-20
 EE_Parameter.Gas_Min = 8;             // Wert : 0-32
 EE_Parameter.Gas_Max = 230;           // Wert : 33-250
 EE_Parameter.GyroAccFaktor = 30;      // Wert : 1-64
 EE_Parameter.KompassWirkung = 128;    // Wert : 0-250
 EE_Parameter.Gyro_P = 80;             // Wert : 0-250
 EE_Parameter.Gyro_I = 150;            // Wert : 0-250
 EE_Parameter.Gyro_D = 3;              // Wert : 0-250
 EE_Parameter.Gyro_Gier_P = 80;        // Wert : 0-250
 EE_Parameter.Gyro_Gier_I = 150;       // Wert : 0-250
 EE_Parameter.UnterspannungsWarnung = 33; // Wert : 0-250 ( Automatische Zellenerkennung bei < 50)
 EE_Parameter.NotGas = 35;                // Wert : 0-250     // Gaswert bei Empangsverlust
 EE_Parameter.NotGasZeit = 30;            // Wert : 0-250     // Zeit bis auf NotGas geschaltet wird, wg. Rx-Problemen
 EE_Parameter.UfoAusrichtung = 0;         // X oder + Formation
 EE_Parameter.I_Faktor = 32;
 EE_Parameter.UserParam1 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam2 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam3 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam4 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam5 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam6 =   0;           // zur freien Verwendung
 EE_Parameter.UserParam7 = 0;             // zur freien Verwendung
 EE_Parameter.UserParam8 = 0;             // zur freien Verwendung
 
 EE_Parameter.ServoNickControl = 100;     // Wert : 0-250     // Stellung des Servos
 EE_Parameter.ServoNickComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
 EE_Parameter.ServoCompInvert = 1;        // Wert : 0-250     // Richtung Einfluss Gyro/Servo
 EE_Parameter.ServoNickMin = 0;           // Wert : 0-250     // Anschlag
 EE_Parameter.ServoNickMax = 250;         // Wert : 0-250     // Anschlag
 EE_Parameter.ServoNickRefresh = 6;
 EE_Parameter.ServoRollControl = 100;     // Wert : 0-250     // Stellung des Servos
 EE_Parameter.ServoRollComp = 40;         // Wert : 0-250     // Einfluss Gyro/Servo
 EE_Parameter.ServoRollMin = 0;           // Wert : 0-250     // Anschlag
 EE_Parameter.ServoRollMax = 250;         // Wert : 0-250     // Anschlag
 EE_Parameter.LoopGasLimit = 50;
 EE_Parameter.LoopThreshold = 90;         // Wert: 0-250  Schwelle für Stickausschlag
 EE_Parameter.LoopHysterese = 50;
 EE_Parameter.BitConfig = 0;              // Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
 EE_Parameter.AchsKopplung1 = 90;
 EE_Parameter.AchsKopplung2 = 80;
 EE_Parameter.CouplingYawCorrection = 1;
 EE_Parameter.WinkelUmschlagNick = 85;
 EE_Parameter.WinkelUmschlagRoll = 85;
 EE_Parameter.GyroAccAbgleich = 16;        // 1/k
 EE_Parameter.Driftkomp = 32;
 EE_Parameter.DynamicStability = 100;
 EE_Parameter.J16Bitmask = 95;
 EE_Parameter.J17Bitmask = 243;
 EE_Parameter.WARN_J16_Bitmask = 0xAA;
 EE_Parameter.WARN_J17_Bitmask = 0xAA;
 EE_Parameter.J16Timing = 15;
 EE_Parameter.J17Timing = 15;
 EE_Parameter.NaviGpsModeControl = 252;
 EE_Parameter.NaviGpsGain = 100;
 EE_Parameter.NaviGpsP = 90;
 EE_Parameter.NaviGpsI = 90;
 EE_Parameter.NaviGpsD = 90;
 EE_Parameter.NaviGpsPLimit = 75;
 EE_Parameter.NaviGpsILimit = 75;
 EE_Parameter.NaviGpsDLimit = 75;
 EE_Parameter.NaviGpsACC = 0;
 EE_Parameter.NaviGpsMinSat = 6;
 EE_Parameter.NaviStickThreshold = 8;
 EE_Parameter.NaviWindCorrection = 90;
 EE_Parameter.NaviSpeedCompensation = 30;
 EE_Parameter.NaviOperatingRadius = 100;
 EE_Parameter.NaviAngleLimitation = 100;
 EE_Parameter.NaviPH_LoginTime = 4;
 memcpy(EE_Parameter.Name, "Sport\0", 12);
}
//-----------------------------------------------------------------------------------------------------------------------------



//-----------------------------------------------------------------------------------------------------
// Parametersatz aus dem EEPROM lesen
// Nummer [1..5] möglich
//-----------------------------------------------------------------------------------------------------
void ReadParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
        if((number > 5)||(number < 1)) number = 3;
        eeprom_read_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * (number - 1)], length);        // #define EEPROM_ADR_PARAM_BEGIN  100
        LED_Init ();            // initialisiert die Schalt-Ausgänge PORTC2 und PORTC3 an SV2 (control of J16 & J17)
}
//-----------------------------------------------------------------------------------------------------



//-----------------------------------------------------------------------------------------------------
// Parametersatz vom ROM ins EEPROM schreiben
// Nummer [1..5] ist die mögliche Nummer des Paramtersatzes
// *buffer ist die Adresse, woher die Bytes kommen, die kopiert werden sollen
// length ist die Anzahl der zu kopierenden Bytes
//------------------------------------------------------------------------------------------------------------------------------------
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
{
        if(number > 5) number = 5;
        if(number < 1) return;
        eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * (number - 1)], length);       // #define EEPROM_ADR_PARAM_BEGIN  100
        // eeprom_write_block(buffer, &EEPromArray[100 + length * (number - 1)], length);                                       // aufgelöst
        eeprom_write_byte(&EEPromArray[EEPROM_ADR_PARAM_LENGTH], length);                                                                       // Länge der Datensätze merken // #define EEPROM_ADR_PARAM_LENGTH      98
        // eeprom_write_byte(&EEPromArray[98], length);                                                                                                         // aufgelöst    // lenght = 101
        eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_CHANNELS], 8);                                                                       // 8 Kanäle merken // #define EEPROM_ADR_CHANNELS          80
        // eeprom_write_block(buffer, &EEPromArray[80], 8);                                                                                                     // aufgelöst
       
        SetActiveParamSetNumber(number);
        LED_Init();                                                                             // initialisiert die Schalt-Ausgänge PORTC2 und PORTC3 an SV2 (control of J16 & J17)
}
//------------------------------------------------------------------------------------------------------------------------------------



//-------------------------------------------------------------------------------------------------------------------------------------
unsigned char GetActiveParamSetNumber(void)                     // hier wird herausgelesen, mit welchem Parametersatz gefolgen werden soll
{                                                                                                       // Beginner=3,Normal=2,Sport=1
        unsigned char set;
        set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);                                                    // #define EEPROM_ADR_ACTIVE_SET  2
        if((set > 5) || (set < 1))
        {
                set = 3;                                                                                                                                                        // default = Beginner
                SetActiveParamSetNumber(set);                                                                                                           // diesen Parametersatz als aktuell merken
        }
        return(set);
}
//-------------------------------------------------------------------------------------------------------------------------------------



//-------------------------------------------------------------------------------------------------------------------------------------
void SetActiveParamSetNumber(unsigned char number)
{
        if(number > 5) number = 5;
        if(number < 1) return;                                                                                                          // #define EEPROM_ADR_ACTIVE_SET  2
        eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number);                         // diesen Parametersatz im EEPROM als aktuell merken
}
//-------------------------------------------------------------------------------------------------------------------------------------



// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++