sure_2416.h File Reference

Sure 2416 led matrix display routines. More...

Include dependency graph for sure_2416.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define SURE_2416_CMD_BLINK_OFF   0b00001000
#define SURE_2416_CMD_BLINK_ON   0b00001001
#define SURE_2416_CMD_CLK_MASTER_MODE   0b00010100
#define SURE_2416_CMD_CLK_SLAVE_MODE   0b00010000
#define SURE_2416_CMD_CLK_SOURCE_EXT   0b00011100
#define SURE_2416_CMD_CLK_SOURCE_INT_RC   0b00011000
#define SURE_2416_CMD_LEDS_OFF   0b00000010
#define SURE_2416_CMD_LEDS_ON   0b00000011
#define SURE_2416_CMD_NMOS_16_COMMON   0b00100100
#define SURE_2416_CMD_NMOS_8_COMMON   0b00100000
#define SURE_2416_CMD_PMOS_16_COMMON   0b00101100
#define SURE_2416_CMD_PMOS_8_COMMON   0b00101000
#define SURE_2416_CMD_SYS_DISABLE   0b00000000
#define SURE_2416_CMD_SYS_ENABLE   0b00000001

Functions

void sure_2416_clear ()
void sure_2416_fill (uns8 colour)
void sure_2416_fill2 (uns8 colour)
uns8 sure_2416_get_pixel (uns8 x, uns8 y)
void sure_2416_horizontal_line (uns8 x, uns8 y, uns8 length, uns8 colour)
void sure_2416_init ()
void sure_2416_send_command (uns8 command)
void sure_2416_set_brightness (uns8 brightness)
void sure_2416_set_pixel (uns8 x, uns8 y, uns8 colour)
void sure_2416_setup ()
void sure_2416_vertical_line (uns8 x, uns8 y, uns8 length, uns8 colour)
void sure_2416_write (uns8 mem_addr, uns8 data)

Detailed Description


Define Documentation

#define SURE_2416_CMD_BLINK_OFF   0b00001000
#define SURE_2416_CMD_BLINK_ON   0b00001001
#define SURE_2416_CMD_CLK_MASTER_MODE   0b00010100
#define SURE_2416_CMD_CLK_SLAVE_MODE   0b00010000
#define SURE_2416_CMD_CLK_SOURCE_EXT   0b00011100
#define SURE_2416_CMD_CLK_SOURCE_INT_RC   0b00011000
#define SURE_2416_CMD_LEDS_OFF   0b00000010
#define SURE_2416_CMD_LEDS_ON   0b00000011
#define SURE_2416_CMD_NMOS_16_COMMON   0b00100100
#define SURE_2416_CMD_NMOS_8_COMMON   0b00100000
#define SURE_2416_CMD_PMOS_16_COMMON   0b00101100
#define SURE_2416_CMD_PMOS_8_COMMON   0b00101000
#define SURE_2416_CMD_SYS_DISABLE   0b00000000
#define SURE_2416_CMD_SYS_ENABLE   0b00000001

Function Documentation

void sure_2416_clear (  ) 
void sure_2416_fill ( uns8  colour  ) 

00308                                  {
00309     uns8 mem_address;
00310     uns8 fill;
00311     
00312     if (colour) { 
00313         fill = 0b00001111;
00314     } else {
00315         fill = 0b00000000;
00316     }
00317         
00318     for(mem_address = 0 ; mem_address < 96 ; mem_address++) {
00319         sure_2416_write(mem_address, fill);
00320     }
00321 }       

Here is the call graph for this function:

void sure_2416_fill2 ( uns8  colour  ) 

00323                                   {
00324 
00325 uns16 count;
00326     sure_2416_send_command(SURE_2416_CMD_LEDS_OFF);
00327     clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00328     
00329     // send WR command
00330 
00331     // send 1
00332     set_pin  (sure_2416_data_port, sure_2416_data_pin);
00333     // pulse wr
00334     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00335     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00336     
00337     // send 0
00338     clear_pin  (sure_2416_data_port, sure_2416_data_pin);
00339     // pulse wr
00340     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00341     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00342 
00343     // send 1
00344     set_pin  (sure_2416_data_port, sure_2416_data_pin);
00345     // pulse wr
00346     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00347     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00348 
00349     // send mem address of zero
00350     clear_pin(sure_2416_data_port, sure_2416_data_pin);
00351     
00352     // write mem addr, bits 6 -> 0
00353     for(count = 0 ; count < 7 ; count++) {
00354             
00355         //change_pin_var(sure_2416_data_port, sure_2416_data_pin, test_bit(mem_addr, 6));
00356         // pulse wr
00357         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00358         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00359         // shift mem addr along
00360 
00361     }
00362     if (colour) {
00363         set_pin(sure_2416_data_port, sure_2416_data_pin);
00364     } else {
00365         clear_pin(sure_2416_data_port, sure_2416_data_pin);
00366     }
00367     // we need to toggle 384 times
00368     
00369     for(count = 0 ; count < 384 ; count++) {
00370         // pulse wr
00371         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00372         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00373         // shift mem addr along
00374 
00375     }
00376     // reset CS
00377 
00378     set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00379     sure_2416_send_command(SURE_2416_CMD_LEDS_ON);
00380 
00381     
00382 }

