GRAYnomad Nature Photography :: Old projects
Home



Old projects

 

I spent most of the 90s employed as a software engineer and the 80s as an embedded engineer doing both firmware and hardware.

This page gives an overview of some past projects I've written, either as a personal project, a contract, or as an employee of various IT companies.

Remote water trough monitor (work)

This was a project I did while employed by Torrens Industries. It used a remote 6805 and sensors to monitor water troughs on large outback stations. The data was relayed via wireless to the homestead and displayed on a Microbee computer. I wrote all the software in assembly language and designed all the hardware except the analogue part of the wireless interface.

Up until this point Torrens Industries had not used any microprocessors, but the boss took on the project because I said "I can do that" . I did have some Z80 coding under my belt then as I was doing that at home, but the 6805 was a totally new thing and there were no forums or other help then. Very scary indeed for a "new" engineer.

Microbee mezzanine board (personal)

The microbee was a great computer for its time but is had one annoying limitation, the serial ports were bit-banged in software through GPIO pins.

I designed a mezzanine PCB that tapped into the Z80's bus and added a genuine Z80 SIO with RS232 level converters to the system.

ASIO headquaters building control system (work)

This system controlled and monitored various aspects of the ASIO headquarters in Canberra. It used a HDLC-based redundant ring network topology and for security reasons the data was transfered over optical fibre. I designed the slave prosessor board and some of the IO boards then wrote the software for them in 6809 assembler with help from a HiTech C compiler. By "help" I mean that the project was all assembler, but if I needed an algorithm to, for example, divide two numbers, I would write that in C, then cut & paste the generated assembly code into my program.

ACT fire brigade turnout system (work)

This was a system with a central controller and multiple slave controllers, one in each fire station. I designed everything from scratch (except the custom "voice over data" modem) and wrote all the software. The main controller boards used a 64180 processor (Z80 with a lot of built-in peripherals) and an 84-pin Xilinx programmable logic chip (pictured below mounted on a custom PLCC breakout board of my design). In those days I had to fly to Sydney to design the internals of the logic chip on the manufacturer's CAD system and a week or so later the programmed chips would arrive. Yikes! How the times have changed.

Lite Automation water-monitoring system (contract)

This was a post-retirement project I did for a company in Brazil, it featured multiple DIN-rail mounted PCBs, all with their own CPUs and connected via a backplane in the DIN rail.

The master CPU was an ATMega2560, and each slave used an ATMega328. All were Arduino compatible.

This is a photo they sent me of a typical installation. The blue modules on the DIN rail are my design.

I designed all the hardware but the software was written by their staff in Brazil. The system featured multiple types of IO, 100-volt digital inputs, 4-20mA inputs, 0-10V inputs, relay outputs, Ethernet and radio connections etc.

Here is an Altium 3D render of the main CPU board. It was in two halves that sandwiched together.

And here is an image showing two of the layers on the power supply module.

Last I looked this was all still in production.

The Romulator (personal)

Embedded debugging has always been a pet love of mine but constantly re-burning EPROMs as we had to in the 80/90s was a real pain and development tools were VERY expensive, so I designed an EPROM emulator based on the Zilog Z8 MCU and two GAL programmable-logic devices.

Here are a couple of pages from the brochure.

This totally automated the firmware update cycle as the new code was simply downloaded to the "EPROM" in HEX format (Intel or Motorola) by adding a "copy myfile.hex com1" line to the existing build batch file.

Note the use of a simple ASCII terminal for the user interface. This is a method I prefer even today despite the near 100% use of GUIs and touch screens in modern devices.

This is a full-page ad we ran in Australian Electronics Engineering magazine.

And finally some of the press we generated.

This product was on the market for some time. Those were heady days indeed and a lot of fun.

GenieArduino serial comms for LCD displays (contract)

This was a contract for 4D Systems (the Australian display manufacturer) to write a serial protocol for controlling their LCD displays.

This was way back in 2013 so imagine my surprise to see that it's still active and my name is still in the header.

The GIT repository is here if you want to see some of my code, and yes it is mine, despite it saying "based on code by" there is nothing of the original code by Gordon there, and as far as I can see almost nothing has been changed in those revisions either.

R3N (personal)

Serial communications for control networks is an interest of mine. Twenty-odd years ago I started a design for such a network to monitor and control items in a motorhome, this was called BUSnet.

Over time this morphed into R3N (Robust Redundant Ring Network) and I spent years (on and off) refining this concept. The design document reached nearly 100 pages and I was only half way there I think.

