> 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.
