Avatar

Michael Hope

Software Engineer

Google Zürich

Biography

I’m a software engineer from Christchurch, New Zealand now in Zürich, Switzerland.

Interests

  • Autonomus machines, especially drones
  • Developer tools
  • Languages, and their use in embedded
  • Embedded software and electronics

Education

  • Electrical and Electronic Enginnering

    University of Canterbury

  • Mathematics

    University of Canterbury

Recent Posts

Updates to wordclock

A few years ago I made a MicroPython based word clock ( example). I’ve refreshed it to work with the latest version of MicroPython and added a MQTT based interface to Home Assistant.

OpenWrt as the first point in my network

I’d like to separate the primary and secondary services in my home network so, for example, a problem with Nginx doesn’t break the home automation. The current plan is to put the primary services including routing and basic automation onto one simple machine and see if that helps.

Toy 8 bit CPU

I decided to step back from the full 6502 and implement a toy 8 bit processor. I ended up implementing Soo-Ik Chae’s architecture from https://ocw.snu.ac.kr/sites/default/files/NOTE/6639.pdf. Zachary Yedidia’s SystemVerilog Guide was a useful guide to idiomatic SystemVerilog, and David Money Harris’s MIPS implementation from CMOS VLSI Design 4th Ed.

FPGA and blinking lights

Today I got the OrangeCrab blink example running on my board, yay! My daily driver is a Pixelbook, so I resurected an old laptop and put Debian stable on it so I could have a good set of USB ports.

WireGuard as a home VPN

I’ve just set up WireGuard on my home server and it’s pretty easy even without an UI. I’m now using it as a VPN from Android, Chrome OS, and Windows.

Projects

Ausdauer

A build of the Sawppy rover

Solar in CH

A build log of my work-in-progress project to solar power my home server.

ST Link v2 clone as a dev board

Notes on using an Aluminium case ST Link v2 clone as a development board

Zephyr Project

Added SAMD21 support to the Zephyr ROS

C++ in 2017

Seeing how C++17 compares to Go

spdbt

A fast indoor mousebot

pipoint

A rover tracking camera

Citizen

A balancing robot written in Go and running on ARM Linux.

Solar power for my office

I’m getting a 10 square metre office built in the garden. Let’s solar power it! This page has notes. Most bits are from Jaycar. A 380 W pure sine wave inverter.

Ideas

Ideas for future projects.

nppilot

The Never complete; often never started autopilot.

Others

Some things I’ve hacked on.

PL/0 implementation

A toy compiler for the PL/0 educational language.

ser2neo

ser2neo makes it easier to drive a NeoPixel ring

Templates

Markdown templates for project plans, etc.

Notes

ArduRover based nppilot log

Day 1 Controller brownout when accelerating. I can reproduce this on the bench by gunning the throttle with the wheels off the ground. The documentation suggests that the power module is designed for 3S batteries, not the 2S equivalent that my 7.

LPC810 Hacking

The LPC810 is a Cortex-M0+ in a 8 pin PDIP. PIO0_5 /RESET (o ) PIO0_0 U0_RXD PIO0_4 U0_TXD ( ) Vss PIO0_3 ( ) Vdd PIO0_2 ( ) PIO0_1 /ISPEN See also the user manual.

NAZE32

The NAZE32 is a STM32 based flight controller. I own a rev5 version with the baro and magnetic compass that would be a great sensor and controller board for nppilot. This page has notes on the hardware itself.

Bone v2

I’m using a small, no-name RT5370 from ebay. It’s not fast but it is compatible and reliable, unlike the other three adapters that I have. Disable interface renaming: cd /etc/udev/rules.d; ln -sf /dev/null 70-persistent-net.

Machines

crucis Thinkpad R500 P8600 HD3470 Uses PC3-8500 / DDR3-1066 orion ASUS 1215B Uses DDR3 PC3-10600 2 x SO-DIMM Spare Kingston KVR800D2S5/2G: 2GB 256M x 64-Bit DDR2-800 CL5 Elpida 1GB 2Rx16 RC2-6400S-666

Mini Xplus as a Server

Random, incomplete notes on using a Miniand Tech Mini Xplus H24 as a server machine. v2 I’ve soldered up a serial port so doing things from scratch is much easier.

Mugs

From left to right: Prague for the 2010-07 sprint Orlando, Florida for the 2010-10 LDS Budapest for the 2011-05 LDS Dallas, Texas for the 2011-01 sprint San Francisco, California for the 2012-02 Connect Orlando, Florida for the 2011-10 Connect Brisbane, Australia for the 2011-01 LCA Hong Kong for the 2012-05 Connect San Diego, California for the 2012-08 Plumbers Copenhagen, Denmark for the 2012-10 Connect I’m missing a Cambridge mug for the 2011-08 Connect and Shenzhen for 2011-11.

AVR Hacking

