Subversion Repositories FlightCtrl

Rev

Rev 1 | Rev 188 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1 Rev 173
Line 50... Line 50...
50
// +  POSSIBILITY OF SUCH DAMAGE. 
50
// +  POSSIBILITY OF SUCH DAMAGE. 
51
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
51
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
52
#include "main.h"
52
#include "main.h"
Line 53... Line 53...
53
 
53
 
-
 
54
unsigned char EEPromArray[E2END+1] EEMEM;
Line 54... Line 55...
54
unsigned char EEPromArray[E2END+1] EEMEM;
55
unsigned char PlatinenVersion = 10;
55
 
56
 
56
// -- Parametersatz aus EEPROM lesen ---
57
// -- Parametersatz aus EEPROM lesen ---
57
// number [0..5]   
58
// number [0..5]   
Line 65... Line 66...
65
 
66
 
66
// -- Parametersatz ins EEPROM schreiben ---
67
// -- Parametersatz ins EEPROM schreiben ---
67
// number [0..5]   
68
// number [0..5]   
68
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
69
void WriteParameterSet(unsigned char number, unsigned char *buffer, unsigned char length)
69
{
70
{
70
   if (number > 5) number = 5; 
71
   if(number > 5) number = 5;  
Line 71... Line 72...
71
   eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
72
   eeprom_write_block(buffer, &EEPromArray[EEPROM_ADR_PARAM_BEGIN + length * number], length);
72
 
73
 
Line 73... Line 74...
73
   eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number);                              // diesen Parametersatz als aktuell merken
74
   eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], number);                              // diesen Parametersatz als aktuell merken
74
}
75
}
-
 
76
 
75
 
77
unsigned char GetActiveParamSetNumber(void)
-
 
78
{
-
 
79
 unsigned char set;
-
 
80
 set = eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]);
-
 
81
 if(set > 5)
-
 
82
  {
-
 
83
   set = 2;  
76
unsigned char GetActiveParamSetNumber(void)
84
   eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], set);                                 // diesen Parametersatz als aktuell merken
Line 77... Line 85...
77
{
85
  }
78
  return(eeprom_read_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET]));
86
 return(set);
79
}
87
}
80
 
88
 
81
//############################################################################
89
//############################################################################
82
//Hauptprogramm
90
//Hauptprogramm
83
int main (void)
91
int main (void)
84
//############################################################################
-
 
-
 
