Changes for page Front I/O
Last modified by Kevin Wiki on 2024/07/07 22:48
From version
8.3
edited by Kevin Wiki
on 2024/07/06 11:12
on 2024/07/06 11:12
Change comment:
There is no comment for this version
To version
7.5
edited by Kevin Wiki
on 2024/07/05 10:29
on 2024/07/05 10:29
Change comment:
There is no comment for this version
Summary
Details
- Page properties
-
- Content
-
... ... @@ -220,7 +220,6 @@ 220 220 221 221 Each sides bank of LEDs are driven by each their PCA9554 shift register. The registers represent the following LEDs: (Note that Lock LED is only present for the LEFT side) 222 222 223 -(% border="1" %) 224 224 |=(% scope="row" %)Register|1|2|3|4|5|6|7 225 225 |=Device|Power LED Green|Power LED Red|Fan LED Green|Fan LED Red|Temperature LED Green|Temperature LED Red|Lock LED 226 226 ... ... @@ -265,176 +265,7 @@ 265 265 {{/code}} 266 266 267 267 268 -Controlling middle IO strip 269 - 270 -0 = 0000 271 -1 (green) = 0001 272 -2 = 0010 273 -1 + 2 = 0011 274 -3 = 0100 275 - 276 - 277 -There are 4 words, each containing 7 data bits. They do not 278 - 279 - 280 -= Controlling center LED columns = 281 - 282 -There are a total of 4 banks of addressable LED's 12 each of the total 48. 283 - 284 -|=Register Banks|=LEDs|=Count 285 -|=Bank 1|1 2 4 6 8 10 12|7 286 -|=Bank 2|3 5 7 9 11 13|6 287 -|=Bank 3|14 16 18 20 22 23 24|7 288 -|=Bank 4|15 17 19 21|4 289 - 290 -Script for writing all permutations to display: 291 - 292 -{{code language="c++"}} 293 -#include "Wire.h" // enable I2C bus 294 - 295 -byte saa1064 = 0x3B; // define the I2C bus address for our SAA1064 (pin 1 to GND) **** 296 - 297 -void setup() 298 -{ 299 - Wire.begin(); // start up I2C bus 300 -} 301 - 302 -void write(int value) { 303 - Wire.beginTransmission(saa1064); 304 - Wire.write(1); 305 - 306 - Wire.write(value); 307 - Wire.write(value); 308 - Wire.write(value); 309 - Wire.write(value); 310 - 311 - Wire.endTransmission(); 312 -} 313 - 314 -void loop() { 315 - for (int value = 0; value < 127; value++) { 316 - write(value); 317 - delay(300); 318 - } 319 -} 320 -{{/code}} 321 - 322 -Since LED positions don't map sequentially with LED number we can't address them in 10-base form, but we can define each LED in binary and use OR operator to display LEDs we want. 323 - 324 -{{code language="c++"}} 325 -#include "Wire.h" // enable I2C bus 326 - 327 -#define TCAADDR 0x70 328 -byte saa1064 = 0x3B; // define the I2C bus address for our SAA1064 329 - 330 -byte bank1; 331 -byte bank2; 332 -byte bank3; 333 -byte bank4; 334 - 335 -byte activityLED = 0b00000001; 336 -byte leds[23][4] = { 337 - {0b00000010, 0b00000000, 0b00000000, 0b00000000}, // 1 338 - {0b00000000, 0b00000010, 0b00000000, 0b00000000}, // 2 339 - {0b00000100, 0b00000000, 0b00000000, 0b00000000}, // 3 340 - {0b00000000, 0b00000100, 0b00000000, 0b00000000}, // 4 341 - {0b00001000, 0b00000000, 0b00000000, 0b00000000}, // 5 342 - {0b00000000, 0b00001000, 0b00000000, 0b00000000}, // 6 343 - {0b00010000, 0b00000000, 0b00000000, 0b00000000}, // 7 344 - {0b00000000, 0b00010000, 0b00000000, 0b00000000}, // 8 345 - {0b00100000, 0b00000000, 0b00000000, 0b00000000}, // 9 346 - {0b00000000, 0b00100000, 0b00000000, 0b00000000}, // 10 347 - {0b01000000, 0b00000000, 0b00000000, 0b00000000}, // 11 348 - {0b00000000, 0b01000000, 0b00000000, 0b00000000}, // 12 349 - {0b00000000, 0b00000000, 0b00000001, 0b00000000}, // 13 350 - {0b00000000, 0b00000000, 0b00000000, 0b00000001}, // 14 351 - {0b00000000, 0b00000000, 0b00000010, 0b00000000}, // 15 352 - {0b00000000, 0b00000000, 0b00000000, 0b00000010}, // 16 353 - {0b00000000, 0b00000000, 0b00000100, 0b00000000}, // 17 354 - {0b00000000, 0b00000000, 0b00000000, 0b00000100}, // 18 355 - {0b00000000, 0b00000000, 0b00001000, 0b00000000}, // 19 356 - {0b00000000, 0b00000000, 0b00000000, 0b00001000}, // 20 357 - {0b00000000, 0b00000000, 0b00010000, 0b00000000}, // 21 358 - {0b00000000, 0b00000000, 0b00100000, 0b00000000}, // 22 359 - {0b00000000, 0b00000000, 0b01000000, 0b00000000} // 23 360 -}; 361 - 362 -void setup() 363 -{ 364 - Serial.begin(9600); 365 - Wire.begin(); // start up I2C bus 366 - 367 - Serial.println("setting up ports"); 368 -} 369 - 370 -void tcaselect(uint8_t i) { 371 - if (i > 7) return; 372 372 373 - Wire.beginTransmission(TCAADDR); 374 - Wire.write(1 << i); 375 - Wire.endTransmission(); 376 -} 377 - 378 -void selectLeft() { tcaselect(2); } 379 -void selectRight() { tcaselect(1); } 380 - 381 -void write() { 382 - Wire.beginTransmission(saa1064); 383 - Wire.write(1); 384 - 385 - Wire.write(bank1); 386 - Wire.write(bank2); 387 - Wire.write(bank3); 388 - Wire.write(bank4); 389 - 390 - Wire.endTransmission(); 391 -} 392 - 393 -void resetBanks() { 394 - bank1 = 0; 395 - bank2 = 0; 396 - bank3 = 0; 397 - bank4 = 0; 398 -} 399 - 400 -void displayNumber(int number) { 401 - bank1 = leds[number - 1][0]; 402 - bank2 = leds[number - 1][1]; 403 - bank3 = leds[number - 1][2]; 404 - bank4 = leds[number - 1][3]; 405 -} 406 - 407 -void displayUpToNumber(int number) { 408 - for (int i = 0; i < number; i++) { 409 - bank1 = bank1 | leds[i][0]; 410 - bank2 = bank2 | leds[i][1]; 411 - bank3 = bank3 | leds[i][2]; 412 - bank4 = bank4 | leds[i][3]; 413 - } 414 -} 415 - 416 -void computeEthernetActivity() { 417 - bank1 = bank1 | activityLED; 418 -} 419 - 420 -void loop() { 421 - resetBanks(); 422 - delay(10); 423 - 424 - displayUpToNumber(15); 425 - computeEthernetActivity(); 426 - 427 - selectLeft(); 428 - write(); 429 - delay(2); 430 - 431 - selectRight(); 432 - write(); 433 - delay(1000); 434 -} 435 -{{/code}} 436 - 437 - 438 438 ))) 439 439 440 440