- Diode
- In its simplest form, a two-wire device that allows current to flow
in one direction but not
in the other.
Another name for a diode is a rectifier,
though "rectifier" usually refers to a collection of parts.
The terms full wave rectifier,
bridge rectifier, or full wave bridge rectifier all
refer to a collection of (usually) four diodes arranged so that the output
will always have the same polarity regardless of
the polarity of the input. Often the four diodes are in a single
package.
There are several subclasses of doides, the main ones to be aware
of are zener diodes which have a very
specific reverse voltage, schottky diodes
which have a low forward voltage, and LEDs or
Light Emitting Diodes which produce light (though not necessarily visible light) when they're
conducting electricity.
A photodiode is one whose conductance is
controlled by the presence or absence of light (again, not necessarily
visible light).
A varactor is a diode that acts like a
variable capacitor whose capacitance is
controlled by the DC voltage that is applied to it.
- Transistor
- A solid state device that (usually) has three wires, or "terminals",
where the signal applied to one of the terminals controls the flow of current
between the other two. Transistors can be broadly classified into two
catagories:
switching transistors that
are intended to work in an "all or nothing" fashion, and
linear transistors that are
intended to work in a fashion where a partial input gets a partial
output.
The two major types of transistors that you'll likely encounter as
a hobbyist are junction transistors
and Field Effect Transistors or FETs.
Junction transistors use a current applied to the terminal called the
"base"
to control the current between the other two terminals
(called the "collector"
and "emitter"), while
field effect transistors use a voltage applied to the terminal called
the "gate"
to control the current between the other two
terminals (called the "source" and
"drain").
Junction transistors can be divided into the more common
NPN and the less common
PNP types.
Likewise, FETs can be divided into N channel
and the fairly rare P channel.
You may also see transistors of any of the above sorts called by
the fairly descriptive names of
small signal transistors
or power transistors.
There are also some highly specialized transistors that you may
encounter. A phototransistor
is a transistor that the presence, or absence, of light (not
necessarily visible light) can control
the flow of electricity between the two terminals. In some
phototransistors an electrical connection is provided for the controling
terminal to provide a bias (adjustment).
You may also run into power MOSFET transistors
(HEXFET is a trademark of International
Rectifier for their line of MOSFETs, but is often used to refer to
the class), or their close relative the
IGBT (close, at least in
applications, though not at the raw silicon level).
These two classes of devices are strictly power switching transistors,
though they are very good at that task.
- Silicon Controlled Rectifiers
-
SCR, Thyristor, and
TRIAC
are all related devices that can control the flow of electricity.
They are switching devices, meaning they're either all the way "on"
or all the way "off".
They are also "latching" devices in that once turned on,
they usually stay on until the electricity going through them goes
away, even if the signal that turned them on goes away. (Note
that in an AC circuit, the "electricity going through them"
will "go away" 120 times a second, assuming 60Hz.)
They're useful in a lot of circuits, but a very common one is in
light dimmers, where they're set up to turn on "late" in
each half-cycle of the power, and how bright or dim the light is
gets controlled by how early or late in the cycle the device gets
turned on.
- Discrete logic
-
These are ICs that bring the "simple" logic functions
(called gates) out
to the pins so they can be connected to the outside world.
(Often a single IC will have several of the same gate, though
some have only one gate per IC.)
The basic logic functions are AND
(output is 1 if both inputs are 1, otherwise the output is 0),
OR
(output is 1 if either input is 1, otherwise the output is 0),
NAND (literally "Not AND", output is 0
if both inputs are 1, otherwise output is 1),
NOR (literally "Not OR", output is
0 if either input is 1, otherwise output is 1),
XOR (also known as Exclusive OR,
output is 1 if exactly one of the inputs is 1, and the output
is 0 if both inputs are 0 or both inputs are 1),
and
NOT or Invert (only one
input, and when the input is 1, the output is 0 and when the
input is 0, the output is 1).
By the way, every possible combination of logic can be expressed
as either a large number of NANDs or a large number of NORs, though
there are some reasons to not implement it that way.
Although not strictly a gate, you may see Schmitt Triggers
mentioned. Most types of logic have a "no-man's land"
between high and low. Most gates become undefined, and may do
bizzare things when faced with an input in this no-man's land.
A Schmitt trigger is an input that will stay at it's last valid
value while in the no-man's land.
There are several "families" of discrete logic.
Each "member" has a different set of functions, but
in general, all of the members in a family share the same
specifications on things like supply voltage and what
constitutes a 0 or a 1.
Families you're likely to run into are the
7400 family, which is
TTL ("Transistor-Transistor Logic"),
the 5400 family, which is the "military"
version of the 7400 series,
and the 4000 family, which is an old
CMOS series.
On all three of these families, the last two digits indicate
what the actual functions are, for instance, a 7404 is a 14-pin
device with six inverters ("NOT" functions), with the
remaining two pins being power and ground. Be aware that
the 7400 series and the 4000 series use different numbers for
given functions, for instance, a quad NAND gate in 4000 series
is a 4011 while in the 7400 series it's a 7400.
There are also several variants on the 7400 series, that are
denoted by one, two, or three letters following the "74"
part, but the last two or three digits consistently tell what
the function is.
For historical completeness, I'll just metion that there were
several other types of logic that were considered "obsolete"
when I started playing with electronics in the mid 1960s:
RDL ("Resistor-Diode Logic"),
RTL ("Resistor-Transistor Logic",
which was always extremely rare), and
DTL ("Diode-Transistor Logic")
ECL ("Emitter-Coupled Logic")
is another family that, as a hobbyist, you're not likely to encounter
(though if you do, it's likely to be in the 10H00 series).
ECL uses currents, rather than voltages, to represent 1s and 0s.
Besides the price of these parts, downsides include the fact that
they are very power-hungry, they use a -5.3 volt supply, and (since
they are current-based rather than voltage based) you can't use
normal oscilloscopes or volt meters to determine the state.
Their big claim to fame, at one time, was extreme speed, though
today the same speed ranges are common in CMOS devices.
If you run across BiCMOS, it's
a device with both ECL and CMOS on the same chip. (Although I
worked with both ECL and BiCMOS professionally, I've never seen
either in hobbyist applications.)
- Programmable Logic ICs
-
This refers to any of a number of devices that have a large number
of logic gates on them, and the user can configure how those logic
gates are connected, both to each other and to the input and output
pins of the device.
Typically these are used to replace a fist full of discrete logic
devices, but where, for various reasons (such as speed of response)
one doesn't want to have a full blown microcomputer.
Most of the ones that the hobbyist is likely to encounter are of
the sort that use some sort of "non-volatile" memory
(that is, memory that doesn't "forget" when power is
removed) to hold the programming, though there are some on the
market that do use volatile memory and thus need to be reprogrammed
every time the power is turned on.
There are a number of types of devices that fall into this
category, with small to major differences between them:
PAL, PEEL,
PLA, and PLD,
to name a few.
- Computer chips
-
There are a huge variety of chips that can fall into the general
classification of "computer chips".
If you look under the computer hardware
section below, you'll find a discussion of many different terms, and
most of these terms will have a good number of chips that would
fulfill that particular description.
- Application Specific IC or ASIC
-
As the name suggests, this refers to an IC that is designed for one
specific application.
Due to the high cost of developing an ASIC, and the large number
of relatively inexpensive programmable chips on the market today,
you generally only run into ASICs in gadgets where they expect
to make millions of them, things like cell phones, MP3 players,
TV sets, that sort of thing.
- Digital Signal Processor or DSP
-
This is actually a highly specialized computer chip.
It works on the incoming data (usually a digitized representation
of an analog signal, thus the name) in several stages. Once
a datum (singular of data) has been processed by one stage, it is
passed on to the
next stage so that the first stage can be processing the next
datum.
- Mixed Signal IC
-
This is an IC that belongs partly under Digital ICs, and
partly under Analog ICs.
A couple of examples are D/A Converters
(Digital to Analog Converters, or DACs)
and A/D Converters
(Analog to Digital Converters, or ADCs).
- Central Processing Unit or CPU
-
The part of the computer that actually does the "computing",
that is to say that it executes the instructions and has the logic
(electronics) to
do the required math, as well as keeping track of where the next
instruction to be executed is located.
These days, it is actually very rare to see an IC that is only a
CPU. They more often that not contain many other functions on the
same chip.
- Memory
-
This is the part of a computer that contains the instructions and
data for immediate use.
Many casual users get confused about the difference between
memory and mass storage.
- Mass Storage
-
Hardware that stores very large amounts of data and instructions for
long-term storage. The information on a mass storage device is not
instantly available to the CPU, and must be brought into
memory to be used.
A disk drive is an example of a mass storage device.
- Microprocessor or MPU
-
The term microprocessor dates back to the days when most
computers filled large rooms, and when even a small "mini"
computer would fill a fair sized table. When a "CPU on a chip"
came along, it was, obviously a "microprocessor". The big
boxes have gone the way of the dinosaours, but the microprocessor
remains. (Even todays "super computers" are made up of huge
arrays of MPUs.)
Strictly speaking, an MPU refers to a chip that is just a CPU.
However, today it is used more-or-less interchangably with the
term microcomputer, which technically
combines a CPU, some memory,
and I/O onto a single chip. Some manufacturers
use the terms CMU, CMP, or MCU
to refer to their version.
A Programmable Logic Controller, or PLC is essentially
a "microcomputer in a box", that (usually) includes a
power supply, the interface circuitry to be connected to real-world
sensors, and circuitry for controlling line-voltage mechanisms
(e.g. motors). They are usually used in industrial situations in
what is called process control applications. They are usually
programmed with Ladder Logic.
- Random Access Memory or RAM
-
Refers to general "read/write" memory, that is, memory
where the locations can be read or written in any order desired.
(Historically there were types of read/write memory that had to be
accessed in a certain order, but those are long obsolete.)
RAM is generally one of two types:
dynamic memory or
static memory.
Dynamic memory (also known as DRAM) actually stores the
data on tiny capacitors, and
the charges will fade away in a fairly short time (the spec
sheets typically say 2mS, but my testing in the mid 90s suggested
that at room temperature, reality is more like 2 seconds).
The designs always include a provision for a fairly easy refresh
cycle, which just means "resetting the fade-out clock".
The main memory in most desktop and laptop computers is dynamic.
Terms like SDRAM, DDRAM, DDR2, DDR3,
and DDR4 refer to the type of
bus that the CPU uses to communicate with the DRAM. (There are
several other types of busses as well. Many are obsolete today.)
Static memory (also known as SRAM) is memory that will
hold its contents as long as
power is maintained to the device. (OK, there are a few things
that can make it "forget", like a cosmic ray hit, but
these are fairly rare.) This means that all of the complications
of refresh circuitry is eliminated. However, the internals of
static memory are significantly more complex, and so for large
amounts of memory, static can be quite a bit more expensive
than dynamic, even allowing for the extra refresh circuitry.
Cache refers to some very high speed RAM that is on the same
chip as the CPU, and thus very fast for the CPU to access. Some
types of disk drives also have cache memory, again, because it
is faster for the disk to access than the computer's main memory.
Core memory is an obsolete term that for many years was used
to describe the computer's main memory. It came from the fact that
early computer memory used tiny magnetic cores to store the data.
(It did have the advantage that it didn't "forget" when
the power to the computer was turned off.)
- Read Only Memory or ROM
-
Today, most of what falls into the category of "Read Only Memory"
should really be called "Read Mostly Memory". This is memory
that contains things that aren't expected to change (or at least,
not change very often). ROM devices can retain their data for at
least several years, even without having any power applied.
The first ROM devices were "mask programmed", which means
that the data content was set when the device was manufactured.
Next came Programmable ROM, or PROM devices, which
were "blank" when they came from the factory, and you
used a special piece of hardware called a programmer to put the
data into them. They were only programmable one time, so if you
needed to change the contents, you had to replace the PROMs.
Next came Erasable Programmable ROM, or EPROM, devices.
These could be erased by exposing them to ultraviolet (UV) light, as
each had a small window over the actual chip. You then programmed
them using a special programmer, and then plugged them into the circuit.
Then came Electrically Erasable Programmable ROM, or EEPROM
devices.
These would be erased by a special signal. Since they could be both
erased and programmed electrically, it became common to build this
capability into the circuitry around the EEPROM. Most PCs today
use EEPROMs to store their BIOS (Basic I/O System, or what allows the
computer to know enough to load the operating system when it's first
turned on).
Flash memory is a subset of EEPROMs that can erase a portion
of the memory at a time, rather than having to erase everything all at
once.
They are used a lot in consumer goods such as digital cameras, and
tiny "flash drives" that are used as portable mass storage
devices.
- Input/Output or I/O
-
This is how the computer "communicates" with the outside
world. It can be as simple as turning an LED on or off, or detecting
when a switch has been closed, or as complex as being able to
communicate with the Internet.
I/O falls into two categories; Parallel I/O and Serial I/O.
With Parallel I/O each bit of data has its own pin, while
with Serial I/O all of the data bits share a signle pin,
going through it "single file", one at a time, like the
queue to get through a narrow doorway.
These days, Parallel I/O is used within a computer, and for talking
to multiple "real-world" (single-bit) devices.
Some examples of Serial interfaces are RS-232 and USB
for communicating outside the computer, and
SPI (Serial Periferal Interface), I2C (prounounced
"I squared C") and SATA for communications within
the computer. By the way, you'll sometimes see MISO
and MOSI used, which are acronyms for
"Master In Slave Out" and
"Master Out Slave In" respectively, to indicate the
direction of the wires connecting the devices.
Many MCUs have some Analog I/O pins that, rather than just
taking (our outputing) zero or one, will input (or output) a range
of voltages. These are useful in conjuction with
sensors.
- Interrupt
-
Provides a method for an "outside" device or circuit
to get the attention of the CPU.
A few examples are that the user pushed a button, that something
(like sending a byte via a serial link) has
been completed, or that a (real time) clock tick has occurred.
The classic example of an interrupt for students is imagine that
you're sitting reading a book, and the door bell rings. You
put your bookmark into the book (so that you can return to where
you left off) and get up and go to the door.
It is important to be aware that interrupts can be nested:
In the example, consider what happens when the phone rings while
you're headed to the door, and as you pick up the phone, the
kitchen timer goes off telling you that something needs to come
out of the oven.
Most CPUs provide special hardware that acts like the "bookmark".
There is also an interrupt vector which tells the CPU where
the instructions for dealing with the interrupt are in memory.
Interrupts can be complex and confusing to deal with, but are generally
worth the effort in that using them allows the CPU to do useful work
(or even just go into a power-saving mode) while awaiting some event.
- Other Computer Hardware Terms
-
Besides the terms connected with computer hardware that you should have
some, at least vague, familiarity with based on just using some sort of
computer, there are a few that
don't really seem to fit in any of the above categories, but still
should have some mention here.
One is Stored Program Computer.
This refers to a machine that sotres the programs in memory, similar
to the way it stores data. This is as opposed to computers that
were programmed by plugging wires into a wiring board.
I should also mention the essentially obsolete concept of an
Analog Computer, which, rather than
ones and zeros, used analog circuits to do "calculations".
- Machine Language
-
Computers "think" in ones and zeros.
(Even this is a bit of an inaccuracy, as they actually work in
"high voltage" and "low voltage", but it is
very convenient to talk, instead, about "ones" and
"zeros".)
Although this is the easiest, and indeed, the only way computers
can actually process instructions, it is very difficult for
humans to deal with.
It is worthwhile to note that every family of computers has its
own language, referred to as its
native language.
For instance, a program for a PIC 18 microprocessor
is simply random garbage to an Intel Pentium chip.
Representing machine code in binary
leads to huge arrays of
ones and zeros, so even on the rare occasions when the
machine code is actually examined by a human, it is generally
shown in hexadecimal, or sometimes
octal.
Machine language is extremely difficult to program in, and
so it is almost never done these days.
- Assembly Language
-
The next step up from machine language
is assembly language.
There is a one-to-one correspondance between an assembly language program
and the machine language code that it generates. That is to say,
each assembly language instruction translates into one machine language
instruction.
The instructions in assembly language are mnemonics, which are
simply easy, or at least easier, to remember names for the
machine language instructions that they represent. Often the mnemonic
is an abbreviation for the instruction.
Assembly language programs also usually use names for memory
locations where data is stored, rather than the exact address of that
memory location.
One advantage is that it is less likely to use the wrong address (and
thus, the wrong data), and another is that if it is necessary to change
what actual location is being used, it is easy to do so.
An assembler is a program that translates the assembly language
program into machine language.
Assemblers also provide help with memory allocation, that is, automatic
selection of exactly what address should be used for each named
memory location, as well as providing several other useful, though
more essoteric, services.
A cross assembler refers to an assembler that runs on one type
of computer (for example, a PC), and generates code for another type
of computer (for example, a PIC 18 microprocessor).
- Compiled Language
-
A higher-level language, meaning that each statement (or instruction)
typically translates into several machine language instructions, and
in which the entire program is translated (compiled) into machine language
prior to any portion of it actually running. The translation is
accomplished by a compiler. A cross compiler refers
to a compiler that runs on one type of computer, and generates
machine language code to run on a different type of computer.
- Interpreted Language
-
A higher-level language, meaning that each statement (or instruction)
typically translates into several machine language instructions, and
one which each statement (or instruction) is translated (interpreted)
into machine language immediately prior to executing it. The translation
(and execution) is done by an interpreter.
There are two major limitations to this in that (one) every instruction
is usually translated each time it is executed, even if it gets
executed thousands of times in one run of the program, and (two)
it can not be done as a cross-platform process.
(There are a few languages whose interpreters can avoid the first
problem.)
A scripting language generally refers to a special case of
an interpreted language which is primarily intended to run other
programs as a major portion of the work done by a given script.
- Linker, Link Editor, or Linkage Editor
-
Although not strictly speaking a language, the linker plays a vital
role with the assembler or compiler.
It has several functions, the primary one being able to resolve any
calls (references) to functions that are outside of
the user's
program (usually ones that are provided by the operating
system).
The linker also allows the user to split single programs up into
more manageable chunks, called modules and link the together.
This has many advantages,
including easier debugging and making it easier to re-use part of
one program in another program.
The linker also takes care of making sure that variables that are
shared across multiple modules are what are actually referenced
within that code.
Some linkers can deal with having modules be originally written
in different languages, thus allowing (for instance) the use of
assembly language in
one part of a program when that is more convenient, and a higher
level language for the rest of the program.
- Variable
-
This refers to a location used to contain some data while it is
being processed.
Different languages have different types of variables, but
some are fairly common. Integer will store a number that
has no fractional part, what we learned in school as "whole
numbers", for instance, "41" or
"-7".
Floating point (also called real in some languages)
will store a number
that has a fractional part, e.g., "7.3568". Floating
point numbers are typically capable of storing very large or
very small numbers, as they include an exponent that tells
where the decimal point is.
It should be noted that variables can be signed, meaning
that they can hold either positive or negative values, or
unsigned meaning that they can hold only positive numbers.
Some languages also allow the programmer to specify the length
of the variable, thus controlling the largest number that can
be held, or, in the case of floating point numbers, the resolution
of the variable.
Variables can also be non-numeric (or at least appear to be
non-numeric). The most common is a character (often
shortened to char), which can contain one letter, digit, or
special symbol. (Closely associated are strings.)
One type of variable that is especially confusing to the beginner
is the pointer variable. This is simply a variable that
contains a value that points at (is literally the address in memory of)
another variable.
Even programmers with decades of experience tend to make a lot of
mistakes when dealing with pointers. Not all languages support
pointers.
- Arrays
-
Virtually all higher level languages have some form of arrays,
though the details differ from one language to the next.
An array is simply a group of several variables, all of one type,
that has a name as a group. Included is the concept of an index
which tells exactly which one of the variables is wanted.
As a simple example, you might have an array that contains the
hourly temperature readings for one day, and then you could have
a way of indexing into this array for, say, the 10 AM reading.
- String
-
A string is a special case of an array,
where the base type of the array is a character (or char) type.
Some languages use the idea of a special character to terminate
a string, thus eliminating the need to have a string be a fixed
length of characters, although this introduces its own set of
problems (notably allocation).
- Record or Structure
-
Some languages allow you to build a record or structure for
data that go together.
As a very simple example, you might have a structure that has
a string for a name and a space for a telephone number.
Many languages that allow you to specify a structure will
then allow you to specify an array of that
structure.
-
- Linked List
-
Many languages allow us to define a structure
that includes,
amongst the other data it is to contain, a pointer to an instance
of itself.
Although at first glance, this seems like a silly thing to do,
it turns out to be quite powerful.
Going back to the example of a name and a phone number, if the
structure contains a pointer to the next record if the same type,
we can put as many name/phone number pairs as we want into the list.
There are many "ins and outs" of using linked lists,
but that's the basic idea of what a linked list is.
- Statements
-
Computer languages, like natural languages,
have the concept of sentences.
In computer languages, they are usually called statements.
Just as in a natural language, there are a wide variety of
statement types in a computer language.
Most languages have some sort of declaration statement
(or declarative statement) that
allows you to declare variables that you are going to
use and what type they are.
Some languages also allow autodeclaration (or
automatic declaration) of variables -- that is,
when the compiler sees a new variable name, it automatically
gives it some space and uses certain rules to figure out
what type it should be. Although this sounds like a good
idea on the surface, it actually causes a lot of problems
and is a large source of errors in programs.
All languages have some form of assignment statement
that tells the computer to give a variable
a value.
In most instances, this new value will be calculated based on
things like the value of other variables, constants,
functions, or even the current value
of the variable itself (for instance, the new value is the
old value plus one).
All languages also have various forms of flow control statements,
including loop statements, branch statements, and call statements.
- Loop statements
-
are used when a block of statements needs to be executed
multiple times. Loop statements include for loops,
do loops, repeat loops, and while loops,
though most languages do not support all four types.
(Each has its own subtleties, and can vary slightly from one
language to the next, so be sure to check the documentation
for the language you're using to fully understand its loops.)
- Branch statements
-
are used to go to some other part of the program.
These can be unconditional branch statements (goto statements)
where the branch is always taken, or
conditional branch statements where a decision is
made, usually based on the contents of some variable,
as to what statement to execute next.
Common forms are if-then statements or if-then-else statements,
and case statements (also called switch statements or
computed goto statements) that usually have more than two
possible outcomes.
- Call statements
-
are simply the places where a subroutine
is invoked.
- Functions and Subroutines
-
A subroutine is simply a block of code that can be invoked
(called) from another part of the program.
A function is merely a subroutine that returns a value upon
completion.
Some languages have subroutines and functions as two distinct structures,
while others merely provide the ability for a function to "return"
a value of "null".
Often times a subroutine will be used when the same thing (or nearly
the same thing) has to happen in multiple places within the program.
Other times a subroutine will be used to group together into one place
code that logically goes together, even though it only gets executed
once during the program.
A linker can allow code in one module to
call subroutines in another module. This can be useful in organizing
large programs into smaller, more managable pieces, or to allow
sharing subroutines amongst multiple programs. The linker also
allows calls to subroutines or functions that are provided by the
operating system.
Some languages permit recursive subroutines (recursion)
which are subroutines that call themselves. Other languages prohibit
this.
In object oriented languages, the data objects can have methods
rather than having subroutines or functions.
Subroutines and functions (and, for that matter, methods) can
have arguments (also called parameters) that
pass data into (and sometimes out of) the subroutine or function.
- Comments
-
Virtually all source languages allow
the programmer to add comments, which are text that can
be seen when viewing the source code but do not affect the
execution of the program. That is, they get ignored by the
compiler or
assembler.
- Assembler Directives and
Compiler Directives
-
Virtually all assembly languages,
and many (but not all) compiled languages
allow for directives. These are statements that are evaluated
at assembly time or compile time and can be used to control how the
program is assembled or compiled. There are four basic groups that
you need to know about, and many languages include a variety of other
things. These four are defines, macros, conditionals
and includes.
- Defines
-
Basically you're just specifying that when you mention a name in your
program, you want the assembler or compiler to insert some other
text in your code in place of the name prior to trying to assemble
or compile that line. For instance, you might define "green_LED"
to be pin 3 on Port C, because that's the pin you connected to
the green LED in your project.
It should be noted that defines can come from the command line when
the assembler or compiler is invoked, thus giving the programmer
flexibility (see conditionals, below).
- Macros
-
Macros are an extension of defines, but are generally longer than
just a few characters. Like subroutines,
they can have arguments. However, unlike subroutines, a complete
copy of the macro's code is included whereever the macro is called.
- Conditionals
-
Conditionals are used to "turn on" or "turn off"
blocks of code at assembly or compile time.
Some uses are for programs that might run on different computers,
or when the programmer isn't quite ready to delete some of the
development/debugging code.
- Includes
-
These directives are used to tell the assembler or compiler to
include the entire contents of another file as though the entire
thing were typed into the current program. They are especially
useful when defining things like subroutines
that are in another module (or provided by the operating system), or
defining names for things specific to a given microprocessor.
- Command Line Options
-
Many years ago computers didn't have fancy "graphic user interfaces"
(or GUIs), but rather had text terminal interfaces.
Rather than going through a menu of possible programs, or clicking on
an icon, you would type in the name of the program you wanted to
run and hit the "enter" or "return" key.
This was called a command, and thus the entire line of text was
called the command line.
You could also type in options after the name of the program,
for instance, to specify the file to be worked on (say, the file
that you wanted the compiler to compile).
One of the things that can be speicifed is to control the
conditionals mentioned above.
You can still use either a terminal program and type in the
command line manually, or use an IDE that
allows you to specify the command line options for the
assembler,
compiler,
and/or linker.
- Source Code and Object Code
-
Source code simply refers to the (more-or-less) "human readable"
code that goes into the assembler
or compiler.
Object code refers to the stuff that comes out that directly makes
sense to the computer. Technically, object code is what then goes
into the linker which outputs executable code
in the form of an executable image file,
but we often get a bit sloppy about this, and just refer to the
executables as "object code".
- Editor
-
Text editors, or simply editors were the precursor to
word processors, and are somewhat similar
in that they allow you to type and change text freely.
However, editors do not include things like the ability to
change fonts, change colors, or do spelling checks as text is
typed in.
Editors also do not support formatting, such as centering lines,
nor do they support inclusion of non-text things like graphics.
Editors always use a "fixed spaced" font. The files they
work on are pure ASCII text.
One editor that many will be familiar with is Microsoft's Word Pad,
though this one does not have any of the features that are useful
in trying to write code.
- Debugger
-
A debugger is a program that allows you to stop the execution of
a program at virtually any point,
usually by setting a breakpoint,
and examine the contents of
any variable.
Almost all debuggers allow the user to single-step
through the code, that is, to execute one statement
at a time.
Some, though by no means all, will also allow the user to modify
variables.
- Integrated Development Environment
-
An IDE for short, is a set of programs that include an
editor, a debugger,
an assembler or
a compiler, and
a linker that all work together.
IDEs for microcomputers will generally include interfaces for
In-Circuit Emulators.
Frequently the debugger will be set up to show you the exact
location being executed in your source code.
Generally IDEs will include the capability of storing
"exactly where you're at" when you quit one
session so that you can pick up again when you come back
later. (Generally, though, the program under development has
to be restarted from the beginning, as the contents of the
variables are not usually kept.)
IDEs can vary wildly in price, ranging from free to download
off the internet to costing several thousand dollars. Clearly
the latter are out of the reach of most hobbyists.
- Numbering Systems
-
There are several ways of expressing numbers that you might run into.
I'll mention the most prominent ones.
- Binary
-
Sometimes shortened to just BIN, is a system that uses only
0 or 1. Like the numbers we're used to, the ones further to the
left usually have a greater significance. For example, 001 is
one, 010 is two, and 100 is four. This number system gets unweildy
and confusing very quickly, but it is closest to what the computer
actually "thinks" in.
Binary is also called Base 2.
- Octal
-
Sometimes shortened to just OCT, this is a number system
that uses individual digits in the range 0 through 7. Again,
ones further to the left usually have a greater significance.
For example, 007 is seven, 070 is fifty-six, and 700 is four hundred
fourty-eight. By grouping binary digits together in sets of three,
it is easy to convert between binary and octal. The "rub"
comes when you consider that most computers deal with things in
bytes, which are groups of eight binary digits, and eight isn't
an exact multiple of three. The customary practice is to
use the octal numbers in the range of 000 through 377 to represent
the contents of a byte. Often you will see a small letter o either
in front, or in back, of an octal number to indicate that it is
an octal value.
Octal is also called Base 8.
- Decimal
-
Sometimes shorted to just DEC, is the normal number system
that you learned in elementary school. it uses individual
digits in the range of 0 through 9, which digits further to
the left having greater significance than those further to the right.
The "rub" is that it isn't very convenient at all to
change back and forth between binary and decimal.
Decimal is also called Base 10.
- Hexadecimal
-
Sometimes shortened to just HEX, is a numbering system that
isn't quite so obvious. It has sixteen possible values for each
digit. This is a problem in that the normal numeric characters
of 0 through 9 only give us ten values. To get around this, we
use the letters A through F to give us six more values, with
A being ten, B is eleven, C is twelve, D is thriteen, E is fourteen,
and F is fifteen. Again, digits further to the left have greater
significance than those to the right. Thus, 00F is fifteen,
0F0 is two hundred fourty, and F00 is three tousand eight hundred fourty.
It is very convenient to group binary bits together into groups
of four, and then convert each group of four into a hexadecimal digit.
Since a byte is eight bits, each byte can be represented by two
hexadecimal digits. Often either an h or an x (or sometimes an H or
an X) will be used to indicate that the number is in hexadecimal.
Hexadecimal is also called Base 16.
- Binary Coded Decimal
-
Also called BCD, is a numbering system where the half-bytes
(also called nibbles) are limited to the range zero to nine. Many
microcomputers have instructions to convert from binary to BCD,
and even to do some arithmetic with all of the data in BCD.
This is convenient to use when the data will have to be presented to
a human, as the conversion from BCD to decimal is straight forward
and doesn't include a lot of math. The downside is that it uses
memory a lot less efficiently, as each byte can only represent values
in the range 0 to 99 rather than the 0 to 255 that can be represented
by each byte when pure binary is used. One advantage to using BCD
for fractions is that most monetary units these days use fractional
values that are tenths or hundreths of the base unit (e.g., cents
are hundreths of dollars), and so are much easier to represent in BCD.
- Other numbering systems
-
You may see old references to duodecimal, which is base 12
(using 0 to 9, T, and E),
or trinary, wich is base 3 (using 0 to 2).
Roman numerals are rarely used in the computer world.
(An obscure differentiation within Roman numerals is
"modern" versus
"ancient" or "Roman style",
the difference being that 4 is IV in modern style but IIII in ancient style,
and 9 is IX in modern style but VIIII in ancient style.)
There are other, obscure numbering systems, but you're not likely to
encounter them as an electronics hobbyist.
- Non-numeric Data
-
Often a computer is asked to deal with data that isn't numeric,
or at least data that isn't what most people think of as being
numeric.
There are a lot of different standards for dealing with non-numeric
data, but most of them are ones that the electronics hobbyist is
unlikely to encounter.
Some of the ones you are likely to encounter are enumerated below.
(The latter ones in the list are more properly considered to be
file formats, but they still contain what most people consider
non-numeric data.)
- ASCII
-
This is an acronum that stands for "American Standard Code for
Information Interchange".
It is a seven-bit code, so fits nicely into an 8-bit byte.
It includes codes for all 26 letters in the English alphabet,
bot upper and lower case (sometimes called capital and small letters,
respectively), the digits 0 through 9, a number of special symbols
(such as ampersand, dollar sign, and period, to mention a few), and
several "control codes" such as tab, carriage return, and
bell, to mention a few).
It does have limitations, though, as there are many characters that
are missing, such as the degree sign and cent sign, to mention a couple,
as well as not being able to represent characters from non-English
alphabets (such as Greek characters).
- Unicode
-
An extension of ASCII from 7 bits to 16 bits. It includes many more
special symbols, as well as many non-English alphabets. Values in
the range of 0 through 127 are exactly the same as ASCII.
- Baudot
-
This is another code that at one time was widely used to represent
characters, and was used for communicating between certain teletype
machines. It was a 6-bit code, and thus could only represent 64
characters. To expand this, it also had a pair of "shift"
characters, which expanded the number of characters that could be
represented. It is generally considered to be obsolete today,
although it is still used for some ham radio communications.
- EBCDIC
-
A code used by early IBM computers for coding data.
The hobbyist is only likely to encounter it in historic documents today.
- Hollerith
-
This is code that is used for encoding characters on punched (paper) cards.
It is a 12 bit code, and includes codes for upper case letters, numbers,
and many special symbols. Cards (usually) had 80 columns, each one
used to represent one character, and twelve rows (called 0 through 9,
ten, and eleven). A single hole generally represented one of the
digits 0 through 9, two holes being a letter, and three holes being
a special symbol. A column with no punch was a space.
It is generally considered to be obsolete today.
- MIDI
-
This is actually a communications format that was developed to
communicate between electronic musical instruments. It is
still in common use for that purpose today.
GIF, TIFF, BMP, and JPEG
-
These are actually file formats that are used to store visual data
(pictures). GIF is a fairly old format, that at one time
involved some proprietary features. TIFF is a totally
non-compressed, non-lossy format, originally developed for use with
scanners and facsimile (FAX) machines. BMP, or Bit Map File,
was developed by Microsoft.
JPEG (sometimes called JPG)
involves a "lossy" compression technique, that is to say,
that the compression is allowed to lose a certain amount of fine detail.
- WAV
-
A file format used to store sounds.
This is an uncompressed file format.
- MPEG
-
A format for storing movies. Also sometimes referred to as MPG.
It typically refers to MP2, or MPEG Version 2, though
it can also refer to MPEG Version 3. It uses a lossy
compression technique that greatly reduces the size of the files.
- MP3
-
Technically it is a format for storing movies, though it is
commonly used for storing just the sound track.
It uses a lossy compression technique.
- PDF
-
A file format for holding graphic data, including formatted
text, drawings, and photographic images. It was originally
develped by Adobe Software under contract to the U.S. Navy.
It is an abbreviation for Portable Data Format.
The original idea was that the Navy wanted a way to generate a
document on one type of computer and know that it would look
exactly the same on any other type of computer.
- Schematic
-
Refers to a drawing that shows symbols for each of the various
components in a circuit and lines showing how they are
(electrically) connected
together.
Information will be included beside the symbol for each component
identifying its key values, and often times a sequential device
number is attached to each device.
- Soldering
-
A method of connecting two metal objects by melting a filler
material that melts at a substantially lower temperature than
the objects being joined.
In electronics, we historically used an alloy of lead and tin
as a solder, though the industry is moving towards lead-free
solders (usually involving a metal called antimony [which is so
named because it poisoned the monks who discovered it]).
Soldering requires a flux which chemically
cleans the objects to be joined.
In electronics we always use a non-acid flux, usually rosin,
and for hand-soldering we usually use a solder that is actually
made as a tiny tube filled with the flux (called a "core").
Some other types of soldering use acid flux, but this flux must
never be used with electronics as it can destroy the electronics.
Plumbers often use soldering to join copper pipes, though they
call it sweating. Brazing is a closely related
process, but usually uses a copper-based alloy as a filler.
Jewlers often use a silver-based alloy to solder together precious
metals (such as silver, gold, or platinum).
Welding is a somewhat related process where part of the
metal objects to be joined are melted along with the filler metal.
Spot welding often does not add any filler metal, and
simply heats the two objects to be joined in one small area using
an electric current.
- Wire Wrapping
-
A technique used to build circuits, typically one-of-a-kind
circuits, that involves wrapping special silver-plated insulated
wire around square, usually gold-plated posts. The posts are
often connected to sockets for ICs, though there are ones
to which discrete components can be soldered.
One of the advanatabes of wire wrapping is that it is reasonably
easy to make changes to the circuit.
Special tools
are available to strip and wrap the wire, as well as to unwrap
the wires from a post.
- Printed Circuit Board or PCB
-
The circuit card consisting of one or more layers of insulating
material with conductive traces (usually copper) in a specific pattern
used to connect together electronic components which are usually soldered
to the traces.
They can be single-sided, that is, with the traces only on one side,
two-sided (sometimes refered to as two-layer) with traces on both sides,
or multilayer where several boards are actually laminated together to
form a single board.
"Printed" is actually a misnomer as they are usually etched
from a solid copper sheet permanently attached to an insulating board
(often fiberglass).
The pattern is usually produced by a photographic process.
The process involves some fairly nasty chemicals. PCBs can be made
for one-of-a-kind circuits, or they may be produced literally by the
millions, or anything in between.
- Schematic Capture and CAD Software
-
Schematic Capture Software refers to software that is specifically
designed to make nice, neat drawings of an electronics
schematic.
CAD, or Computer Aided Design software is used to design
things like printed circuit boards.
Many CAD packages will either include, or work from files produced by,
a schematic capture program, which greatly eases the task of getting
from a schematic to a PCB design. There are several commercial
companies that will take the output from a CAD system and produce
PCBs for a fairly reasonable fee.
Schematic Capture/CAD packages range from free for personal use
(such as the gEDA/PCB Designer package that runs under Linux) to literally
tens of thousands of dollars for commercial packages.
- Battery
-
A device that stores electrical energy in the form of chemical energy.
(Contrast it to a capacitor, which stores
energy in the form of an electric field.)
Technically a battery is the combination of several cells,
usually in series, to get a higher voltage, but common usage has
made battery also refer to a single cell.
A battery can be a primary battery, which is discarded
(or recycled) whenever the energy in it is used up, for example,
a watch battery or disposable flashlight batteries,
or a
secondary battery which can be recharged (because the
chemical reaction is "reversible"), for example, a
car battery or cell phone battery.
In addition to the fact that rechargable batteries can typically
hold far more energy than capacitors, there are three other important
differences to be aware of. The first is that the voltage on a
capacitor decreases linearly as the charge is drawn off while a
battery has a non-linear discharge curve. (Thus, a capacitor that
has been discharged to say 10% of its initial charge will only have
10% of the initial voltage, but a battery, depending on the exact
type, discharged to 10% of being fully charged may still have 80%
or more of the fully charged voltage.)
The second difference is that a rechargable battery will only survive
a few hundred, or at most a few thousand charge-discharge cycles before
losing most of the capacity, while some capacitors can literally go
through billions of charge-discharge cycles per second, every second,
for twenty or thirty years and not exhibit an appreciable loss of
capacity. The third difference is that most capacitors can only retain
their charge for a relatively short time (minutes or hours, though there
are a few types that can get into weeks), while batteries can typically
retain their charge for longer periods, weeks or months for secondary
batteries and several years for primary batteries.
- Switch
-
A device for opening or closing one or more electrical circuits controlled
by a mechanical input (often times used for human input).
Switches come in a huge variety.
They can be classified based on the mechanical action,
the number of positions that they can take on,
and on the
circuits they control.
Some important ones to know are toggle switches that have a lever
that is used to input to the switch, push-button switches that
have a plunger that is depressed or released, rotary switches
that have a shaft that is rotated to one of two or more possible positions,
micro switches that have a very small amount of movement required
(and often have a lever, and are usually used as position
sensors), and slide switches that have
a button that slides back and forth.
Many of these can have one or more momentary positions, that is
when physical pressure is removed from them they return to their
"normal" position. (An example of a momentary switch is the
letter "A" key on a keyboard - when you depress it, a signal is sent to
the computer indicating that you wish to send an "A",
and many keyboards,
if you continue to depress it will send a series of "A"s until
you release the key.)
As for the circuits controlled, an archaic term of poles is still
used. The archaic term throw is used for the number of positions
for many types of switches. Single and double are used to specify one
and two, respectively.
Often they're abbreviated. Ones you're likely to encounter include
- SPST
-
Single-pole single-throw, or a simple on-off switch.
- DPST
-
Double-pole single-throw, a simple on-off siwtch that controls two circuits.
- SPDT
-
Single-pole double-throw, a switch for a single circuit with two different
"on" positions.
- DPDT
-
Double-pole double-throw, a switch for controlling two circuits that has
two possible "on" positions.
- 3PDT
-
3-pole double-throw, a switch for controlling three circuits that has
two possible positions.
I've seen switches as high as six poles, and as high as 12 throw, but
these are usually rotary switches.
An often overlooked but important aspect of switch selection is life
expectancy. Is it long enough for the intended use of the switch?
Some switches are only designed to last a couple thousand cycles, while
others may be designed to last for millions of cycles.
- Fuse or Circuit Breaker
-
Generally a device for limiting overloads.
A fuse is generally a single-use device, that needs to
be replaced if the overload condition is encountered.
A circuit breaker is generally a resettable device,
that is, if an overload condition causes the circuit breaker
to "trip" (open the circuit), it can be reset
(once the overload has been cleared).
Both fuses and circuit breakers can be time delay,
meaning that they will allow a higher current for a brief
period (usually less than 5 seconds). This is useful for situations
where the circuit being protected requires a higher start-up
current than what it requires during normal operation.
A thermal fuse is a fuse that will open the circuit when
a specified temperature is exceeded. They are common in certain
small appliances, such as coffee makers.
A ground-fault circuit interrupter or GFCI is a
somewhat related device that detects shorts to ground and quickly
turns off power before such a short can become dangerous to a
human. They do NOT protect against a short between the hot
and neutral wires of an outlet, though.
Although there are some circuit breakers that are designed to
serve as switches (mostly in aircraft applications, but also sometimes
in marine applications), most circuit breakers are only designed
for a few hundred cycles and should not be used as switches.
- Vacuum Tube
-
The vacuum tube (or simply tube)
was the predecessor of the transistor.
It was based on a principle of physics that says that under
certain circumstances, an object in a vacuum can emit electrons.
Vacuum tubes are somewhat related to incandescent light bulbs,
and indeed early tubes did resemble the light bulbs of the era.
Up until about 2005 or so, CRT (Cathode Ray Tube) based
monitors and TVs were fairly common, and are still seen in places
that sell used computers.
The CRT is a special type of vacuum tube that is also called by
the more descriptive term picture tube.
The one place where vacuum tubes are still common in the home
is the magnetron in a microwave oven. Other tubes are
still used by some audiophiles.
Note that in some countries, a vacuum tube is called a valve.
- Modulation
-
How "information" is carried. The "information"
can be music, pictures, voice, computer data, what position is desired,
or a number of other things.
Typically (although not always) modulation is applied to a carrier
signal of some sort. The carrier is often a radio signal, though it can
be something else as well. (As another example, I've seen a liquid flow
modulated to carry some data in a situation where radios weren't at all
practical, namely to bring up data from near the bottom of a well that
was being drilled.)
There are many types of modulation possible. Here are some that are
of interest to the electronics hobbyist.
- AM
-
Amplitude modulation modifies the amplitude, or "volume",
of the carrier as the applitude of the information changes.
(This is how broadcast AM radio works.)
- FM
-
Frequency modulation modifies the frequency of the carrier
as the amplitude of the information changes. Note that the modulation
is very small compared to the unmodulated frequency of the carrier.
For instance, an broadcast FM radio station may be at 91.3MHz
(91,300,000 Hertz) but is limited to a maximum deviation (modulation)
of just 25kHz (25,000 Hertz).
- PM
-
Phase modulation doesn't change the amplitude or (directly)
the frequency of the signal, but adjusts where the "peaks and
valleys" are in time. It's probably worth noting that actual
usage of PM is fairly rare.
- SSB
-
Single side band is related to AM, but has the unmodulated
portion of the carrier removed. When a signal is AM modulated, there
are two side bands produced that actually carry the information.
In SSB, one of them is removed, as it is redundant.
SSB is popular in ham radio, and is also used by some
international short wave broadcasts. It is also occasionally used
in CB radio.
- PWM
-
Pulse width modulation is where the width of a (periodic)
pulse is adjusted to carry the desired information.
It is often used in remote control ("R/C") applications
where the information is the desired position of a servo.
- Spread Spectrum
-
Althought not really a form of modulation, you will sometimes
encounter it mentioned in the same sentence.
Spread spectrum refers to a carrier that is frequency hopping,
that is, it goes ("hops") through a series of different
frequencies in a certain order, usually at a fairly high rate of
speed. There are several advantages to this, one being that it offers
a higher immunity to noise, and another is that it allows several
stations to share the same band of frequencies. (This is how WiFi
works, for instance.)
There are many other forms of modulation in common use, but the above
ones are the relatively simple ones that the electronics hobbyist is
likely to encounter.
- Frequency Ranges
-
Now that we've talked a bit about modulation, we should probably talk
a bit about frequency ranges.
We measure the frequency of any oscillating property in Hertz,
which is abbreviated Hz.
Back in the 1960s (and earlier) we used the term cycles per second,
which is the same thing.
(The name was changed to honor an important early scientist.)
For many uses, it is more convenient to use a larger unit, such
as kilohertz (abbreviated kHz, which is a thousand Hz),
megahertz (abbreviated MHz, which is a million Hz),
or gigahertz (abbreviated gHz, which is a billion Hz).
There are others, but those are the most common ones.
In radio, you'll commonly see references to frequency ranges. These
have changed over the decades, and are basically just approximate limits.
Here are the ones you're most likely to run into as a hobbyist:
- Audio Frequency (AF)
-
This range is typically considered to be from about 30 Hz to about 20kHz.
It is more-or-less the range that most humans can hear.
There are some radio communications in this range, when it is called
Low Frequency (LF), but due to the relatively small amount
of data that can be carried, they tend to be rather specialized.
- Medum Frequency (MF) or Medium Wave (MW)
-
This is typically considered to be about 500kHz to about 1.8MHz, and
includes the AM broadcast band.
- High Frequency (HF) or Short Wave (SW)
-
Today this is typically considered to be from about 1.8MHz to 30MHz.
It includes many different radio "services", for example there
are several amateur (ham) radio bands and also international short wave
broadast bands in this range, as well as many others.
- Very High Frequency (VHF)
-
This is generally considered to be the range of 30MHz to about 300Mz.
Included in this range are several amateur (ham) radio bands, several
commercial two-way radio bands, most television stations, the FM
Broadcast Band, aircraft communications band, and several others.
- Ultra High Frequency (UHF)
-
This is generally considered to be in the rage of about 300 MHz to
about 1Ghz, though some folks differ a bit.
Again, there are several amateur (ham) radio bands, commercial bands,
the old TV UHF band, some cell phone bands, and many other uses.
Doppler weather radar also operates in the UHF band.
A sidelight is that what is considered "UHF" has changed
significantly over the decades. When coax cable was first developed
some seventy years ago, anything above a couple of megahertz was
consdiered "UHF" - thus the common name for PL-259
connectors, even though they are very poor at today's UHF frequencies.
- Super High Frequency (SHF) or Microwave
-
This is generally considered to be anything above about 1GHz.
There are a growing number of things that operate in this range,
thanks to the development of inexpensive components that can function
at these frequencies. A few examples are aircraft control radar,
microwave ovens, WiFi, most cell phones, sattelite communications,
and, of course, several amateur (ham) radio bands.
There are some designations within this range, such as &qout;X-band"
"K-band", "Ku-band" (pronounced "kay-you band")
and others.
Each of the above frequency ranges (for radio) has its own propogation
characteristics, and so its own uses.
In radio receivers, you'll sometimes encounter the term
Intermediate Frequency or IF.
It is not uncommon for radios to convert the radio frequency being received
to another frequency (possibly in more than one step) before actually
sorting out the sound (or other information) that is actually desired.
You may also encounter the term octave, which comes from music.
It simply means a factor of 2 in frequency. For instance, 448MHz is
one octave above 224MHz.
A filter that has a pass band of 100MHz to 400MHz would be said to have
a two octave pass band.
In electronics, when we talk about harmonics, we are normally
talking about multiples of the frequency. For instance, the third
harmonic of 200MHz is 600MHz.
- Photovoltaic Device
-
PV for short, this is just the big fancy term for a solar cell,
a device for turning light into electricity. It uses the same
phsyics as an LED, only it is designed to operate
the other way.
- Bezel
-
The bezel is the nice front part of the case or cabinet that
mounts the bits and pieces (such as switches, volume controls, indicator
lights, and so on) that a human uses to interact and control the electronic
device. Usually the bezel also has labels indicating the purpose of
each control or indicator.