Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1927 → Rev 1928

/trunk/Spektrum.c
4,11 → 4,11
 
#include "Spektrum.h"
#include "main.h"
// Achtung: RECEIVER_SPEKTRUM_EXP wird in der Main.h gesetzt
// Achtung: RECEIVER_SPEKTRUM_DX7EXP oder RECEIVER_SPEKTRUM_DX8EXP wird in der Main.h gesetzt
 
unsigned char SpektrumTimer = 0;
 
#ifdef RECEIVER_SPEKTRUM_EXP
#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
unsigned char s_excnt = 0; // Counter for Spektrum-Expander
unsigned char s_exparity = 0; // Parity Bit for Spektrum-Expander
signed char s_exdata[11]; // Data for Spektrum-Expander
78,9 → 78,9
// -- Start of USART1 initialisation for Spekturm seriell-mode
// USART1 Control and Status Register A, B, C and baud rate register
uint8_t sreg = SREG;
uint16_t ubrr = (uint16_t) ((uint32_t) SYSCLK/(8 * 115200) - 1);
// disable all interrupts before reconfiguration
cli();
// disable RX-Interrupt
97,7 → 97,7
// set TXD1 (PD3) as an output pin
PORTD |= (1 << PORTD3);
DDRD |= (1 << DDD3);
// USART0 Baud Rate Register
// set clock divider
UBRR1H = (uint8_t)(ubrr>>8);
126,7 → 126,7
UCSR1B |= (1 << RXCIE1);
// -- End of USART1 initialisation
// restore global interrupt flags
SREG = sreg;
return;
}
295,7 → 295,7
signal -= 0x400; // Offset, range 0x000..0x7ff?
signal = signal/6; // scaling to fit PPM resolution
index = (ByteHigh >> 3) & 0x0f;
}
}
else
//if(EE_Parameter.Receiver == RECEIVER_SPEKTRUM_LOW_RES)
{
309,73 → 309,117
if(index < 13)
{
// Stabiles Signal
#ifdef RECEIVER_SPEKTRUM_EXP
if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4)
else if (index == 4) index = 2;
#if defined (RECEIVER_SPEKTRUM_DX7EXP) || defined (RECEIVER_SPEKTRUM_DX8EXP)
if (index == 2) index = 4; // Analog channel reassigment (2 <-> 4) for logical numbering (1,2,3,4)
else if (index == 4) index = 2;
#endif
if(abs(signal - PPM_in[index]) < 6)
{
if(SenderOkay < 200) SenderOkay += 10;
else
{
SenderOkay = 200;
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
}
}
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
#ifdef RECEIVER_SPEKTRUM_EXP
if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
{
if (signal > 100) // SYNC received
{
if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check
{
if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125; // Reconstruct tripole Flight-Mode value (CH5)
else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0; // Reconstruct tripole Flight-Mode value (CH5)
else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125; // Reconstruct tripole Flight-Mode value (CH5)
PPM_in[6] = s_exdata[3]; // Elevator (CH6)
PPM_in[11] = s_exdata[4]; // Aileron (CH11)
PPM_in[12] = s_exdata[5]; // Rudder (CH12)
if(abs(signal - PPM_in[index]) < 6)
{
if(SenderOkay < 200) SenderOkay += 10;
else
{
SenderOkay = 200;
TIMSK1 &= ~_BV(ICIE1); // disable PPM-Input
}
}
tmp = (3 * (PPM_in[index]) + signal) / 4;
if(tmp > signal+1) tmp--; else
if(tmp < signal-1) tmp++;
#ifdef RECEIVER_SPEKTRUM_DX7EXP
if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
{
if (signal > 100) // SYNC received
{
if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
if ((s_excnt == 6 && ((s_exparity != 0 && s_exdata[s_excnt] == -125) || (s_exparity == 0 && s_exdata[s_excnt] == 125))) || (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125)))) // Parity check
{
if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125; // Reconstruct tripole Flight-Mode value (CH5)
else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0; // Reconstruct tripole Flight-Mode value (CH5)
else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125; // Reconstruct tripole Flight-Mode value (CH5)
PPM_in[6] = s_exdata[3]; // Elevator (CH6)
PPM_in[11] = s_exdata[4]; // Aileron (CH11)
PPM_in[12] = s_exdata[5]; // Rudder (CH12)
 
if (s_excnt == 9) // New Mode (12 Channels)
{
if (s_exdata[7] == 125) PPM_in[8] += 5; // Hover Pitch UP (CH8)
if (s_exdata[8] == 125) PPM_in[8] -= 5; // Hover Pitch DN (CH8)
if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit
else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit
PPM_in[10] = s_exdata[6]; // AUX2 (CH10)
}
}
if (s_excnt == 9) // New Mode (12 Channels)
{
if (s_exdata[7] == 125) PPM_in[8] += 5; // Hover Pitch UP (CH8)
if (s_exdata[8] == 125) PPM_in[8] -= 5; // Hover Pitch DN (CH8)
if (PPM_in[8] < -125) PPM_in[8] = -125; // Range-Limit
else if (PPM_in[8] > 125) PPM_in[8] = 125; // Range-Limit
PPM_in[10] = s_exdata[6]; // AUX2 (CH10)
}
}
 
s_excnt = 0; // Reset bitcounter
s_exparity = 0; // Reset parity bit
}
s_excnt = 0; // Reset bitcounter
s_exparity = 0; // Reset parity bit
}
 
if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
if (s_excnt == 10) s_excnt = 0; // Overflow protection
if (signal < -100)
{
s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
}
if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
if (s_excnt == 10) s_excnt = 0; // Overflow protection
if (signal < -100)
{
s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
}
 
}
}
 
