Using the ArduPilot onboard OSD is possible on board types that have an external SPI port accessible, including Pixhawk. All it requires is a MAX7456 type OSD SPI breakout board like this: http://www.hobbytronics.co.uk/max7456-osd-breakout
and a few lines added in the respective board’s hwdef.
All OSD code processing is done onboard your flightcontroller. There’s no firmware processing for the OSD board required as it only carries the video chip circuitry. OSD settings handling is done via parameters just like with onboard OSD type hardware.
I have added OSD hardware to a revomini board using the SPI pins accessible on OPLink port:
setting the OSD active and making the build system add the required font binaries:
see onboard OSD type flight controllers’ hwdefs for reference.
there might be other solutions coming up to support external backends to ArduPilot OSD on hardware without video overlay chipsets. this one imho is fairly easy to do on current code base and adds a noticeable amount of convenience and functionality compared to using 328p type standalone OSD hardware.
Basti I think you just saved a uart for a lot of people!
I didn’t know those breakouts existed! @tridge this might be a reasonable default for external spi buses (or a good enough excuse to parametise spi)…
If that could be useful for someone, The SPI4 definition and wiring for PixRacer
(But this is not tested yet, waiting for OSD breackout board to arrive)
all those minimOSD boards catching dust didn’t let me rest, so i tried to modify an airbot microOSD and access the videochip’s SPI. i actually found that the airbot microOSD (the one i prefereably used as a standalone for the AB7456’s stability and low power consumption) does have SCK, MISO and MOSI exposed as solder-pads:
that’s pretty cool as it reduces delicate solderjobs to the CS pin. that’s pin 8 on the 7456 chip, connected to pin 10 (=PD6) on the 328p. so i took the atmega off:
the solder pads for SCK, MISO and MOSI can be routed to the UART pinheader pads that are not in use anymore without too much hassle. i then added an additional pin on the input side to connect CS to:
Yes, all works great! The only problem was the SPIDEV name, as I wrote above.
Also I’ve set 2MHZ just for a case, because there is a relatively long wires. This seems didn’t affect anything.
How do I determine the correct DEVID when I change the SPI table?@vierfuffzig@sergbokh
In fact, I hope to configure a spi port on the pixracer for optical flow.
I may be wrong but for SPI devices I believe DEVID just need to be an unique number on the SPI bus. So if there is only device on SPI4 bus then DEVID1 should be OK.
I am new here, and i am new in ardupilot. I have a pixhawk 1 with six blheli_32 esc’s. The telemetry works great, but i want to see the esc’s current on osd. I ordered a MAX7456 breakout board, and connected it to SPI port. But how will it work? I dont’t know what is hwdef, or how can i modify it. Please can somebody write a step by step guide for me?
@kalalaa as for now adding an external SPI OSD backend to pixhawk type hardware requires individual changes to the respective board’s hardware definition file (hwdef) and compiling a customized firmware.
this http://ardupilot.org/dev/index.html is the best place to start for setting up a build environment.
on a sidenote, there’s a PR pending for adding the ext. SPI OSD defines to fmuv3 default firmwares. it’ll need some more effort from my side to get a decision if it adds any value though… https://github.com/ArduPilot/ardupilot/pull/11259