embedded
microcontroller-based real-time industrial systems
|
|
EMBEDDED SOFTWARE: Microcontroller real-time interrupt-driven systems in assembler and C language with multiple stacks and task switching, usually supporting the two or more lines of large-character print in Loveshaw industrial printers but also executing other system tasks — that is, my own custom RTOSs. Most projects included a user interface conducted in the background, from RS232 terminal to PC CRT to bubble keyboard/LCD — the systems were low-rent single-CPU systems that printed and also talked to the operator, often concurrently. HARDWARE: Bringing new microcontroller-based gadgets to life, finding/fixing hardware flaws, figuring-out operation (or not) from schematics, and writing/integrating firmware into hardware design — and modifying and creating hardware designs, culminating in a glorious DMA PC card. DEBUG: Chip-level PC-based debugging and/or the older ICE equipment, along with logic analyzers, oscilloscopes, and other test/debug. Around 1985, I designed/fabricated my own 8048 h/w debugger + cp/m host software.
C++,
OBJECTIVE DELPHI PASCAL with Delphi RAD programming environment since 1996, for numerous utilities, printer-control programs, the odd database project, and a TCP/IP client/server PC product. See reflections on Delphi class assignment, the dubious antique OwenShow Windows / Linux project, and MySql Considered Harmful.... *NIX: A few weeks now and then on the Linux/Mac/Unix command-line. I speak, read, and write English, and have created
extensive DOCUMENTATION
— see owenhelp —
manuals,
and diagrams.
... I like
to comment code.
... I
don’t lose source or documentation, over the years generating
numerous BACKUP CDRs,
zip
and other
disks, tapes, thumb drives, and
I’ve
preserved and used detailed records —
source, operator
manuals, graphics — from as long ago as 1985. Although I finally
moved the last listings out to the shed.... EDUCATION: BS in Computer Science, New York State Regents External Degree Program, 1984. This institution, now known as “Excelsior” college, probably still provides access to no-classtime all-test (GREs etc.) degree certification, at www.excelsior.edu. EXTORTION:
And
then, in the harsh cold future, I noticed that my pitiful certification
had faded,
up there on the wall. I discovered while attempting to scan the thing,
that it was copy
extorted!
— it was printed on probably the cheapest parchment paper in the
universe, which scanned badly/intentionally, the better to goad the
unfortunate receipient into paying extortionate fees to get
another. It was
contained in a stupid plastic frame which was probably part of the
original package, although I seemed to have funtaked the But
I had obviously recognized these problems in my younger forgotten days
and did indeed scan the thing
then, into degree.tif, from which the image above IQ: 131 — at least according to the Tickle online test, which I took after the Monster job site goaded me. Tickle also said
Then they offered to sell me a report that would tell me more.... |
Shameless frivolity,
with my virtual organs and silly
cameras, in paradise....
... But in the still serenity and beauty ... something was missing. ... Pathetically, shamefully, after the dust cleared ... I missed work! ... So in commemoration of more than a few flawlessly joyful hours designing imaginary printers, I figured I could just as well do that here with my own brand-new enterprise and logo. ... So, a new paradisiacal biz card:
|
||
![]() |
![]() |
![]() |
(Below, I preserve in tottery HTML my quaint antediluvian activities of yore....)
|
But then again, I did do the first version (shown here) with the big chip on the wrong side of the PCB so it didn’t actually fit into the units; but all fixed after another Eagle run. ... And a few of these things were built, and somewhere they may actually print. ... It’s almost as good as the reported North Pacific tuna boat printer installation. |
... Other
LATTER
DAY 68HC11-based
product maintenance included Basic
language and the Qlarity
G55 terminal — a handy controller for various
Loveshaw gadgets, including
third-party printers used with the company’s labeler.
It supports an RS232 interface, still common (and cheap) in
industrial environments, which was used for utility features in
Loveshaw
products. The (free!) PC-based
programming environment
is
reassuringly / alarmingly familiar to those of us who have used Visual
Basic, Delphi etc.: you get to “paint” the GUI,
and then write bits of Basic code to string it all together and
actually
do something.
THE
Z80
YEARS: When I
arrived at Loveshaw in 1984
I took over a Z80
assembly
language industrial printer project with a bubble
QWERTY keyboard and
2-line LCD screen.
I typed
the assembler code
into a CP/M Kaypro
microcomputer
from printed listings. The design
used 556 timers
for the central
ink valve timing, controlled by thumb wheel
potentiometers on the
front
panel. Which was odd since there was also a Zilog
CTC
“Counter Timer
Circuit”
LSI chip
with
four
digital timers. Two of these were squandered on product delays
— the interval from photocell trigger to printing, which
were
set
by yet more thumb wheels; I think one timer was used for
baud,
with one left over. So I did a
redesign with the CTC doing the valve timing, and everything
else in software — which is why the Deity created
microprocessors — and found only a
few hardware cuts and jumpers
made it work right, suggesting
the design may have lost its way once....
The system
went on to many glorious permutations over
many
years, including
two advanced CRT
terminal
versions. Supporting these products were my PC
control programs —
at
first,
simple command-line / character-based
in MSDOS,
and then Windows
3.1, where I
ingeniously
reused existing
C-language code from the character-based programs
via a
DLL and coroutines.
In this and most of the subsequent printers, a single embedded CPU supports real-time printing via interrupts + implements the user interface (print message editing, menu features) in the background.
In
the late ’80s,
the company
entered the 8088
/ 68HC11 era: a 6811 version
of the Z80 product was designed, and then a more elaborate 8088-based
system.
My
6811 assembler code was basically a tidied-up translation of the Z80
products. My 8088 software was assembler + C, including coroutine
code
for multitasking.
I wrote various PC programs to provide access to both the 6811 and 8088
designs.
Both units used industrial bubble keyboard / LCD
handheld units.
The
6811 won — the hardware design was simpler/cheaper,
particularly
after the handheld was “absorbed” into the main
chassis.
Numerous variations on this basic printer continued for years,
ranging from 5 dot single-head machines up to 6
heads, +
newer technology higher-resolution 32-dot devices. I diverged the
software
to follow the hardware models — but the
code was fairly common to all. Along
the way, avoiding
the endless
struggles typical with cross-assemblers,
I
wrote my own.
My Windows
programs
for the printers
supported message
edit/change and other features, including graphics:
the
letters in
a printer graphics
font
were
replaced
with
images loaded from
the PC
program .
My industrial RS422
network for
the
6811
design allowed multiple printers to connect to a single PC with
longer
cable runs / less cable, and also
alleviated the then-limited supply of PC serial ports.
I wrote multi-language
“localization”
interfaces;
in the most elaborate cases including utility software to allow
user customization.
Around 1996, I wrote a Delphi program to provide a graphical Windows 3.1 interface for the printer — i.e., on a separate normal PC running Windows. The program included a cute printing-preview graphics screen. As usual, the Windows program communicated with the printer through an RS-232 link language I created. |
The software macros encapsulating input/output and delays look like
waitms ApplSolenoid ApSolenoidOff A variable-to-menu
makevar ProductDelay,defPD,0,BigMax makevar ApplSolenoid,200,50,20000 which were translated into variables for the execution logic, and entries in a menu for the operator.
|
|
|
The second project was an LCD/bubble keyboard terminal, with the goal of reducing the expense of multiple printer purchases with a single operator interface device (i.e., a separate low-rent LCD serial terminal). I found a clever keyboard scanning technique on the web: In the average keyboard scanner circuit, the square root of the number of keys + 1 or so, times 2, is the number of microcontroller pins needed. But using the bi-directional capability of most modern microcontrollers, that can be reduced to the square root of the number of keys times 1, plus 1 or 2 or so, + a forest of diodes and resistors — which generally are cheaper than microcontroller pins.... One of the striking charms of the PICs — aside from their low-rent development equipment — is their utterly barbaric assembler. Fortunately MicroChip has an adequate macro language, essential in such situations. |
|
The printers themselves were stuck in the inexpensive past, with my simple RS232 or RS485 proprietary network designs. The new Windows + Delphi + third-party Internet components + Marshallsoft’s 32-bit serial DLL opened new vistas, supporting ethernet connections as well as USB serial (32 ports — or more!) and, with a little luck, actually running on the next operating system Microsoft© released — and, indeed, it did run without complaint on XP when it showed up — out of the box! ... On
the
other hand, there are numerous $150 industrial TCP/IP / RS232 / RS485
boxes
that apparently do everything my server did, and no PC
required. But the Win32 program, which also supplied normal
printer
control
functions through the usual serial link, only took a bit of
disciplining to work OK in Vista; and, later, Windows 7! |
|
My
linker has an
option which bumps
a module that might enter this forbidden zone, but that merely works
and doesn’t optimize usage in
the region. ... So I wrote SCRAMBLE, which would try random
rearrangements of modules for the best fit. At first, SCRAMBLE was
so optimal, it saved the bytes occupied
by the EEPROM hole! — because
a
coincidental bug in both SCRAMBLE and my
linker wouldn’t
bump a module if it happened to just hit
the B600
boundary (which might explain some mysterious bugs of the past). ...
Astonishingly, SCRAMBLE + my linker After I fixed both programs, the best solution is still when a module hits B600 precisely, so not a byte is wasted before the boundary, but now the linker and SCRAMBLE correctly bump the module to B800. SCRAMBLE does 100,000 iterations — about 3 seconds in 16-bit 1988 Turbo C — but the actual solution takes around 13,000 tries. ... Thank goodness for those Pentiums.... |
|
|
|
|
|
|
And of course numerous printers required font support and I wrote numerous “ASCII-to-font” programs, where patterns like
are converted to the bits and bytes needed by the printer. |
|
|
|
|
|
|
And my beloved Owenshow almost certainly will never Linux again anyway, at least since every new edition of the lovable super-free open source operating system makes programs that ran on previous versions fail, which includes poor Owenshow.... |
|
|
|
|
|
|