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.