Here is the call graph for this function:

uns8 sure_2416_get_pixel ( uns8  x,
uns8  y 
)
void sure_2416_horizontal_line ( uns8  x,
uns8  y,
uns8  length,
uns8  colour 
)
void sure_2416_init (  ) 

Here is the call graph for this function:

void sure_2416_send_command ( uns8  command  ) 

00068                                           {
00069 
00070 uns8 count;
00071     
00072     clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00073     
00074     // send  command
00075     // send 1
00076     set_pin  (sure_2416_data_port, sure_2416_data_pin);
00077     // pulse wr
00078     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00079     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00080     
00081     // send 0
00082     clear_pin  (sure_2416_data_port, sure_2416_data_pin);
00083     // pulse wr
00084     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00085     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00086 
00087     // send 0
00088     clear_pin  (sure_2416_data_port, sure_2416_data_pin);
00089     // pulse wr
00090     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00091     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00092 
00093     // command bits 7 - 0
00094     for(count = 0 ; count < 8 ; count++) {
00095 
00096         if (test_bit(command, 7)) {
00097             set_pin(sure_2416_data_port, sure_2416_data_pin);
00098         } else {
00099             clear_pin(sure_2416_data_port, sure_2416_data_pin);
00100         }
00101         //change_pin_var(sure_2416_data_port, sure_2416_data_pin, test_bit(command, 7));
00102         // pulse wr
00103         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00104         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00105         // shift mem addr along
00106         command = command << 1;
00107     }
00108 
00109     // the don't care pulse
00110     
00111         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00112         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00113 
00114     // reset CS??
00115 
00116 // don't think we need this
00117 //  set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00118 //  delay_ms(1);
00119 //  clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00120 
00121     set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00122 }

Here is the caller graph for this function:

void sure_2416_set_brightness ( uns8  brightness  ) 

00188                                                {
00189     // allows level 0 - 15
00190     sure_2416_send_command(0b10100000 | (brightness & 0b00001111));
00191 }   

Here is the call graph for this function:

void sure_2416_set_pixel ( uns8  x,
uns8  y,
uns8  colour 
)

00193                                                       {
00194 
00195 uns8 common, panel, led_in_panel, inverted_x, out, mem_addr, bit_in_mem_addr, count, data;
00196 
00197     // first calculate memory address
00198     
00199     // y location on panels is top left based
00200     
00201     common = 15 - y;
00202     
00203 /* Previous calculations:
00204     panel = x / 8;  // which panel of the three is it that we need to change?
00205     led_in_panel = x - (panel * 8); 
00206     inverted_x = 7 - led_in_panel;
00207     out = panel * 8 + led_in_panel; //inverted_x;
00208     mem_addr = out * 4 + common / 4;
00209 */
00210     bit_in_mem_addr = common & 0b00000011;
00211     
00212 
00213     mem_addr = x * 4 + common / 4;
00214 
00215 
00216     clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00217 
00218     // send WR command
00219 
00220     // send 1
00221     set_pin  (sure_2416_data_port, sure_2416_data_pin);
00222     // pulse wr
00223     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00224     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00225     
00226     // send 0
00227     clear_pin  (sure_2416_data_port, sure_2416_data_pin);
00228     // pulse wr
00229     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00230     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00231 
00232     // send 1
00233     set_pin  (sure_2416_data_port, sure_2416_data_pin);
00234     // pulse wr
00235     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00236     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00237 
00238     // write mem addr, bits 6 -> 0
00239     for(count = 0 ; count < 7 ; count++) {
00240         if (test_bit(mem_addr, 6)) {
00241             set_pin(sure_2416_data_port, sure_2416_data_pin);
00242         } else { 
00243             clear_pin(sure_2416_data_port, sure_2416_data_pin);
00244         }
00245 
00246         //change_pin_var(sure_2416_data_port, sure_2416_data_pin, test_bit(mem_addr, 6));
00247         // pulse rd
00248         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00249         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00250 
00251         // shift mem addr along
00252         mem_addr = mem_addr << 1;
00253     }
00254 
00255     // Retrieve 4 bits
00256     // read clocked out on falling edge of RD
00257     
00258     make_input(sure_2416_data_port, sure_2416_data_pin);
00259 
00260     for(count = 0 ; count < 4 ; count++) {
00261         // pulse rd
00262         clear_pin(sure_2416_rd_port, sure_2416_rd_pin);
00263 
00264         data = data >> 1;
00265         data.3 = test_pin(sure_2416_data_port, sure_2416_data_pin);
00266 
00267         set_pin  (sure_2416_rd_port, sure_2416_rd_pin);
00268 
00269     }
00270 
00271     make_output(sure_2416_data_port, sure_2416_data_pin);
00272 
00273     // now we have the data, we need to change the bit
00274     if (colour) {
00275         set_bit(data, bit_in_mem_addr);
00276     } else {
00277         clear_bit(data, bit_in_mem_addr);
00278     }   
00279     
00280     // Now write it back out again
00281     
00282     // write data, bits 0 -> 3 (different from mem addr format)
00283     for(count = 0 ; count < 4 ; count++) {
00284         //change_pin_var(sure_2416_data_port, sure_2416_data_pin, test_bit(data, 0));
00285         if (test_bit(data, 0)) {
00286             set_pin(sure_2416_data_port, sure_2416_data_pin);
00287         } else { 
00288             clear_pin(sure_2416_data_port, sure_2416_data_pin);
00289         }
00290 
00291         // pulse wr
00292         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00293         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00294         // shift data along
00295         data = data >> 1;
00296     }
00297     
00298     
00299     // reset CS
00300     // don't think this is necessary
00301 //  set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00302 //  clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00303     set_pin  (sure_2416_cs1_port, sure_2416_cs1_pin);
00304     
00305     
00306 }

