Hello!! This is LogicSays, my little front on the Internet. Today is April 3rd 2007 and the site has been through a bit of a revamp since last September. Anyway. I'm an embedded developer writing firmware for little chips known as microcontrollers. These are entire computers on a chip. When you use your television remote control or start your modern car, all of these things have microcontrollers in them. We won't mention mobile phones as they crash alot, something to do with being over ambitious. At the time of writing I'm taking stock and reorganising ready to start some fresh projects.


Chris is who I work with on alot of these projects, he has his own company listed on the links page. His specialties include high voltage electricity and he has recently appeared in a BBC documentary. When we work together, Chris usually deals with the digital electronics side and I deal with the computer programs that go into the embedded chips. There is alot of overlap between our roles, since Chris needs to understand what I am doing, and vice-versa.


Digital is the term commonly used to describe something that is either on or off. A computer is entirely digital, as is almost everything today.

Analogue refers to a state that can practically be infinite. Electrical valves were true analogue devices. The mains supply is an analogue signal. Your FM radio is an analogue device. Mostly anyway, but not quite.

Resolution in digital terms could be described as how analogue we can make something that is digital. An 8-bit digital number can yeild 256 varying analogue steps in the right circumstances. A 16-bit digital number can yeild 65536 steps from 0 thru 65535.

Digital-v-Analogue which is best? We have reached the age where digital resolutions are so huge that we can emulate or mimic what was traditionally analogue.

Compact Discs are an excellent example of where the digital and analogue systems overlap. CDs store their information digitally. We hear music which is analogue. The resolution of the digital information is sufficiant to mimic the analogue sounds of music.

Error Correction is something we can do with digital information. We can store extra data which enables us to mathematically calculate what should have been somewhere. This system, which requires a digital microprocessor, allows us to predict and correct errors.

Bits are at the heart of digital electronics, the ON or OFF state. 1-bit gives us two representations. 2-bits gives us four representations, ie. 00, 01, 10, 11. Those are the possible combinations.

Nibbles is the term used to describe 4-bits. 4-bits allows upto 16 combinations. 0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111. That's eight combinations. When the leading bit 0xxx is flipped to a 1xxx, that gives us yet another eight combinations.

Bytes are 8-bit numbers. In the fashion as previously described, bytes range from 00000000 thru 11111111. This offers 256 values from 0 to 255.

8-bit systems were mainly in use throughout the 1980's. My microcontrollers which I develop here are 8-bit. It describes the size of the chunks that the computer can move about in each go.

Operations descibe how fast the computer is. The computer may be able to move one million 8-bit chunks per second. This is measured in MIPS (Millions of Instructions Per Second).

16-bit computers move data about in 16-bit chunks. In pure data shifting terms, an 8-bit system is precisely half the speed of a 16-bit system, assuming both are running at 1MIPS. It isn't that straight forward though.

64-bit systems are emerging today. These machines move data around in 64-bit chunks. In that they can move 64-bits of digital data in a single operation.

Mhz commonly describes how fast a digital system is. It partly is confused with the MIPS figure. Assume that 1Mhz = 1MIPS. Today's computers run at Ghz, as in 1,000,000 Mhz. Or 1BIPS. (Billion Instructions Per Second). Again, it doesn't run so precisely, but for simplicity, just believe that it does.

High Level Languages are required to program today's desktop computers. The operating systems and software today are modular, in that they are built one on top of another. There is today, simply so much going on inside of a modern computer, that one single person cannot control it.

Low Level Languages directly control the behaviour of the chips and hardware within computers. It is literally a case of putting the value 10010001 at location FA3D:EA00 for example. A high level language command to do this would be written in a single line. The low level equivalent will take 10x as much coding to achieve the same effect. The advantage being that you are not relying on anyone else to decide how it should be done. Low level languages give total control to the programmer. A change by a third party in software CANNOT prevent your commands working as intended. This is the beauty and total simplicity of low level languages. You are in control.

Chips are small square or rectangular components seen on computer expansion cards and alike. They are often black with little metal legs at the sides.

Computers are processors of the information that we feed into them. A computer can be big and capable like the one you are using, or small like the one in your television remote control.

Embedded computers are entire small computers fitted into a single chip. They are suitable for performing a specific number of tasks reliably and on demand.

Mission Critical is what embedded computers are.

Machine Code is the most suitable language for controlling an embedded computer. It is written as low level symbolic assembly language.

Microcontroller is the industry name for embedded computers.

My Desktop Computer runs at a speed of 2Ghz, it is a 32-bit machine, it can move 2 billion 32-bit chunks per second. It has 512MB of RAM. It has 80GB of hard disk storage.

Chips run at a speed of 20Mhz, it is an 8-bit machine, it can move 20 million 8-bit chunks per second. It has 1KB of RAM. It has 256bytes of EEPROM storage. It contains a program no larger than 8KB stored in ROM.

My MicroControllers are small square or rectangular components seen on computer expansion cards and alike. They are often black with little metal legs at the sides.

1 Kilobyte is 1024 single bytes. KB. The 'B' is uppercase to indicate a byte. Kb. The 'b' is lowercase to indicate a bit. Blame it on the people in marketing, trying to make smaller figures sound bigger to get more money out of you!!

1 Megabyte is 1024 single kilobytes. 1MB = 1024KB. Or, 1MB = 1048,576 single bytes.

1 Gigabyte is 1024 single megabytes. 1GB = 1024MB. Or, 1GB = 1048,576 single kilobytes.

Operating Systems are modular.

Modular systems are built on top of one another, often by many third parties. If one component fails, the WHOLE system suffers.

Microsoft Windows is a modular operating system. It is inheriently complex. Bugs and system errors arise due to this modular approach. No one person is responsible for how your computer in front of you works.

Stack of Cards as in "a stack of playing cards," accurately depicts modern desktop computers, operating systems, and software. The software you run on your machine, such as a word processor, is at the top of this stack of playing cards. If the cards below fall, then the cards at the top fall.

Evolution accurately describes how our modern computer systems have developed. You could not simply say, "Let's build an Internet." The whole arena of computers today have evolved from the very earliest computers of 30-years ago. I don't mean that our understandings have evolved, but literally that the computers today are evolving.

The Microcontrollers which I work with are NOT modular. They have not evolved in the sense of today's computers. I am solely responsible for what the microcontrollers I program do. If I make a mistake, the blame lays solely on me. There are no third parties or stack of cards to fall down underneath what I am trying to achieve. I work in bits and bytes performing tasks at the most fundemental level. If I wish to output graphics to a display monitor, I have to tell the microcontroller precisely how to do this.

It Is Said that you can take any modern piece of technology and mimic it's behaviour in a microcontroller. Of course within the boundaries of how much information that microcontroller can process.