Category Archives: Uncategorized

Useful commands

GIT: Show changed files in last commit
git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq

GIT: Show file history
git log -p filename

BASH: Find word in files
grep -R "word_to_search" *

Dshot times & frequencies

One frame (“pulse”) is 16 bits long.

It contains

  • 11 bits of throttle value (2047 separate throttle positions available)
  • 1 bit telemetry request
  • 4 bits of CRC checksum.

The options for Dshot speeds are:

Dshot 600 600 kbit per second Single frame: 26.66 uS (microseconds) Absolute maximum update frequency 37.5 kHz
Dshot 300 300 kbit per second Single frame: 53.3 uS (microseconds) Absolute maximum update frequency 18.75 kHz
Dshot 150 150 kbit per second Single frame: 106.6 uS (microseconds) Absolute maximum update frequency 9.3 kHz

Just a reminder: multishot pulse is max 25 uS long, multishot protocol allowing max 32kHz update speed.

For “old” methods (dshot, oneshot), see this link.

Tip: Serial ports in microcontrollers

- Use software serials ONLY for debugging. Software serials are not reliable.
– Use hardware serials primarily for interfacing with devices (GPS etc.)
– Prepare for debugging port in your design
– Program the uC through native programming method (ISP, ICSP) if you don’t have several hardware USARTs
– Make all sorts of cross-compatible adapters and cables for easy debugging
– Use two laptops for development: one for plainly debugging

When picking uC, make sure you have plenty of hardware serials. Usually one isn’t enough.

Simple Arduino Timing class

class jeTime
float elapsedInSeconds()
return (millis()-theTime)/1000.0;
int elapsedInMilliSeconds()
return millis()-theTime;

void reset()
theTime = millis();
long theTime;

Most important NMEA sentence is GPGGA

GGA – essential fix data which provide 3D location and accuracy data.


GGA Global Positioning System Fix Data
123519 Fix taken at 12:35:19 UTC
4807.038,N Latitude 48 deg 07.038′ N
01131.000,E Longitude 11 deg 31.000′ E
1 Fix quality: 0 = invalid
1 = GPS fix (SPS)
2 = DGPS fix
3 = PPS fix
4 = Real Time Kinematic
5 = Float RTK
6 = estimated (dead reckoning) (2.3 feature)
7 = Manual input mode
8 = Simulation mode
08 Number of satellites being tracked
0.9 Horizontal dilution of position
545.4,M Altitude, Meters, above mean sea level
46.9,M Height of geoid (mean sea level) above WGS84
(empty field) time in seconds since last DGPS update
(empty field) DGPS station ID number
*47 the checksum data, always begins with *
If the height of geoid is missing then the altitude should be suspect. Some non-standard implementations report altitude with respect to the ellipsoid rather than geoid altitude. Some units do not report negative altitudes at all. This is the only sentence that reports altitude.

How to: quadcopter reversed rotation of your props at betaflight (not 3D)

REMEMBER: if you screw some of these settings, the copter will violently start to oscillate. If you do first test with props on at hand, grip the copter VERY well.

enter following cli command:

set yaw_motor_direction = -1

also you might need to apply this command:

rxrange 2 2000 1000

.. depending if your yaw direction is wrong. When I had stick arming, I had to enter this to get stick arming to left corner and still get yaw to work in correct directions.

(and ofcourse, reverse your motor rotation direction at ESC and “mirror” your prop rotation direction)

Discharge-test: Graphene 65C vs Nano-tech 65C

All batteries fully loaded before tests. The test is constant resistance (1ohm) (causing about 200W discharge power) which is about 14-15A.

All kept their cell voltages really even during the tests. The 25C (really used and old battery) buffed a little at the end but took it’s shape after resting.

All batteries were a little bit warm, but certainly not hot. Ambient temperature was about 20deg celcius.