Programmer JTAG Name M168 T85 3 - MOSI 17 5 4 - RESET 1 1 5 - SCK 19 7 6 - GND 8 4 7 - MISO 18 6 ATTINY85 PB5 (o ) VCC PB3 ( ) PB2 PB4 ( ) PB1 GND ( ) PB0 Serial 5V o o o o TX o o RX

ARM host

I’d like a lower power server for inside my home. Some requirements: Cortex-A9, quad core, 1.2 Ghz or more. 2 GiB Ethernet. USB hosted is OK, native gigabit is better. 2 or more USB ports.

Builder

I’d like to set up clean auto builds of my personal projects and some upstream projects like crosstool-ng, gcc, and binutils. Clean install I’d like the build to run in a clean setup so the base system can be used for general development without affecting the build results.

CopterControl

TCHAIN_PREFIX = arm-none-eabi- export CODE_SOURCERY = NO to skip -fpromote-loop-indicies Command line programming There’s an experimental command line programmer in ground/openpilotgcs/src/experimental/USB_UPLOAD_TOOL. Use http://juju.net.nz/src/pilot-hacks.git/tree/opuploadtool.mk to build it. Custom code The link command is

Olimex STM32-H103 Notes

The Olimex STM32-H103 is a ST STM32F1 based development. Pluses are the USB port, proper JTAG connector, and all I/O out on 0.1" pitch pins. Details: STM32F103RBT6 CPU 128 Ki flash, 20 Ki RAM, 72 Mhz Standard 20 pin JTAG connector Green STAT LED on PC12 8 MHz crystal Links:

Synology DS123 Hacking

Links SynoCommunity Optware What’s running The usuals cron inetd syslogd rsyslogd hotplugd Services ntpd sshd Apache httpd 2.2.22 postgres cupsd Sambda nmbd / smbd snmpd avahi-daemon lighttpd for MediaServer Layout Generally under /usr/syno with one directory per package.

Remote work from New Zealand

I’ve worked remotely since 2009. Here’s some random notes. Organisations The New Zealand Open Source Society: http://nzoss.org.nz/ Canterbury Software Cluster: http://www.canterburysoftware.org.nz/ Institute of IT Professionals (old NZCS): http://www.iitp.org.nz/ Christchurch Robotics Club:

C++11 abuse

Using the new features in C++11 and the GCC extensions in anger.

Fancybox

OpenWRT can do quite a few things I need on my network that are running in many places, including: DHCP server with DNS hooks - dnsmasq Netboot/DHCP/TFTP server - dnsmasq Proxy - polipo It could let me use IPv6.

LPC1114 Temperature Sensor

The idea is to use the Cortex-M0 based LPC1114 as a low power micro in a remote temperature sensor. Use a solar light as the case and power source and it should run forever.

Jaycar MP3735 MPPT solar charge controller

I’m using the Jaycar MP3735 12V/24V 30A MPPT Solar Charge Controller for charging my office. It’s got a micro on board so let’s open the box and try and get more information out of it.

BeagleBone

This page has terse notes on installing the Linaro LEB root filesystem on a BeagleBone, setting up the USB Ethernet gadget, and enabling basic networking. Initial Grab the boot partition contents to get MLO, u-boot, and the kernel.

libmad on the BeagleBone

(or really any Cortex-A) [[notes/bonemad]] I’m mainly interested in performance as power used ~= 1/performance. Using libmad-0.15.1b-7ubuntu1 from Precise and Linaro GCC 4.6 2012.02 as a cross build setup. Has its own complicated and out of date way of selecting the optimisations.

BeagleBone playing media

I have a XITEL MD-PORT AN1 USB Audio adapter. It sounds quite good. Can I hook it to my BeagleBone and use it as a remote audio player? On Precise I see:

Running Ubuntu armel cloud instances manually

Documentation: https://help.ubuntu.com/community/UEC/Images The image itself: http://uec-images.ubuntu.com/oneiric/current/oneiric-server-cloudimg-armel-disk1.img This is the plain QCOW2 image. The normal one includes OMAP3/4(?) kernel but I’ll use the vexpress-a9 Linaro hwpack instead. michaelh@crucis:~/linaro/tests/qemu/img$ qemu-img info oneiric-server-cloudimg-armel-disk1.img image: oneiric-server-cloudimg-armel-disk1.

StatusNet installation

Download 1.0.1. Needs PHP 5.2.3+, MySQL, various extensions. apt-get install php5-cli mysql-server php5-curl php5-mysql php5-gd php5-gmp Would be nice to shift to Debianised versions of the external libraries. MySQL password with a c.

Syncing over MTP

info.product = ‘GT-P7510/Galaxy Tab 10.1’ info.vendor = ‘Samsung’ usb.serial = ‘304D19FDB028588E’ info.capabilities = { ‘camera’, ‘portable_audio_player’ } According to: https://answers.launchpad.net/ubuntu/+question/69910 Set /etc/hal/fdi/policy/no-mtp.fdi: portable_audio_player camera