#elif defined RECEIVER_SPEKTRUM_DX8EXP
if(index == 6) // FLIGHT-MODE - The channel used for our data uplink
{
if (signal > 100) // SYNC received
{
if (s_exdata[s_excnt] == 125) s_exparity = ~s_exparity; // Bit = 1 -> Re-Invert parity bit
if (s_excnt == 9 && ((s_exparity == 0 && s_exdata[s_excnt] == -125) || (s_exparity != 0 && s_exdata[s_excnt] == 125))) // Parity check
{
if (s_exdata[1] == 125 && s_exdata[2] == -125) PPM_in[5] = -125; // Reconstruct tripole Flight-Mode value (CH5)
else if (s_exdata[1] == -125 && s_exdata[2] == -125) PPM_in[5] = 0; // Reconstruct tripole Flight-Mode value (CH5)
else if (s_exdata[1] == -125 && s_exdata[2] == 125) PPM_in[5] = 125; // Reconstruct tripole Flight-Mode value (CH5)
 
if (s_exdata[3] == 125 && s_exdata[6] == -125) PPM_in[6] = 125; // Reconstruct tripole Elev D/R value (CH6)
else if (s_exdata[3] == -125 && s_exdata[6] == -125) PPM_in[6] = 0; // Reconstruct tripole Elev D/R value (CH6)
else if (s_exdata[3] == -125 && s_exdata[6] == 125) PPM_in[6] = -125; // Reconstruct tripole Elev D/R value (CH6)
 
 
if (s_exdata[7] == 125 && s_exdata[8] == -125) PPM_in[9] = -125; // Reconstruct tripole AIL D/R value (CH9)
else if (s_exdata[7] == -125 && s_exdata[8] == -125) PPM_in[9] = 0; // Reconstruct tripole AIL D/R value (CH9)
else if (s_exdata[7] == -125 && s_exdata[8] == 125) PPM_in[9] = 125; // Reconstruct tripole AIL D/R value (CH9)
 
PPM_in[10] = s_exdata[5]; // Gear (CH10)
PPM_in[12] = s_exdata[4]; // Mix (CH12)
}
 
s_excnt = 0; // Reset bitcounter
s_exparity = 0; // Reset parity bit
}
 
if (signal < 10) s_exdata[++s_excnt] = -125; // Bit = 0 -> value = -125 (min)
if (s_excnt == 10) s_excnt = 0; // Overflow protection
if (signal < -100)
{
s_exdata[s_excnt] = 125; // Bit = 1 -> value = 125 (max)
s_exparity = ~s_exparity; // Bit = 1 -> Invert parity bit
}
 
}
#endif
if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
if(SenderOkay >= 180) PPM_diff[index] = ((tmp - PPM_in[index]) / 3) * 3;
else PPM_diff[index] = 0;
 
