Wrote Temperature and Humidity Control Algorithms for Conviron CMP3000

After completing the floating point math package, I dove into writing custom PID control algorithms for the Conviron CMP3000 controller.   We were able to attain temperature control to about +/- 0.1 deg C and humidity control to about +/- 2% RH, in chambers with interior size ranging from about that of a refrigerator to the huge PGR-16, about the size of a double garage.  Of course, the control system was only part of the story – the rest was the smart engineering of the chambers themselves, with the well-distributed airflow.

These chambers were installed worldwide, including China, Hungary, and all over North America.  They were most often used for growing plants in reproducible conditions, generally to test the efficacy of specific nutrients, herbicides, or growing conditions.

By the time I was taking 3rd year controls, I had already coded this commercial control system, shipped hundreds, stomped my own bugs, and had to drive repeatedly across town to deliver EPROMs to fix my mistakes!  That gave me a really good perspective on product development.

Still working on the Motorola Exorciser, most of the control algorithms were implemented in Motorola MPL, only having a few small portions in assembly language for speed.

As it turned out, the MPL compiler had a few bugs – one which turned out to be quite problematic, was in the reference to absolute address values (generally hardware registers) which were called “the ASCT”.   I guess other development shops would not access ASCT registers from MPL, but thunk down to assembly for that.  But, for us, it was convenient to access our EEPROM using ASCT, but MPL would erroneously spit out assembly code putting ASCT registers in PSCT, the program segment.  What to do?  Well, Lorne Repas realized that the MPL compiler was using a simple table lookup internally, found the table, and hacked it so that it would recognize the keyword ANY, emitting the legitimate (but previously not used by MPL) keyword ANY in the assembly output.  Problem solved!  So we didn’t program in MPL, we programmed in MPL2, unknown to anyone except Vansco.