92
//############################################################################
85
{
93
{
86
        unsigned int timer;
94
        unsigned int timer;
87
        unsigned int timer2 = 0;
95
        unsigned int timer2 = 0;
88
 
96
    if(PINB & 0x01) PlatinenVersion = 11; else PlatinenVersion = 10;
89
    DDRC  = 0x01; // SCL
97
    DDRC  = 0x81; // SCL
90
    PORTC = 0xff; // Pullup SDA
98
    PORTC = 0xff; // Pullup SDA
Line 116... Line 124...
116
 
124
 
117
    VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
125
    VersionInfo.Hauptversion = VERSION_HAUPTVERSION;
118
    VersionInfo.Nebenversion = VERSION_NEBENVERSION;
126
    VersionInfo.Nebenversion = VERSION_NEBENVERSION;
Line 119... Line 127...
119
    VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
127
    VersionInfo.PCKompatibel = VERSION_KOMPATIBEL;
120
   
128
   
121
        printf("\n\rFlightControl V%d.%d ", VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
129
        printf("\n\rFlightControl\n\rHardware:%d.%d\n\rSoftware:V%d.%d ",PlatinenVersion/10,PlatinenVersion%10, VERSION_HAUPTVERSION, VERSION_NEBENVERSION);
Line -... Line 130...
-
 
130
        printf("\n\r==============================");
122
        printf("\n\r==============================");
131
        GRN_ON;
123
        GRN_ON;
132
 
124
 
133
#define EE_DATENREVISION 62 // wird angepasst, wenn sich die EEPROM-Daten geƤndert haben
125
    if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != 59) // seit V 0.60 
134
    if(eeprom_read_byte(&EEPromArray[EEPROM_ADR_VALID]) != EE_DATENREVISION)
126
        {
135
        {
127
          printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
136
          printf("\n\rInit. EEPROM: Generiere Default-Parameter...");
128
          DefaultKonstanten1();
137
          DefaultKonstanten1();
129
          for (unsigned char i=0;i<6;i++)  
138
          for (unsigned char i=0;i<6;i++)  
130
      {
139
      {
131
       if(i==2) DefaultKonstanten2();
140
       if(i==2) DefaultKonstanten2();
132
       WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
141
       WriteParameterSet(i, (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
133
      }
142
      }
Line 134... Line 143...
134
          eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 1);
143
          eeprom_write_byte(&EEPromArray[EEPROM_ADR_ACTIVE_SET], 2);
135
          eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], 59);
144
          eeprom_write_byte(&EEPromArray[EEPROM_ADR_VALID], EE_DATENREVISION);
Line 136... Line 145...
136
        }
145
        }
137
       
146
       
138
        ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
147
        ReadParameterSet(GetActiveParamSetNumber(), (unsigned char *) &EE_Parameter.Kanalbelegung[0], STRUCT_PARAM_LAENGE);
139
    printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
148
    printf("\n\rBenutze Parametersatz %d", GetActiveParamSetNumber());
140
 
149
 
141
   
150
   
142
        if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
151
        if(EE_Parameter.GlobalConfig & CFG_HOEHENREGELUNG)
143
         {
152
         {
Line 162... Line 171...
162
        else printf("Neutral");
171
        else printf("Neutral");
Line 163... Line 172...
163
       
172
       
Line 164... Line 173...
164
        printf("\n\n\r");
173
        printf("\n\n\r");
-
 
174
               
165
               
175
    LcdClear();
166
    LcdClear();
176
    I2CTimeout = 5000;
167
        while (1)
-
 
168
        {
177
        while (1)
169
       
178
        {
170
        if (UpdateMotor)      // ReglerIntervall
179
        if (UpdateMotor)      // ReglerIntervall
171
            {
180
            {
172
            UpdateMotor=0;
181
            UpdateMotor=0;
173
            MotorRegler();  
182
            MotorRegler();  
174
            SendMotorData();
183
            SendMotorData();
175
            ROT_OFF;
-
 
176
            if(PcZugriff) PcZugriff--;
184
            ROT_OFF;
177
           
-
 
178
            if(SenderOkay)  SenderOkay--;
185
            if(PcZugriff) PcZugriff--;
179
           
186
            if(SenderOkay)  SenderOkay--;
180
            if (UBat < EE_Parameter.UnterspannungsWarnung)
187
            if(!I2CTimeout)
181
                {    
188
                {
182
                  beeptime = 2000;
-
 
183
                }
189
                 I2CTimeout = 5;
184
           
190
                 i2c_reset();
-
 
191
                  if((BeepMuster == 0xffff) && MotorenEin)
-
 
192
                   {
185
            if(!Timeout)
193
                    beeptime = 10000;
186
                {
194
                    BeepMuster = 0x0080;
187
                i2c_init();
195
                   }
188
                }
196
                }
-
 
197
            else        
189
            else        
198
                {
190
                {
199
                 I2CTimeout--;
191
                ROT_OFF;
200
                 ROT_OFF;
192
                }
-
 
193
            }
-
 
194
 
201
                }
195
             
202
            }
196
            if(SIO_DEBUG)
203
            if(SIO_DEBUG)
197
              {
204
              {
198
               DatenUebertragung();
205
               DatenUebertragung();
199
               BearbeiteRxDaten();
206
               BearbeiteRxDaten();
200
              }
207
              }
201
              else BearbeiteRxDaten();
208
              else BearbeiteRxDaten();
202
         if(CheckDelay(timer2))
209
         if(CheckDelay(timer))
-
 
210
            {
-
 
211
            if(UBat < EE_Parameter.UnterspannungsWarnung)
-
 
212
                {    
-
 
213
                  if(BeepMuster == 0xffff)
-
 
214
                   {
-
 
215
                    beeptime = 6000;
-
 
216
                    BeepMuster = 0x0300;
203
            {
217
                   }
204
             if(MotorenEin) PORTC ^= 0x10; else PORTC &= ~0x10;
218
                }
205
             timer = SetDelay(500);  
219
             timer = SetDelay(100);  
206
            }
220
            }
207
    }
221
    }