void sure_2416_setup (  ) 

00043                        {
00044     
00045     //serial_print_str("Setting up 2416\n");
00046     
00047     make_output(sure_2416_cs1_port, sure_2416_cs1_pin);
00048     make_output(sure_2416_data_port, sure_2416_data_pin);
00049     make_output(sure_2416_wr_port, sure_2416_wr_pin);
00050     make_output(sure_2416_rd_port, sure_2416_rd_pin);
00051 
00052     set_pin(sure_2416_wr_port, sure_2416_wr_pin);
00053     set_pin(sure_2416_rd_port, sure_2416_rd_pin);
00054     set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);  
00055 
00056 }

void sure_2416_vertical_line ( uns8  x,
uns8  y,
uns8  length,
uns8  colour 
)
void sure_2416_write ( uns8  mem_addr,
uns8  data 
)

00124                                                {
00125 
00126 uns8 count;
00127     
00128     clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00129     
00130     // send WR command
00131 
00132     // send 1
00133     set_pin  (sure_2416_data_port, sure_2416_data_pin);
00134     // pulse wr
00135     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00136     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00137     
00138     // send 0
00139     clear_pin  (sure_2416_data_port, sure_2416_data_pin);
00140     // pulse wr
00141     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00142     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00143 
00144     // send 1
00145     set_pin  (sure_2416_data_port, sure_2416_data_pin);
00146     // pulse wr
00147     clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00148     set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00149 
00150     // write mem addr, bits 6 -> 0
00151     for(count = 0 ; count < 7 ; count++) {
00152         if (test_bit(mem_addr, 6)) {
00153             set_pin(sure_2416_data_port, sure_2416_data_pin);
00154         } else { 
00155             clear_pin(sure_2416_data_port, sure_2416_data_pin);
00156         }
00157     
00158         //change_pin_var(sure_2416_data_port, sure_2416_data_pin, test_bit(mem_addr, 6));
00159         // pulse wr
00160         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00161         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00162         // shift mem addr along
00163         mem_addr = mem_addr << 1;
00164     }
00165 
00166     // write data, bits 0 -> 3 (different from mem addr format)
00167     for(count = 0 ; count < 4 ; count++) {
00168         change_pin_var(sure_2416_data_port, sure_2416_data_pin, test_bit(data, 0));
00169         // pulse wr
00170         clear_pin(sure_2416_wr_port, sure_2416_wr_pin);
00171         set_pin  (sure_2416_wr_port, sure_2416_wr_pin);
00172         // shift mem addr along
00173         data = data >> 1;
00174     }
00175     // reset CS
00176 
00177 //  set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00178 //  delay_ms(1);
00179 //  clear_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00180     set_pin(sure_2416_cs1_port, sure_2416_cs1_pin);
00181     
00182     
00183 }

Here is the caller graph for this function:


Generated on Fri Aug 19 09:09:32 2011 for Pic Pack Library by  doxygen 1.6.1