Sure 2416 led matrix display routines. More...
Functions | |
void | sure_2416_fill (uns8 colour) |
void | sure_2416_fill2 (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_write (uns8 mem_addr, uns8 data) |
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 }
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 }
void sure_2416_init | ( | ) |
00058 { 00059 00060 sure_2416_send_command(SURE_2416_CMD_SYS_DISABLE); 00061 sure_2416_send_command(SURE_2416_CMD_PMOS_16_COMMON); // Correct hardware layout for the board 00062 00063 sure_2416_send_command(SURE_2416_CMD_CLK_MASTER_MODE); // We are the master 00064 sure_2416_send_command(SURE_2416_CMD_SYS_ENABLE); 00065 sure_2416_send_command(SURE_2416_CMD_LEDS_ON); //led on 00066 }
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 }
void sure_2416_set_brightness | ( | uns8 | brightness | ) |
00188 { 00189 // allows level 0 - 15 00190 sure_2416_send_command(0b10100000 | (brightness & 0b00001111)); 00191 }
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_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 }