@Tütenflieger: Ja das geht mir auch so, das Flyduino-Projekt ist sehr Umpfangreich und viele Klassen sind ineinander Verschachtelt.
Aber wie du schon sagst, man kann in dem Code schon etwas spicken wenn es z.b um die PWM Signale der Empfänger geht.
z.b. in RCInput_MPNG.cpp.
Aber auch im Multiwii Projekt das deutlicher einfacher ist, kann man sich diesbezüglich Ideen holen
Zum Multiplex-Summensignal (Digital) :
Es gibt 2 Versionen eine mit Startbyte 0xA1 und eine mit 0xA2, dananch unterscheiden die sich nur in der Anzahl der Kanäle.
Am Ende wird noch die CRC geschickt Highbyte und dann Lowbyte.
Die Servostellungen auch erst High und Lowbyte. Wobei beim Higbyte nur das untere Nibble benutzt wird (Die Servowege sind also 12 Bit breit)
Servoinformation in 4095 Schritten:
800?s 0x000
1500?s 0x800
2200?s 0xFFF
Die Serielle musst du mit den Parametern 115200Kbit/s, 8 Datenbits, keine Parität, 1 Stopp-Bit. öffnen.
Den Beispiel Code den ich ins Multiwii Projekt eingebaut habe, und auch funktionierte.
#if defined(SRXLBUS)
uint16_t CRC16(uint16_t crc, uint8_t value)
{
uint8_t i;
crc = crc ^ (uint16_t)value<<8;
for (i=0; i<8; i++)
{
if (crc & 0x8000)
crc=crc << 1 ^0x1021;
else
crc = crc << 1;
}
return crc;
}
void readSRXL(){
#define SRXL_SYNCBYTE 0xA1
static uint16_t SRXL[26]={0};
uint8_t i;
uint16_t crc=0;
uint16_t checkcrc;
uint8_t po = 0;
while(Serial1.available()){
int val = Serial1.read();
if(SRXLIndex==0 && val != SRXL_SYNCBYTE)
continue;
SRXL[SRXLIndex++] = val;
if(SRXLIndex==27){
SRXLIndex=0;
SRXL[0] = SRXL_SYNCBYTE;
crc=0;
for(i=0; i<=24; i++)
crc=CRC16(crc,SRXL[i]);
checkcrc=(SRXL[25]<<8|SRXL[26]);
if (checkcrc==crc)
//if (true)
{
po=1;
for(i=0; i<=8; i++)
{
rcValue[i] = (SRXL[po]<<8|SRXL[po+1])/2.3+614;
po=po+2;
}
}
}
}
}
#endif
Im array rcValue erwartet das Projekt die Servowege, ich habe das mit /2.3+614 so "gemappt" das es wieder passt.
Hier wird das obere Nibble des Highbyte nicht ausmaskiert, war immer 0x0 außerdem wird das ganze sowieso via CRC
geprüft.
Parallel dazu habe ich noch zwei kleine Windows Programme gebaut um damit lesen und komfortabel anzeigen zu können was von Empfänger kommt.
Mutiplex_Logger.rar (942 KB)