> there any good reference documents that cover
> "Charlieplexing"?...thanks again
>
> Regards
>
> Robert
>
Look in my Skydrive:

https://skydrive.live.com/?cid=F9DB37B8211CE831

In the 'Snippets' folder for the file: Charliplex_T44.gif

For example, you make a square matrix. 4 I/O bits for a 4x4 matrix. So
for I/O bits A,B,C, & D; you have 4 rows: Row-A, B, C, & D; and 4
columns: Col-A, B, C & D. You put a transistor at the intersecting
node of each row and column, except where the 'like' row and columns
meet, like A-A, B-B, C-C, & D-D. Omit those. So you should have 12
possibilities. Tie the base of the transistor to the row lead, and its
emitter to the column lead. A base resistor can be shared across the
whole row. A transistor is turned on, if its base is brought to a
logic-1, and its base to a logic-0.

For this scheme to work, the I/O port needs to have push-pull
capabilities, when used as an output, and go to a Hi-Z (look open),
when configured as an input. The AVR I/O bits can do this using two
registers for each port. The output port register itself (ie PORTA),
and its associated DDR register (Data Direction Register, ie DDRA). To
select a transistor to be turned ON, you have unique settings for BOTH
the PORT and DDR registers. I have shown two tables, that are used to
control the cathode lines (K0 thru K9, & Kcol-Colon). An older uC like
the 8051 family couldn't be used for charliplexing.

In the code, charliplexing forces you to learn how to use 'tables',
and 'indexed' addressing. Think array. The difference between an array
and a table, is that a table is fixed list of data, while an array, is
a list of variable data. If you want to display a '4', you use 4 as
your index. Put 4 in a variable called 'i'. You need to set both PORTA
and DDRA. Get data for PORTA, by reading TBL_PA(i), and DDRA by
accessing TBL_DDRA(i). Tables TBL_PA & TBL_DDRA are defined by you, in
your code, using my scribbles.

Do similarly, for the anodes. Note, in charlieplexing, only one node
is ON at a time. Throw in blanking intervals between digits, to bleed
off any capacitive charge.

If you're old enough, you'll remember were the term table comes from.
Back in the days before calculators, we had to use tables for odd math
functions. Remember trig tables. Tables that gave you the sine,
cosine, and tangent of angles from 0 to 90 degrees. Often in
resolution finer than a degree, if it was in the back of your trig
book. They had whole books that were just one table, If you needed
finer precision.

Tables are a powerful tool. If you don't have to, stay away from fancy
math functions that are calculated in real time. That eats a lot of
CPU clocks. When possible, pre-calculate those values and insert the
result as tables in your code (compile time). That way, when your code
is running, it will get you those values in a heart-beat.

-- 
You received this message because you are subscribed to the Google Groups 
"neonixie-l" group.
To post to this group, send an email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/neonixie-l?hl=en-GB.

Reply via email to