E-OSD Flash Firmware for RSSI Display using Arduino

As discussed previously, The E-OSD has two “bat inputs”, one can be used for monitoring main battery voltage, the other can be used for displaying RSSI. However the displayed value for RSSI is not very user friendly. I found a customized firmware for the E-OSD, that turns the voltage value into percentage (instead of 0V to 3.3V, we now see 0% to 100%). In this post I will explain how to flash this firmware on the Hobbyking e-osd. E-OSD flash firmware can be done by using many tools, here I will be using the Arduino.

OSD is an useful device that overlays flight information on your FPV screen.

e-osd-custom-firmware-rssi

The firmware can be found here: http://www.rcgroups.com/forums/showpost.php?p=26238951&postcount=3213

This OSD provides programing pins and it’s easy to access. I just soldered some female jumper headers to them.

e-osd-unwrapped

e-osd-flash-pin-solder

 

I then connect it to the Arduino, according to this diagram.

E-OSD-flash-pinout

e-osd-flash-arduino

The way to flash the e-osd, is the same way as flashing the KK2. Once downloaded the firmware, connected wires, open up a CMD window, and use command similar to this. (You will need to modify it according to your setup)

D:flashtoollibavrdudewindows>avrdude -P COM4 -b 19200 -c arduino -p ATmega88
P -v -e -U flash:w:"D:EOSD_customcl-osd.hex":i

It only takes 1 min to finish flashing, and this is the output I get. Once it’s finished, you have a great cheap OSD that can output RSSI value! Sweet! :-D

avrdude: Version 5.11svn, compiled on Jan 18 2012 at 22:40:34
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "D:flashtoollibavrdudewindowsavr
dude.conf"

         Using Port                    : COM4
         Using Programmer              : arduino
         Overriding Baud Rate          : 19200
         AVR Part                      : ATmega88P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page
      Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  Max
W   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ---
-- ---------
           eeprom        65    20     4    0 no        512    4      0  3600  36
00 0xff 0xff
           flash         65     6    64    0 yes      8192   64    128  4500  45
00 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  45
00 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  45
00 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  45
00 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  45
00 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0
 0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0
 0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 2
         Firmware Version: 1.18
         Topcard         : Unknown
         Vtarget         : 0.0 V
         Varef           : 0.0 V
         Oscillator      : Off
         SCK period      : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e930f
avrdude: safemode: lfuse reads as F7
avrdude: safemode: hfuse reads as DC
avrdude: safemode: efuse reads as 7
avrdude: erasing chip
avrdude: reading input file "D:EOSD_customcl-osd.hex"
avrdude: writing flash (3302 bytes):

Writing | ################################################## | 100% 5.60s

avrdude: 3302 bytes of flash written
avrdude: verifying flash memory against D:EOSD_customcl-osd.hex:
avrdude: load data flash data from input file D:EOSD_customcl-osd.hex:
avrdude: input file D:EOSD_customcl-osd.hex contains 3302 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 4.28s

avrdude: verifying ...
avrdude: 3302 bytes of flash verified

avrdude: safemode: lfuse reads as F7
avrdude: safemode: hfuse reads as DC
avrdude: safemode: efuse reads as 7
avrdude: safemode: Fuses OK

avrdude done.  Thank you.


D:flashtoollibavrdudewindows>

4 thoughts on “E-OSD Flash Firmware for RSSI Display using Arduino

  1. Gian Luca

    Hello Oscar,

    Your guide was really very useful to me. I flashed 2 e-osd but , unfortunately, I’m experiencing the total impossibility to set them values. I mean , on my monitor i can only see ,in left up corner main voltage and half percentage of rssi. For rssi, my RX -L9R output is 1,8 volt(don’t know why) and , obviuosly, I only see 15-16% RSSI. I need to set position and RSSI value but, pressing and holding E-Osd toggle doesn’t work on both re-flashed. I hold it 3-5-10…..sec….but nothing….
    How can I’do?

    Tk for your answer at all

    Reply
  2. Adam Weiss

    First off, I love your site. You have all kinds of helpful articles on here. I was just on here the other day while I was trying to figure out the different flight modes for MWC.
    Anyways, I’ve been trying to get this E-OSD firmware flashed onto my board and have not had much luck getting it 100% setup yet. I can flash the hex file successfully. I have done this both with an Arduino Uno and with a USBASP programmer and it appears as if it has worked on both of them. However, when I plug the OSD in, I get white blocks where the text should be. According to some forum posts that I have found, this is because I have not been able to write the character set to the eeprom. Any idea what I’m missing here? Do I need to use a different command to write the eeprom? I have tried adding “eeprom:w:cl-osd.eep” to the end of the command and it just seems as if it ignores it. I’m completely lost.

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

Are you Robot? *

I only check blog comments once or twice a week, if you want a quick reply you can post your question on this forum IntoFPV.com... You might get a faster response from me there (multirotor related only).