Changes for page Front I/O
Last modified by Kevin Wiki on 2024/07/07 22:48
From version
8.2
edited by Kevin Wiki
on 2024/07/05 14:00
on 2024/07/05 14:00
Change comment:
There is no comment for this version
To 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
Summary
Details
- Page properties
-
- Content
-
... ... @@ -2,6 +2,10 @@ 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 + 5 5 = Pinout = 6 6 7 7 There is a single cable that controls four parts, each half side of I/O LED and center column of blue LEDs. ... ... @@ -277,7 +277,211 @@ 277 277 There are 4 words, each containing 7 data bits. They do not 278 278 279 279 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; 280 280 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 + 281 281 ))) 282 282 283 283
- Address Ranges-Table 1.csv
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.kevin - Size
-
... ... @@ -1,0 +1,1 @@ 1 +209 bytes - Content
-
... ... @@ -1,0 +1,6 @@ 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,0 +1,1 @@ 1 +XWiki.kevin - Size
-
... ... @@ -1,0 +1,1 @@ 1 +294 bytes - Content
-
... ... @@ -1,0 +1,6 @@ 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 +