At the end of the day, interesting mental exercise as it was, the project was way too large for me to do alone, so it's been shelved.

Some excerpts from the documentation.

Arduino Due pinout doc (personal)

At one point I was the 3rd major contributor to the Arduino forum with over 9000 posts.

At the time the Arduino Due was newly released and there was no pinout diagram for it, so I did one and it became a format copied by many.

Oven controller (contract)

This was a contract for Omega, an oven manufacturer based in Sydney.

I completed phase one of the project, IE a working prototype...

...but I think they took that and got someone in India to take it to production.

Picman (personal)

Picman was my image management application for about ten years. It's written in VB6 on top of an Access database.


Click for full-size (168k) screen grab.

Picman works well but is looking a little dated these days, I'm still using it but am currently writing a new version in VB.NET (called SiiMAN) so the VB6 application's days are numbered.

Siteman (personal)

Siteman was my web site synchronisation program. It compares an local image of the online site and builds a list of FTP commands to be executed when I next gain access to the internet.

NOTE: This was in the early 00s when data was slow and expensive via a CDMA phone and we lived on the road with infrequent internet access.

So why not just use any of the web authoring packages or RSYNCH over SSL?

Mostly because they all do file compares over the internet and—at least when I first started connecting with a mobile phone— I didn't have the bandwidth or the time for that. It's less important these days with high-speed connection even on a mobile phone, but this system works so I still use it. Certainly it's more convenient to have my upload ready to go so I don't have to stand around with my laptop balanced on the motorbike seat while some software interrogates all 15,000 files on my site.

With Siteman I simply connect, blat the files up to my ISP, then go home.


Click for full-size (85k) screen grab.


Click for full-size (160k) screen grab.


Click for full-size (116k) screen grab.

Since moving to Vista the FTP part of this program broke so Siteman now produces a TXT file that is parsed by another program (written in PHP) which does the actual FTP uploading.

Graduate student admin package (contract)

This was written for the Australian Catholic University's Office of Research. It performed functions such as the extraction of DEET (Dept of Employment, Education and Training) statistics.

Written in Paradox Application Language (PAL) on a Paradox database.

Student practical placement (contract)

Written in C for the Australian Catholic University this package used a fuzzy-logic weighting algorithm to determine what schools the students should be placed in for the annual practical part of their course.

There were many parameters to be considered, for example

  • Student's preference, some people simply wanted to teach at a specific school.
  • Student's course requirements, not all schools taught all subjects.
  • Student's home address and that of potential schools to try and allocate a school that wasn't too far to travel from home.
  • The fact that students cannot go to a school they have already done a practical at.

All these and other requirements were input, allocated an importance weight, then tabulated and student-school scores calculated.

The result was ready in a few seconds and saved what was previously days of work by several staff on the office floor shuffling 5x3" cards around.

Library acquisitions and finance (contract)

Once again this package was written for the Australian Catholic University in PAL on a Paradox database.

The package kept track of all book acquisitions made by the university library and produced financial reports at the end of the financial year. It also lept track of all student borrowings form the library

SSA quality control testing system (work)

The SSA-NAME product is a name-matching engine used all over the world by those with huge databases, for example the police, tax departments, and immigration departments.

As part of the quality control procedure we needed to apply thousands of test scenarios against the latest release and compare the output with known good data.

This system used a combination of text input files, SED, AWK and GREP scripts to read input data, run it through the product, compare the results, and produce reports that highlighted any discrepancies.

All this was controlled by a VB6-based user interface.

SSA algorithm front end (work)

The abovementioned SSA-NAME had to be tuned to a given "population" of names, for example the names likely to be found on US Immigration database will be largely different from those on the database at the Japanese tax office.

This tuning had to be done by those with the local population knowledge and when I joined the company this was performed by tweaking tables and C source files.

To make this easier I was tasked with writing a VB6-based front end that allowed the user to define population parameters at a high level, the application then translated this information into the appropriate source code and tables.

PR1ME autopsy analyser (work)

This application extracted a memory dump from a crashed communications board on a PRIME mainframe computer and analysed the contents for hints as to the cause of the crash.

The dump was obtained from a 2904 bit-slice processor via an on-board Z8000 then uploaded. The analysis application was written in C on a PRIME mainframe.

If you think that assembly language is hard try writing some bit-slice code with only four levels on the stack. NO calls were allowed if code needed to be modified, we had to insert a jump to the new code then jump back.

 



HOME  ❖  WRITING  ❖  PHOTOGRAPHY
CONTACT  ❖  ABOUT