Changes for page Front I/O
Last modified by Kevin Wiki on 2024/07/07 22:48
From version
8.8
edited by Kevin Wiki
on 2024/07/07 22:44
on 2024/07/07 22:44
Change comment:
There is no comment for this version
To version
8.1
edited by Kevin Wiki
on 2024/07/05 12:23
on 2024/07/05 12:23
Change comment:
There is no comment for this version
Summary
Details
- Page properties
-
- Content
-
... ... @@ -2,10 +2,6 @@ 2 2 ((( 3 3 (% class="col-xs-12 col-sm-8" %) 4 4 ((( 5 -= Code = 6 - 7 -Arduino project with utils and script for driving all LEDs, buttons and MLB front I/O headers for driving Xserve front I/O devices: [[https:~~/~~/github.com/KevinMidboe/xserve-io>>https://github.com/KevinMidboe/xserve-io/]]. 8 - 9 9 = Pinout = 10 10 11 11 There is a single cable that controls four parts, each half side of I/O LED and center column of blue LEDs. ... ... @@ -269,223 +269,7 @@ 269 269 {{/code}} 270 270 271 271 272 -Controlling middle IO strip 273 - 274 -0 = 0000 275 -1 (green) = 0001 276 -2 = 0010 277 -1 + 2 = 0011 278 -3 = 0100 279 - 280 - 281 -There are 4 words, each containing 7 data bits. They do not 282 - 283 - 284 -= Controlling center LED columns = 285 - 286 -There are a total of 4 banks of addressable LED's 12 each of the total 48. 287 - 288 - 289 -|**Address Range (Binary)**|**Address Range (hex)**|**Size**|**Description** 290 -|0-7|00-07|1 byte|Ethernet indicator and LEDs bank-1 291 -|8-15|08-0F|1 byte|LEDs bank-2 292 -|16-23|10-17|1 byte|LEDs bank-3 293 -|24-31|18-1F|1 byte|LEDs bank-4 294 - 295 -[[attach:Address Ranges-Table 1.csv||target="_blank"]] 296 - 297 -|=**Address Banks**|=**LEDs Controlled**|=**Count**|=**Address Range (hex)**|=**Description** 298 -|=**Bank-1**|1 2 4 6 8 10 12|7|00-07|LED 1 ethernet indicator, even bottom half 299 -|=**Bank-2**|3 5 7 9 11 13|6|08-0F|Odd LED top half 300 -|=**Bank-3**|14 16 18 20 22 23 24|7|10-17|Even LED bottom half 301 -|=**Bank-4**|15 17 19 21|4|18-1F|Odd LED top half 302 - 303 -[[attach:LEDs per bank-Table 1.csv||target="_blank"]] 304 - 305 - 306 -| | |(% colspan="8" %)**bits (1 byte per register)** 307 -|**Controls device**|**Register**|**7**|**6**|**5**|**4**|**3**|**2**|**1**|**0** 308 -|**Ethernet LED**|Register 1|0|0|0|0|0|0|0|1 309 -|**LED 1**|Register 1|0|0|0|0|0|0|1|0 310 -|**LED 2**|Register 2|0|0|0|0|0|0|1|0 311 -|**LED 3**|Register 1|0|0|0|0|0|1|0|0 312 -|**LED 4**|Register 2|0|0|0|0|0|1|0|0 313 -|**LED 5**|Register 1|0|0|0|0|1|0|0|0 314 -|**LED 6**|Register 2|0|0|0|0|1|0|0|0 315 -|**LED 7**|Register 1|0|0|0|1|0|0|0|0 316 -|**LED 8**|Register 2|0|0|0|1|0|0|0|0 317 -|**LED 9**|Register 1|0|0|1|0|0|0|0|0 318 -|**LED 10**|Register 2|0|0|1|0|0|0|0|0 319 -|**LED 11**|Register 1|0|1|0|0|0|0|0|0 320 -|**LED 12**|Register 2|0|1|0|0|0|0|0|0 321 -|**LED 13**|Register 3|0|0|0|0|0|0|0|1 322 -|**LED 14**|Register 4|0|0|0|0|0|0|0|1 323 -|**LED 15**|Register 3|0|0|0|0|0|0|1|0 324 -|**LED 16**|Register 4|0|0|0|0|0|0|1|0 325 -|**LED 17**|Register 3|0|0|0|0|0|1|0|0 326 -|**LED 18**|Register 4|0|0|0|0|0|1|0|0 327 -|**LED 19**|Register 3|0|0|0|0|1|0|0|0 328 -|**LED 20**|Register 4|0|0|0|0|1|0|0|0 329 -|**LED 21**|Register 3|0|0|0|1|0|0|0|0 330 -|**LED 22**|Register 3|0|0|1|0|0|0|0|0 331 -|**LED 23**|Register 3|0|1|0|0|0|0|0|0 332 - 333 - 334 - 335 -Script for writing all permutations to display: 336 - 337 -{{code language="c++"}} 338 -#include "Wire.h" // enable I2C bus 339 - 340 -byte saa1064 = 0x3B; // define the I2C bus address for our SAA1064 (pin 1 to GND) **** 341 - 342 -void setup() 343 -{ 344 - Wire.begin(); // start up I2C bus 345 -} 346 - 347 -void write(int value) { 348 - Wire.beginTransmission(saa1064); 349 - Wire.write(1); 350 - 351 - Wire.write(value); 352 - Wire.write(value); 353 - Wire.write(value); 354 - Wire.write(value); 355 - 356 - Wire.endTransmission(); 357 -} 358 - 359 -void loop() { 360 - for (int value = 0; value < 127; value++) { 361 - write(value); 362 - delay(300); 363 - } 364 -} 365 -{{/code}} 366 - 367 -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. 368 - 369 -{{code language="c++"}} 370 -#include "Wire.h" // enable I2C bus 371 - 372 -#define TCAADDR 0x70 373 -byte saa1064 = 0x3B; // define the I2C bus address for our SAA1064 374 - 375 -byte bank1; 376 -byte bank2; 377 -byte bank3; 378 -byte bank4; 379 - 380 -byte activityLED = 0b00000001; 381 -byte leds[23][4] = { 382 - {0b00000010, 0b00000000, 0b00000000, 0b00000000}, // 1 383 - {0b00000000, 0b00000010, 0b00000000, 0b00000000}, // 2 384 - {0b00000100, 0b00000000, 0b00000000, 0b00000000}, // 3 385 - {0b00000000, 0b00000100, 0b00000000, 0b00000000}, // 4 386 - {0b00001000, 0b00000000, 0b00000000, 0b00000000}, // 5 387 - {0b00000000, 0b00001000, 0b00000000, 0b00000000}, // 6 388 - {0b00010000, 0b00000000, 0b00000000, 0b00000000}, // 7 389 - {0b00000000, 0b00010000, 0b00000000, 0b00000000}, // 8 390 - {0b00100000, 0b00000000, 0b00000000, 0b00000000}, // 9 391 - {0b00000000, 0b00100000, 0b00000000, 0b00000000}, // 10 392 - {0b01000000, 0b00000000, 0b00000000, 0b00000000}, // 11 393 - {0b00000000, 0b01000000, 0b00000000, 0b00000000}, // 12 394 - {0b00000000, 0b00000000, 0b00000001, 0b00000000}, // 13 395 - {0b00000000, 0b00000000, 0b00000000, 0b00000001}, // 14 396 - {0b00000000, 0b00000000, 0b00000010, 0b00000000}, // 15 397 - {0b00000000, 0b00000000, 0b00000000, 0b00000010}, // 16 398 - {0b00000000, 0b00000000, 0b00000100, 0b00000000}, // 17 399 - {0b00000000, 0b00000000, 0b00000000, 0b00000100}, // 18 400 - {0b00000000, 0b00000000, 0b00001000, 0b00000000}, // 19 401 - {0b00000000, 0b00000000, 0b00000000, 0b00001000}, // 20 402 - {0b00000000, 0b00000000, 0b00010000, 0b00000000}, // 21 403 - {0b00000000, 0b00000000, 0b00100000, 0b00000000}, // 22 404 - {0b00000000, 0b00000000, 0b01000000, 0b00000000} // 23 405 -}; 406 - 407 -void setup() 408 -{ 409 - Serial.begin(9600); 410 - Wire.begin(); // start up I2C bus 411 - 412 - Serial.println("setting up ports"); 413 -} 414 - 415 -void tcaselect(uint8_t i) { 416 - if (i > 7) return; 417 417 418 - Wire.beginTransmission(TCAADDR); 419 - Wire.write(1 << i); 420 - Wire.endTransmission(); 421 -} 422 - 423 -void selectLeft() { tcaselect(2); } 424 -void selectRight() { tcaselect(1); } 425 - 426 -void write() { 427 - Wire.beginTransmission(saa1064); 428 - Wire.write(1); 429 - 430 - Wire.write(bank1); 431 - Wire.write(bank2); 432 - Wire.write(bank3); 433 - Wire.write(bank4); 434 - 435 - Wire.endTransmission(); 436 -} 437 - 438 -void resetBanks() { 439 - bank1 = 0; 440 - bank2 = 0; 441 - bank3 = 0; 442 - bank4 = 0; 443 -} 444 - 445 -void displayNumber(int number) { 446 - bank1 = leds[number - 1][0]; 447 - bank2 = leds[number - 1][1]; 448 - bank3 = leds[number - 1][2]; 449 - bank4 = leds[number - 1][3]; 450 -} 451 - 452 -void displayUpToNumber(int number) { 453 - for (int i = 0; i < number; i++) { 454 - bank1 = bank1 | leds[i][0]; 455 - bank2 = bank2 | leds[i][1]; 456 - bank3 = bank3 | leds[i][2]; 457 - bank4 = bank4 | leds[i][3]; 458 - } 459 -} 460 - 461 -void computeEthernetActivity() { 462 - bank1 = bank1 | activityLED; 463 -} 464 - 465 -void loop() { 466 - resetBanks(); 467 - delay(10); 468 - 469 - displayUpToNumber(15); 470 - computeEthernetActivity(); 471 - 472 - selectLeft(); 473 - write(); 474 - delay(2); 475 - 476 - selectRight(); 477 - write(); 478 - delay(1000); 479 -} 480 -{{/code}} 481 - 482 - 483 -= Missing pieces, TODO = 484 - 485 -* how to control compute LED in top IO row 486 -* control warning button LED 487 - 488 - 489 489 ))) 490 490 491 491
- Address Ranges-Table 1.csv
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.kevin - Size
-
... ... @@ -1,1 +1,0 @@ 1 -209 bytes - Content
-
... ... @@ -1,6 +1,0 @@ 1 -Address Range (Binary);Address Range (hex);Size;Description 2 -0-7;00-07;1 byte;Ethernet indicator and LEDs bank-1 3 -8-15;08-0F;1 byte;LEDs bank-2 4 -16-23;10-17;1 byte;LEDs bank-3 5 -24-31;18-1F;1 byte;LEDs bank-4 6 -
- LEDs per bank-Table 1.csv
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.kevin - Size
-
... ... @@ -1,1 +1,0 @@ 1 -294 bytes - Content
-
... ... @@ -1,6 +1,0 @@ 1 -Address Banks;LEDs Controlled;Count;Address Range (hex);Description 2 -Bank-1;1 2 4 6 8 10 12;7;00-07;LED 1 ethernet indicator, even bottom half 3 -Bank-2;3 5 7 9 11 13;6;08-0F;Odd LED top half 4 -Bank-3;14 16 18 20 22 23 24;7;10-17;Even LED bottom half 5 -Bank-4;15 17 19 21;4;18-1F;Odd LED top half 6 -