Results 1 to 4 of 4
  1. #1
    25+ Posting Member
    Join Date
    Oct 2015
    Location
    United Kingdom
    Posts
    34
    Contribute If you enjoy reading the
    content here, click the below
    image to support MyCockpit site.
    Click Here To Contribute To Our Site

    Strange D260 & D261 output into link2fs causing servo jitter?

    Hi all

    I've attached a servo to my board copying across Jim's flaps with servo into my code. When uploaded this causes a servo jitter that isn't present when I just upload Jim's Flaps with servo sketch. So, something in my code is causing it I assume.

    Monitor in link2fs shows that the keycode D260 and or D261 is being sent from the arduino, twice a second. Would someone please glance an eye over the (rather long) code to see if there is anything that sticks out?

    Many thanks people (the missing #includes are liquidcrystal and servo.h)

    Code:
    
    /* Original = Multi_Radiohead_annun from Jim's website
       v.1, amended liquidcrystal display for 20,4
       v.2, deleted pulse leds and unwanted stuff, added dual encoder (8,9,10,11), button = 12
       v.3, tweaked 'Void Keys', with help from MyCockpit
       v.4, Added Servo to pin 13, as per Jims Multi_keys_with_flaps_servo 
       v.5, moved and seperated q and q2
       v.6, VOID keys change to VOID input
       v.7 Completed encoder MASSIVE thanks to BushPilotWannabe for his help and guidance 
       V.7 Getting servo jitter - continious D260/261 outputs from card?? 
     */
    
    
    #include "math.h"
    #include "Quadrature.h"
    #include 
    #include 
    Servo flapsServo;
    
    
    Quadrature quad1(8,9);
    Quadrature quad2(10,11);
    LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
    
    
    int CodeIn;// used on all serial reads
    int KpinNo; 
    int Koutpin;
    int active; // the mode thats active
    int activeold;
    int mark; // shows where the cursor is in the likes of ADF etc
    
    
    
    
    String KoldpinStateSTR, KpinStateSTR, Kstringnewstate,Kstringoldstate, APsp, APspold, stringnewstate,stringoldstate, com1, com1old, com1sb, com1sbold,com2, com2old, com2sb,com2sbold, airsp, airspold, altit, altitold;
    String nav1, nav1old, nav1sb, nav1sbold, nav2, nav2old, nav2sb, nav2sbold;
    String adf, adfold, xpdr, xpdrold, dme1, dme1old, dme2, dme2old, pitot, pitotold;
    String gearSimple;
    String flaps;
    char blank = 255;
    
    
    int R;// a variable
    int Rold;// the old reading
    int Rdif;// the difference since last loop
    int R2;// a second test variable
    int R3;// a second test variable
    int Rold2;// a second loop old reading
    int Rdif2; // the second test difference
    int Rold3;// a second loop old reading
    int Rdif3; // the second test difference
    
    
    // make some custom arrows for the LCD:
    byte leftArrow[8] = { // This makes a <-- on lcd
      0b00000,
      0b00100,
      0b01000,
      0b11111,
      0b01000,
      0b00100,
      0b00000,
      0b00000
    };
    
    
    byte rightArrow[8] = { //make a --> on lcd
    
    
      0b00000,
      0b00100,
      0b00010,
      0b11111,
      0b00010,
      0b00100,
      0b00000,
      0b00000
    };
    
    
    void setup() 
    {
      lcd.begin(20, 4); // set up the LCD's number of columns and rows: 
      Kstringoldstate = "111111111111111111111111111111111111111111111111111111111111111111111";
        for (int KoutPin = 12; KoutPin < 70; KoutPin++)// Get all the pins ready for "Keys"  
      {
        pinMode(KoutPin, INPUT);
        digitalWrite(KoutPin, HIGH);  
      }
      for (int PinNo = 54; PinNo <= 69; PinNo++)// Get all the OUTPUT pins from analog
      {
     pinMode(KpinNo, OUTPUT);
    }
    
    
    lcd.createChar(0, leftArrow); // create a new character
    lcd.createChar(1, rightArrow);
     
    mark = 12;
    lcd.clear();
    Serial.begin(115200);   
     pinMode(26, OUTPUT);// For the servo.
     flapsServo.attach(26);
    }
    
    
    void loop() {
     {INPUTPINS();} //Check the "button pressed" section
      {LCDMODE();}  // Sets up the LCD for the mode it's in (From the rotary switch)
      {ENCODER();} //Check the Rotary Encoders
       if (Serial.available()) {// Check if serial data has arrived from PC
        CodeIn = getChar();
        if (CodeIn == '=') {EQUALS();} // The first identifier is "="
        if (CodeIn == '<') {LESSTHAN();}// The first identifier is "<"
        //if (CodeIn == '?') {QUESTION();}// The first identifier is "?"
     //   if (CodeIn == '/') {SLASH();}// The first identifier is "/" (Annunciators)
      }//End of serial check
    }//End of Void Loop
    
    
    char getChar()// Get a character from the serial buffer
    {
      while(Serial.available() == 0);// wait for data
      return((char)Serial.read());// Thanks Doug
    }// End of get characters
    
    
    void LCDMODE(){
    if (active != activeold)
        activeold = active;
      if (digitalRead(14)==0 and active != 14) { // Sets up the LCD when switching to Com1)
        lcd.setCursor(0, 0);
        delay (11);
        lcd.print(com1); 
        lcd.setCursor(8, 0);
        lcd.write(byte(0)); // this is the left arrow
        lcd.setCursor(9, 0);  
        lcd.write((byte) 1); // this is the right arrow
        lcd.setCursor(10, 0);
        lcd.print("  ");
        lcd.setCursor(12, 0);
        delay (11);
        lcd.print(com1sb); 
        lcd.setCursor(0, 1);
        lcd.print("                ");
        lcd.setCursor(0, 2);
        delay (11);
        lcd.print("Comm 1      Standby"); 
        active = 14;
      } // End of Comm1
      
    if (digitalRead(15)==0 and active != 15) {  // Sets up the LCD when switching to Com2)
        lcd.setCursor(0, 0);
        delay (11);
        lcd.print(com2); 
        lcd.setCursor(8, 0);
        lcd.write(byte(0)); // this is the left arrow
        lcd.setCursor(9, 0);  
        lcd.write((byte) 1); // this is the right arrow
        lcd.setCursor(10, 0);
        lcd.print("  ");
        lcd.setCursor(12, 0);
        delay (11);
        lcd.print(com2sb); 
        lcd.setCursor(0, 1);
        lcd.print("                ");
        lcd.setCursor(0, 2);
        delay (11);
        lcd.print("Comm 2      Standby"); 
        active = 15;
      } //End of Comm 2
      
        if (digitalRead(16)==0 and active != 16) {  // Sets up the LCD when switching to Nav1)
        lcd.setCursor(0, 0);
        delay (11);
        lcd.print(nav1); 
        lcd.setCursor(8, 0);
        lcd.write(byte(0)); // this is the left arrow
        lcd.setCursor(9, 0);  // this is the right arrow
        lcd.write((byte) 1);
        lcd.setCursor(10, 0);
        lcd.print("  ");
        lcd.setCursor(12, 0);
        delay (11);
        lcd.print(nav1sb); 
        lcd.setCursor(0, 1);
        lcd.print("                ");
        lcd.setCursor(0, 2);
        delay (11);
        lcd.print("Nav 1       Standby"); 
        active = 16;
      } //End of Nav 1
      
      if (digitalRead(17)==0 and active != 17) {  // Sets up the LCD when switching to Nav2)
        lcd.setCursor(0, 0);
        delay (11);
        lcd.print(nav2); 
        lcd.setCursor(8, 0);
        lcd.write(byte(0)); // this is the left arrow
        lcd.setCursor(9, 0);  // this is the right arrow
        lcd.write((byte) 1);
        lcd.setCursor(10, 0);
        lcd.print("  ");
        lcd.setCursor(12, 0);
        delay (11);
        lcd.print(nav2sb); 
        lcd.setCursor(0, 1);
        lcd.print("                ");
        lcd.setCursor(0, 2);
        delay (11);
        lcd.print("Nav 2       Standby"); 
        active = 17;
      } // End of Nav 2
      
      if (digitalRead(18)==0 and active != 18) {  // Sets up the LCD when switching to ADF)
        lcd.setCursor(0, 0);
        delay (11);
        lcd.print("ADF      ");  
        lcd.setCursor(12, 0);
        delay (11);
        lcd.print(adf); 
        lcd.print("  ");
        lcd.setCursor(0, 1);
        lcd.print("                ");
        lcd.setCursor(0, 2);
        lcd.print("                   "); 
        if (mark == 9 ){mark = 10;}
        lcd.setCursor(mark, 1);
        lcd.print("-");
        active = 18;             
      } // End of ADF
      
      if (digitalRead(19)==0 and active != 19) {  // Sets up the LCD when switching to DME)
        lcd.setCursor(0, 0);
        delay (11);
        lcd.print(dme1); 
        lcd.setCursor(12, 0);
        lcd.print(dme2);
        lcd.setCursor(0, 2);
        delay (11);
        lcd.print("DME 1       DME2   ");  
        active = 19;
      } // End of DMEs
             
      if (digitalRead(20)==0 and active != 20) {  // Sets up the LCD when switching to XPDR)
        lcd.setCursor(0, 0);
        delay (11);
        lcd.print("XPonder  ");  
        lcd.setCursor(12, 0);
        delay (11);
        lcd.print(xpdr); 
        lcd.print("    ");
        lcd.setCursor(0, 1);
        lcd.print("                ");
        lcd.setCursor(mark, 1);
        lcd.print("-");
        lcd.setCursor(0, 2);
        delay (11);
        lcd.print("                  ");
        active = 20;                   
       } // End of Xponder
    } // end of LCDmode
      
    void EQUALS(){      // The first identifier was "="
           delay (11);
           CodeIn = getChar(); // Get another character
      switch(CodeIn) {// Now lets find what to do with it
        case 'A'://Found the reading "Com1"
            com1 = "";
            com1 += getChar();
            com1 += getChar();
            com1 += getChar();
            com1 += getChar();
            com1 += getChar();
            com1 += getChar();
            com1 += getChar();
            if (com1 != com1old && digitalRead(14) == LOW) {
              delay (11);
              lcd.setCursor(0, 0);
              delay (11);
              lcd.print(com1);
              com1old = com1;
              }
             break;
          case 'B': // Found the reading "Com1 s/b" 
            com1sb = "";
            com1sb += getChar();
            com1sb += getChar();
            com1sb += getChar();
            com1sb += getChar();
            com1sb += getChar();
            com1sb += getChar();
            com1sb += getChar();
            if (com1sb != com1sbold && digitalRead(14) == LOW ){
              delay (11);
              lcd.setCursor(12, 0);
              delay (11);
              lcd.print(com1sb);
              com1sbold = com1sb;
              }        
             break;
           case  'C': //  Found the reading "Com2"
            com2 = "";
            com2 += getChar();
            com2 += getChar();
            com2 += getChar();
            com2 += getChar();
            com2 += getChar();
            com2 += getChar();
            com2 += getChar();
            if (com2 != com2old && digitalRead(15) == LOW) {
              lcd.setCursor(0, 0);
              delay (11);
              lcd.print(com2);
              com2old = com2;
              }
             break;
           case  'D': //  Found the reading "Com2 s/b"
            com2sb = "";
            com2sb += getChar();
            com2sb += getChar();
            com2sb += getChar();
            com2sb += getChar();
            com2sb += getChar();
            com2sb += getChar();
            com2sb += getChar();
            if (com2sb != com2sbold && digitalRead(15) == LOW) {
              lcd.setCursor(12, 0);
              delay (11);
              lcd.print(com2sb);
              com2sbold = com2sb;
              }
             break;          
           case  'E': //  Found the reading "Nav1"
            delay (11);
            nav1 = "";
            nav1 += getChar();
            nav1 += getChar();
            nav1 += getChar();
            nav1 += getChar();
            nav1 += getChar();
            nav1 += getChar();
            nav1 += (" "); //pads it up to 8 caracters
            if (nav1 != nav1old && digitalRead(16) == LOW) {
              lcd.setCursor(0, 0);
              delay (11);
              lcd.print(nav1);
              nav1old = nav1;
              }
             break;
           case  'F': //  Found the reading "Nav1 s/b"
            nav1sb = "";
            nav1sb += getChar();
            nav1sb += getChar();
            nav1sb += getChar();
            nav1sb += getChar();
            nav1sb += getChar();
            nav1sb += getChar();
            nav1sb += (" "); //pads it up to 8 caracters
            if (nav1sb != nav1sbold && digitalRead(16) == LOW) {
              lcd.setCursor(12, 0);
              delay (11);
              lcd.print(nav1sb);
              nav1sbold = nav1sb;
              }              
             break;
           case  'G': //  Found the reading "Nav2"
            delay (11);
            nav2 = "";
            nav2 += getChar();
            nav2 += getChar();
            nav2 += getChar();
            nav2 += getChar();
            nav2 += getChar();
            nav2 += getChar();
            nav2 += (" "); //pads it up to 8 caracters
            if (nav2 != nav2old && digitalRead(17) == LOW) {
              lcd.setCursor(0, 0);
              delay (11);
              lcd.print(nav2);
              nav2old = nav2;
              }
             break;
           case  'H': //  Found the reading "Nav2 s/b"
            nav2sb = "";
            nav2sb += getChar();
            nav2sb += getChar();
            nav2sb += getChar();
            nav2sb += getChar();
            nav2sb += getChar();
            nav2sb += getChar();
            nav2sb += (" "); //pads it up to 8 caracters
            if (nav2sb != nav2sbold && digitalRead(17) == LOW) {
              lcd.setCursor(12, 0);
              delay (11);
              lcd.print(nav2sb);
              nav2sbold = nav2sb;
              }              
             break;
           case  'I': //  Found the reading "ADF"
            adf = "";
            adf += getChar();
            adf += getChar();
            adf += getChar();
            adf += getChar();
            adf += getChar();
            adf += getChar();
            adf += (" "); //pads it up to 8 caracters
            if (adf != adfold && digitalRead(18) == LOW) {
              lcd.setCursor(9, 0);
              delay (11);
              lcd.print(adf);
              adfold = adf;
              }
             break;   
           case  'J': //  Found the reading "XPDR"
            delay (11);
            xpdr = "";
            xpdr += getChar();
            xpdr += getChar();
            xpdr += getChar();
            xpdr += getChar();
            xpdr += ("    "); //pads it up to 8 caracters
            if (xpdr != xpdrold && digitalRead(20) == LOW) {
              lcd.setCursor(9, 0);
              delay (11);
              lcd.print(xpdr);
              xpdrold = xpdr;
              }               
             break;
           case  'K': //  Found the reading "DME1"
            delay (11);
            dme1 = "";
            dme1 += getChar();
            dme1 += getChar();
            dme1 += getChar();
            dme1 += getChar();
            dme1 += getChar();
            dme1 += ("   "); //pads it up to 8 caracters
            if (dme1 != dme1old && digitalRead(19) == LOW) {
              lcd.setCursor(0, 0);
              delay (11);
              lcd.print(dme1);
              dme1old = dme1;
              }
             break;          
           case  'L': //  Found the reading "DME2"
            delay (11);
            dme2 = "";
            dme2 += getChar();
            dme2 += getChar();
            dme2 += getChar();
            dme2 += getChar();
            dme2 += getChar();
            dme2 += ("   "); //pads it up to 8 caracters
            if (dme2 != dme2old && digitalRead(19) == LOW) {
              lcd.setCursor(9, 0);
              delay (11);
              lcd.print(dme2);
              dme2old = dme2;
            }
            break;
          } // End of what to do with it               
        } //End of Void Equals
    
    
    
    
    
    
    void LESSTHAN(){    // The first identifier was "<"
    CodeIn = getChar(); // Get another character
      switch(CodeIn) {// Now lets find what to do with it
        case 'A'://Found the second identifier
           //Do something
        break;
         
        case 'B':
           //Do something
        break;
         
        case 'C':
           //Do something
        break;
    
    
        case 'G'://Found the second identifier ("G" Flaps position)
          flaps = "";
          flaps += getChar();
          flaps += getChar();
          flaps += getChar();
          int flapsi = flaps.toInt(); // convert it to an integer (Thanks Phill)
          flapsi = (flapsi + 10);// Manual correction to suit servo zero.
          flapsServo.write(flapsi * 3); // Manual fiddle to get full span of servo.
          // Note.. Using the "Map" method slows it down.
          //Serial.print(flapsi); // Used for testing
        break;
           
             //etc etc etc
         }//End of WTDWI
    } //End of Lessthan
    
    
    void ENCODER(){
    R =(quad1.position()); // the /2 was not needed for my dual rotary from Leobodnar 
    
    
    if (R != Rold) { // checks to see if it different
    (Rdif = (R-Rold));// finds out the difference
    
    
       if (active == 14){// Comm1 rotary encoder output
       if (Rdif == 1) Serial.println ("A01");//Comm1 Mhz down
       if (Rdif == -1) Serial.println ("A02"); //Comm1 Mhz up
       } //End of Comm1 Rotary 1
    
    
      if (active == 15){// Comm2 rotary encoder output
      if (Rdif == 1) Serial.println ("A07");
      if (Rdif == -1) Serial.println ("A08"); 
      } //End of Comm2 Rotary 1
      
      if (active == 16){// Nav1 rotary encoder output
      if (Rdif == 1) Serial.println ("13");
      if (Rdif == -1) Serial.println ("A14");
      } //End of Nav1
    
    
      if (active == 17){// Nav2 rotary encoder output
      if (Rdif == 1) Serial.println("A19");
      if (Rdif == -1) Serial.println("A20");
      } // End of Nav 2 Rotary 1
    
    
    if (active == 18){// ADF rotary encoder output
      if (digitalRead(12)==0 ) {
          if (Rdif == 1) { 
          mark = (mark - 1);
          active = 2; 
          if (mark == 13) mark =12;
          }
          if (Rdif == -1){ 
          mark = (mark + 1); 
          active = 2;
           if (mark == 13) mark =14;
           }
           if (mark > 14) mark = 14;
           if (mark < 10) mark = 10;
          }
          else{
            if (Rdif == 1) { 
              if (mark == 10) {
                Serial.println("A29"); 
              }
              if (mark == 11) {
                Serial.println("A30"); 
              }
              if (mark == 12) {
                Serial.println("A31"); 
              }
              if (mark == 14) {
                Serial.println("A32"); 
              }
            }    
            if (Rdif == -1){
              if (mark == 10){
                Serial.println("A25"); 
              }  
              if (mark == 11){
                Serial.println("A26"); 
              }  
              if (mark == 12){
                Serial.println("A27"); 
              }  
              if (mark == 14){
                Serial.println("A28"); 
              }  
            }//End of Rdif -1 
          } //End of else
    }//End of ADF
    
    
    if (active == 20){// Xponder rotary encoder output
          if (digitalRead(12)==0 ) {
            if (Rdif == 1) { 
              mark = (mark - 1);
              active = 2; 
            }
            if (Rdif == -1){ 
              mark = (mark + 1); 
              active = 2;
            }
            if (mark > 12) mark = 12;
            if (mark < 9) mark = 9;
          }
          else{
            if (Rdif == 1) { 
              if (mark == 9) {
                Serial.println("A38"); 
              }
              if (mark == 10) {
                Serial.println("A39"); 
              }
              if (mark == 11) {
                Serial.println("A40"); 
              }
              if (mark == 12) {
                Serial.println("A41"); 
              }
            }    
            if (Rdif == -1){ 
              if (mark == 9){
                Serial.println("A34"); 
              }  
              if (mark == 10){
                Serial.println("A35"); 
              }  
              if (mark == 11){
                Serial.println("A36"); 
              }  
              if (mark == 12){
                Serial.println("A37"); 
              }  
            } // End of Rdif -1 
          }  //End of else  
        } // End of Xponder
        
     if (quad1.position() > 1000){ // zero the rotary encoder count if too high or low
          quad1.position(0);
        }
        if (quad1.position() < -1000){
          quad1.position(0);
      } 
        Rold=R;
    } //END OF encoder 1
    
    
    R2 =(quad2.position()); //setting up second rotary
    if (R2 != Rold2) { // checks to see if it different
    (Rdif2 = (R2-Rold2));// finds out the difference
    
    
       if (active == 14){// Comm1 rotary encoder output
       if (Rdif2 == 1) Serial.println ("A03"); // Com1
       if (Rdif2 == -1) Serial.println ("A04");//Com1 
       if (R2 != Rold2);
       } //End of Comm1 second encoder
    
    
       if (active == 15){// Com2 rotary encoder output 
       if (Rdif2 == 1) Serial.println ("A09"); 
       if (Rdif2 == -1) Serial.println ("A10");
       }
      
       if (active == 16){// Nav1 rotary encoder output
       if (Rdif2 == 1) Serial.println ("A15"); 
       if (Rdif2 == -1) Serial.println ("A16");
       }
    
    
       if (active == 17){// Nav2 rotary encoder output
       if (Rdif2 == 1) Serial.println ("A21"); 
       if (Rdif2 == -1) Serial.println ("A22");
       }
    
    
       Rold2=R2;
      }//End of checks if different
    }//End of Dual Rotary (Thank goodness)
    
    
    
    
    void INPUTPINS(){
      Kstringnewstate = "";
      for (int KpinNo = 12; KpinNo < 70; KpinNo++){       //checks all the pins 12 to 69
        KpinStateSTR = String(digitalRead(KpinNo)); 
        KoldpinStateSTR = "";
        KoldpinStateSTR = String(Kstringoldstate.charAt(KpinNo - 12));
        if (KpinStateSTR != KoldpinStateSTR) {            // yes it's different
          if (KpinNo == 22 and KpinStateSTR == "0") {     //Change-over button is pressed
           if (active == 14) Serial.println("A06");       //com1
           if (active == 15) Serial.println("A12");       //com2
           if (active == 16) Serial.println("A18");       //nav1
           if (active == 17) Serial.println("A24");       //nav2
           if ( active == 18){                            //adf
              mark = (mark + 1);
              if (mark == 13){ 
               mark = 14;
              }  // sort out for piont in ADF
              active = 1;
              if (mark > 14)mark = 10;
              }  //end of ADF
            
            if  (active == 20){          //xponder
            mark = (mark + 1);
            if (mark == 13){ 
            mark = 9;
            }   // sort out for length Xponder
          active = 1;
          if (mark > 12)mark = 12;
         } //End of xponder bit
       } //End of pin 12 sortout
    
    
        if (KpinNo == 21 && KpinStateSTR == "0"){Serial.println ("C01");} // Gear UP 
        if (KpinNo == 21 && KpinStateSTR == "1"){Serial.println ("C02");} // Gear DOWN 
     
        if (KpinNo > 22){                // start of "Keys" bit
        Serial.print ("D"); 
        if (KpinNo < 12) Serial.print ("0");
        Serial.print (KpinNo);
        Serial.println (KpinStateSTR);
        }   //End of keys bit   
        }   //End of yes it's different
           Kstringnewstate += KpinStateSTR;
        } //end of 'For' loop
           Kstringoldstate = Kstringnewstate;
           delay(11);
    }  // end of void inputpin

  2. #2
    150+ Forum Groupie


    BushPilotWannabe's Avatar
    Join Date
    Jan 2014
    Location
    Alberta, Canada
    Posts
    176
    Contribute If you enjoy reading the
    content here, click the below
    image to support MyCockpit site.
    Click Here To Contribute To Our Site

    Re: Strange D260 & D261 output into link2fs causing servo jitter?

    "D260" and "D261" uploaded to Link2FS might indicate that it has come from "// start of "Keys" bit" in void INPUTPINS(). "D" prefix sent if the instruction is enabled. "26" by digital pin 26 and "0" and "1" indicates that the input has gone LOW or HIGH. Check anything related to pin 26. Period of 500 milliS. might be a clue.

    Hugh
    ---CYXD ----- TWR --- GND ------ Closed
    ILS-- NDB -- 119.1 -- 121.9 ---- 11/2013

  3. #3
    150+ Forum Groupie BuzziBi's Avatar
    Join Date
    Mar 2013
    Location
    Norway
    Posts
    275
    Contribute If you enjoy reading the
    content here, click the below
    image to support MyCockpit site.
    Click Here To Contribute To Our Site

    Re: Strange D260 & D261 output into link2fs causing servo jitter?

    Try editing the line 709
    if (KpinNo > 22 && KpinNo != 26){ // start of "Keys" bit and eliminates servopin 26
    Serial.print ("D");
    Life was hard, but then came Windows 7.
    Now we can fly! --------
    --------

  4. #4
    25+ Posting Member
    Join Date
    Oct 2015
    Location
    United Kingdom
    Posts
    34
    Contribute If you enjoy reading the
    content here, click the below
    image to support MyCockpit site.
    Click Here To Contribute To Our Site

    Re: Strange D260 & D261 output into link2fs causing servo jitter?

    Thanks guys, I'll try that tomorrow and let you know. Great help and support here.