Display RSSI with ArduCAM OSD

3689457599?profile=original

Firmware and Windows Client are made from a modified version of the orginal one found here : arducam-osd

 

Update 30 January 2013, new version include :

  • Possibility to choose what parameter to tune with CH6

 

To enable this feature and display selectable parameter screen (screen 1)  :

  • motors must be disarmed
  • CH7 switch is engaged
  • Full throttle and full pitch

 

After you'll we see a check screen (screen 2) where you have to :

  • Put throttle in low position
  • Put pitch in middle position
  • Put CH6 in middle position

Then you can select parameter (screen 3) to tune with CH6, those parameters are :

  • STABILIZE_KP
  • RATE_KP
  • RATE_KI
  • LOITER_KP
  • LOITER_RATE_KP
  • LOITER_RATE_KI
  • NAV_KP
  • NAV_KI

 

  1. Move pitch stick to move between parameter list
  2. Select with full throttle a parameter to be tune with CH6
  3. Quit screen and start tuning the selected paramter with CH7 switchin off position

 

After tuning a paramter, go back to screen 3, and save new parameter value with yaw stick to the left.

 

Compiled firmware : 20130129_ArduCAM_OSD_.rssi.time.status.climb.current.tuning.mavlink1.0.hex

Firmware sources : Arducam_osd_src.zip

Update 16 August  2012, new version include :

  • Mavlink 1.0 support
  • Flying time (count when throttle is above 20%)

 

Compiled firmware : ArduCAM_OSD_.rssi.time.status.mavlink1.0.hex

Firmware sources : Arducam_osd_src.zip

Windows client sources : OSD_IDE.zip

 

Update 23 May 2012, new version include :

  • RSSI Display
  • T° display (maybe useless :) )
  • Climb rate
  • Armed / Disarmed status (with Flight Mode)
  • Speed in km/h
  • No more "Charset update"
  • Battery remaining (not tested)

"Charset update" was removed hardcoded, so to upload a new charset, you'll have to use the orginal firmware to do it and after you can use this firmware.

This new version need a new charset (MinimOSD_20.mcm) and the new client

Firmware : ArduCAM_OSD.rssi.amp.status.hex

Client : OSD_Config_RSSI_Status_Amp.exe

Charset : MinimOSD_20.mcm

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones

