Excellent write-up....really takes the mystery out of it....tri state
outputs...seems like there were discrete IC's that had similar
outputs...Yes I remember tables...The Smith Charts sticks in my
head....still have my old slide rule!....thanks for the info.. you are
a treasure trove of information...

Regards

Robert



On 15 July, 14:58, threeneurons <[email protected]> wrote:
> > 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