#ifdef RECEIVER_SPEKTRUM_EXP
if (index < 5 ) PPM_in[index] = tmp; // Update normal potis (CH1-4)
else if (index == 5) PPM_in[7] = signal; // Gear (CH7)
else if (index == 7) PPM_in[9] = signal; // Hover Throttle (CH9)
#ifdef RECEIVER_SPEKTRUM_DX7EXP
if (index < 5 ) PPM_in[index] = tmp; // Update normal potis (CH1-4)
else if (index == 5) PPM_in[7] = signal; // Gear (CH7)
else if (index == 7) PPM_in[9] = signal; // Hover Throttle (CH9)
#elif defined RECEIVER_SPEKTRUM_DX8EXP
if (index < 5 ) PPM_in[index] = tmp; // Update normal potis (CH1-4)
else if (index == 7) PPM_in[7] = signal; // R Trim (CH7)
else if (index == 5) PPM_in[8] = signal; // AUX2 (CH8)
else if (index == 8) PPM_in[11] = signal; // AUX3 (CH11)
#else
PPM_in[index] = tmp;
PPM_in[index] = tmp;
#endif
}
}
else if(index > 17) ReSync = 1; // hier stimmt was nicht: neu synchronisieren
}
else
405,3 → 449,4
}
}
}
/trunk/fc.c
618,9 → 618,6
tmp = EE_Parameter.CareFreeModeControl;
if(tmp > 50)
{
#ifdef SWITCH_LEARNS_CAREFREE
// if(!CareFree) ControlHeading = (((int) EE_Parameter.OrientationAngle * 15 + KompassValue) % 360) / 2;
#endif
CareFree = 1;
if(tmp >= 248 && Poti[255 - tmp] < 50) CareFree = 0;
if(carefree_old != CareFree)
/trunk/jetimenu.c
23,7 → 23,6
JetiBox_printfxy(0,0,"%2i.%1iV",UBat/10, UBat%10);
if(NaviDataOkay)
{
// JetiBox_printfxy(6,0,"%03dm %03d%c", GPSInfo.HomeDistance/10,GPSInfo.HomeBearing, 0xDF);
JetiBox_printfxy(6,0,"%3d%c %03dm%c",KompassValue, 0xDF, GPSInfo.HomeDistance/10,NC_GPS_ModeCharacter);
}
else
/trunk/libfc1284.a
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/libfc644.a
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/main.h
3,8 → 3,8
 
//#define DEBUG // use to activate debug output to MK-Tool: use Debug(text);
//#define ACT_S3D_SUMMENSIGNAL
//#define SWITCH_LEARNS_CAREFREE
//#define RECEIVER_SPEKTRUM_EXP
//#define RECEIVER_SPEKTRUM_DX7EXP
//#define RECEIVER_SPEKTRUM_DX8EXP
 
// neue Hardware
#define ROT_OFF {if((PlatinenVersion == 10)||(PlatinenVersion >= 20)) PORTB &=~0x01; else PORTB |= 0x01;}
/trunk/makefile
6,7 → 6,7
#-------------------------------------------------------------------
VERSION_MAJOR = 0
VERSION_MINOR = 85
VERSION_PATCH = 0
VERSION_PATCH = 1
VERSION_SERIAL_MAJOR = 11 # Serial Protocol
VERSION_SERIAL_MINOR = 0 # Serial Protocol
NC_SPI_COMPATIBLE = 21 # Navi-Kompatibilität
/trunk/version.txt
468,7 → 468,7
- Höhenregler: keine 'harte' IstWert-Übernahme bei Bewegen des Sticks in die Hoover-Position
- Coming Home mit Höhenvorgabe
- Coming Home als Failsafe
- Einführung des GPS-Characters (- / W H A P)
- Einführung des GPS-Characters (- / W H D P)