Comments

  • Just incase someone wanted the info.

    Rssi on APM 2.50 ArduPlane changes needed

    In

    GCS_Mavlink find

    static void NOINLINE send_radio_in(mavlink_channel_t chan)

    {

        uint8_t rssi = 1;

        mavlink_msg_rc_channels_raw_send(

            chan,

            millis(),

            0, // port

            g.channel_roll.radio_in,

            g.channel_pitch.radio_in,

            g.channel_throttle.radio_in,

            g.channel_rudder.radio_in,

            g.rc_5.radio_in,       // XXX currently only 4 RC channels defined

            g.rc_6.radio_in,

            g.rc_7.radio_in,

            g.rc_8.radio_in,

            rssi);

    }

    comment out the "uint8_t rssi = 1;"

    should look like this

    static void NOINLINE send_radio_in(mavlink_channel_t chan)

    {

        //uint8_t rssi = 1;

        mavlink_msg_rc_channels_raw_send(

            chan,

            millis(),

            0, // port

            g.channel_roll.radio_in,

            g.channel_pitch.radio_in,

            g.channel_throttle.radio_in,

            g.channel_rudder.radio_in,

            g.rc_5.radio_in,       // XXX currently only 4 RC channels defined

            g.rc_6.radio_in,

            g.rc_7.radio_in,

            g.rc_8.radio_in,

            rssi);

    }

    This will allow the message to send a value, instead of a fixed 1.

    Next in the sensors section find the following section

    static void read_battery(void)

    {

    if(g.battery_monitoring == 0) {

    battery_voltage1 = 0;

    return;

    }

    if(g.battery_monitoring == 3 || g.battery_monitoring == 4) {

            static AP_AnalogSource_Arduino bat_pin(BATTERY_PIN_1);

    battery_voltage1 = BATTERY_VOLTAGE(bat_pin.read_average());

        }

    if(g.battery_monitoring == 4) {

            static AP_AnalogSource_Arduino current_pin(CURRENT_PIN_1);

    current_amps1 = CURRENT_AMPS(current_pin.read_average());

    current_total1 += current_amps1 * (float)delta_ms_medium_loop * 0.0002778; // .0002778 is 1/3600 (conversion to hours)

    }

    #if BATTERY_EVENT == ENABLED

    if(battery_voltage1 < LOW_VOLTAGE) low_battery_event();

    if(g.battery_monitoring == 4 && current_total1 > g.pack_capacity) low_battery_event();

    #endif

    }

    a whole section will be added. it should look like this for APM2

    static void read_battery(void)

    {

          static AP_AnalogSource_Arduino RSSI_pin(8); //on amp1 is A7 pin closes to xbee pins.

    temprssi = RSSI_pin.read_average(); //need rssi to be 8 bit value so div by 4, highest value is 1024

                    temprssi = temprssi - 4;

                    if (temprssi < 0 ){

                                        temprssi = 0;

                    }

                    rssi = temprssi / 4; // by now rssi should be 0 to 255, on decode * by 4 for full value, lose 4 points

    if(g.battery_monitoring == 0) {

    battery_voltage1 = 0;

    return;

    }

    if(g.battery_monitoring == 3 || g.battery_monitoring == 4) {

            static AP_AnalogSource_Arduino bat_pin(BATTERY_PIN_1);

    battery_voltage1 = BATTERY_VOLTAGE(bat_pin.read_average());

        }

    if(g.battery_monitoring == 4) {

            static AP_AnalogSource_Arduino current_pin(CURRENT_PIN_1);

    current_amps1 = CURRENT_AMPS(current_pin.read_average());

    current_total1 += current_amps1 * (float)delta_ms_medium_loop * 0.0002778; // .0002778 is 1/3600 (conversion to hours)

    }

    #if BATTERY_EVENT == ENABLED

    if(battery_voltage1 < LOW_VOLTAGE) low_battery_event();

    if(g.battery_monitoring == 4 && current_total1 > g.pack_capacity) low_battery_event();

    #endif

    }

    if you have a AMP1 then just one change,static AP_AnalogSource_Arduino RSSI_pin(8), to static AP_AnalogSource_Arduino RSSI_pin(7)

    There seems to be a new command in the APM libarys "AP_AnalogSource_Arduino", this seems to override the analogRead() command?

    last add the next two varables.

    static uint8_t rssi = 1;

    static uint16_t temprssi = 0;

    I put then in the ArduPlane section, radio area, see sample.

    ////////////////////////////////////////////////////////////////////////////////

    // Radio

    ////////////////////////////////////////////////////////////////////////////////

    // This is the state of the flight control system

    // There are multiple states defined such as MANUAL, FBW-A, AUTO

    byte    control_mode        = INITIALISING;

    // Used to maintain the state of the previous control switch position

    // This is set to -1 when we need to re-read the switch

    byte oldSwitchPosition;

    // This is used to enable the inverted flight feature

    bool    inverted_flight     = false;

    // These are trim values used for elevon control

    // For elevons radio_in[CH_ROLL] and radio_in[CH_PITCH] are equivalent aileron and elevator, not left and right elevon

    static uint16_t elevon1_trim  = 1500;

    static uint16_t elevon2_trim  = 1500;

    // These are used in the calculation of elevon1_trim and elevon2_trim

    static uint16_t ch1_temp      = 1500;

    static uint16_t ch2_temp  = 1500;

    // These are values received from the GCS if the user is using GCS joystick

    // control and are substituted for the values coming from the RC radio

    static int16_t rc_override[8] = {0,0,0,0,0,0,0,0};

    // A flag if GCS joystick control is in use

    static bool rc_override_active = false;

    static uint8_t rssi = 1;

    static uint16_t temprssi = 0;

    Be sure if compiling for a APM2 that you have

    # define CONFIG_APM_HARDWARE APM_HARDWARE_APM2

    in the APM_Config.h.

    I have tested it on the APM2 in flight, and it doesn't seem to afect the operation of the 2.50 APM code. I have also loaded it into the APM1, and tested on the MiniOsd.

    Of course code for the MiniOsd has to have changes to but should be posted soon, see the following link for info on that.

  • Could you explain how to, where to, connect rssi wires to APM1??

    THX :)

  • airamaf, have you posted your code somewhere? I'm tinkering with the minimOSD code myself and would like to roll in a few of your changes (such as speed in km/h).
  • Hi

    How can i connect my receiver?
    Is there a picture? :)

  • OK... thanks for the information :) I will try that

  • No mavlink 1.0 version done and planed yet. If you want to use my custom firmware with arducopter 2.6, you can disable Mavlink 1.0 and then it will ouput mavlink 0.9 messages

  • I just wanted to check if you have made a mavlink 1.0 version of your minimosd firmware... I was using your firmware before and that solved the problem having to restart the minimosd at every startup of the APM.. but now when the newest firmware of the APM is using mavlink 1.0 your minim osd firmware does not work...

  • I got a problem with Arducopter 2.6, it's impossible de read any value from analog pin A9 to A4 (issue 417), so RSSI display is always 0 for me. Anybody has the same problem here ?

  • Add this parameter  #define MAVLINK10 DISABLED in APM_Config.h to make firmware working with MAVLink 0.9

  • Yes

This reply was deleted.