Changes for page Front I/O

Last modified by Kevin Wiki on 2024/07/07 22:48

From version 9.2
edited by Kevin Wiki
on 2024/07/07 22:48
Change comment: There is no comment for this version
To version 7.5
edited by Kevin Wiki
on 2024/07/05 10:29
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.
... ... @@ -224,7 +224,6 @@
224 224  
225 225  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)
226 226  
227 -(% border="1" %)
228 228  |=(% scope="row" %)Register|1|2|3|4|5|6|7
229 229  |=Device|Power LED Green|Power LED Red|Fan LED Green|Fan LED Red|Temperature LED Green|Temperature LED Red|Lock LED
230 230  
... ... @@ -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 -= Front I/O LED Column Address Map =
285 -
286 -|**Address Range (Binary)**|**Address Range (hex)**|**Size**|**Description**
287 -|0-7|00-07|1 byte|Ethernet indicator and LEDs register 1
288 -|8-15|08-0F|1 byte|LEDs register 2
289 -|16-23|10-17|1 byte|LEDs register 3
290 -|24-31|18-1F|1 byte|LEDs register 4
291 -
292 -[[attach:Address Ranges-Table 1.csv||target="_blank"]]
293 -
294 -|**Registers**|**LEDs Controlled**|**Count**|**Address Range (hex)**|**Description**
295 -|**Register 1**|1 2 4 6 8 10 12|7|00-07|LED 1 ethernet indicator, even bottom half
296 -|**Register 2**|3 5 7 9 11 13|6|08-0F|Odd LED top half
297 -|**Register 3**|14 16 18 20 22 23 24|7|10-17|Even LED bottom half
298 -|**Register 4**|15 17 19 21|4|18-1F|Odd LED top half
299 -
300 -[[attach:LEDs per register-Table 1.csv||target="_blank"]]
301 -
302 -| | |(% colspan="8" %)**bits (1 byte per register)**
303 -|**Controls device**|**Register**|**7**|**6**|**5**|**4**|**3**|**2**|**1**|**0**
304 -|**Ethernet LED**|Register 1|0|0|0|0|0|0|0|1
305 -|**LED 1**|Register 1|0|0|0|0|0|0|1|0
306 -|**LED 2**|Register 2|0|0|0|0|0|0|1|0
307 -|**LED 3**|Register 1|0|0|0|0|0|1|0|0
308 -|**LED 4**|Register 2|0|0|0|0|0|1|0|0
309 -|**LED 5**|Register 1|0|0|0|0|1|0|0|0
310 -|**LED 6**|Register 2|0|0|0|0|1|0|0|0
311 -|**LED 7**|Register 1|0|0|0|1|0|0|0|0
312 -|**LED 8**|Register 2|0|0|0|1|0|0|0|0
313 -|**LED 9**|Register 1|0|0|1|0|0|0|0|0
314 -|**LED 10**|Register 2|0|0|1|0|0|0|0|0
315 -|**LED 11**|Register 1|0|1|0|0|0|0|0|0
316 -|**LED 12**|Register 2|0|1|0|0|0|0|0|0
317 -|**LED 13**|Register 3|0|0|0|0|0|0|0|1
318 -|**LED 14**|Register 4|0|0|0|0|0|0|0|1
319 -|**LED 15**|Register 3|0|0|0|0|0|0|1|0
320 -|**LED 16**|Register 4|0|0|0|0|0|0|1|0
321 -|**LED 17**|Register 3|0|0|0|0|0|1|0|0
322 -|**LED 18**|Register 4|0|0|0|0|0|1|0|0
323 -|**LED 19**|Register 3|0|0|0|0|1|0|0|0
324 -|**LED 20**|Register 4|0|0|0|0|1|0|0|0
325 -|**LED 21**|Register 3|0|0|0|1|0|0|0|0
326 -|**LED 22**|Register 3|0|0|1|0|0|0|0|0
327 -|**LED 23**|Register 3|0|1|0|0|0|0|0|0
328 -
329 -[[attach:Register Memory Map-Table 1.csv||target="_blank"]]
330 -
331 -= Controlling center LED columns =
332 -
333 -There are a total of 4 banks of addressable LED's 12 each of the total 48.
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 -225 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 register 1
3 -8-15;08-0F;1 byte;LEDs register 2
4 -16-23;10-17;1 byte;LEDs register 3
5 -24-31;18-1F;1 byte;LEDs register 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 -
LEDs per register-Table 1.csv
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.kevin
Size
... ... @@ -1,1 +1,0 @@
1 -306 bytes
Content
... ... @@ -1,6 +1,0 @@
1 -Registers;LEDs Controlled;Count;Address Range (hex);Description
2 -Register 1;1 2 4 6 8 10 12;7;00-07;LED 1 ethernet indicator, even bottom half
3 -Register 2;3 5 7 9 11 13;6;08-0F;Odd LED top half
4 -Register 3;14 16 18 20 22 23 24;7;10-17;Even LED bottom half
5 -Register 4;15 17 19 21;4;18-1F;Odd LED top half
6 -
Register Memory Map-Table 1.csv
Author
... ... @@ -1,1 +1,0 @@
1 -XWiki.kevin
Size
... ... @@ -1,1 +1,0 @@
1 -914 bytes
Content
... ... @@ -1,26 +1,0 @@
1 -;;bits (1 byte per register);;;;;;;
2 -Controls device;Register;7;6;5;4;3;2;1;0
3 -Ethernet LED;Register 1;0;0;0;0;0;0;0;1
4 -LED 1;Register 1;0;0;0;0;0;0;1;0
5 -LED 2;Register 2;0;0;0;0;0;0;1;0
6 -LED 3;Register 1;0;0;0;0;0;1;0;0
7 -LED 4;Register 2;0;0;0;0;0;1;0;0
8 -LED 5;Register 1;0;0;0;0;1;0;0;0
9 -LED 6;Register 2;0;0;0;0;1;0;0;0
10 -LED 7;Register 1;0;0;0;1;0;0;0;0
11 -LED 8;Register 2;0;0;0;1;0;0;0;0
12 -LED 9;Register 1;0;0;1;0;0;0;0;0
13 -LED 10;Register 2;0;0;1;0;0;0;0;0
14 -LED 11;Register 1;0;1;0;0;0;0;0;0
15 -LED 12;Register 2;0;1;0;0;0;0;0;0
16 -LED 13;Register 3;0;0;0;0;0;0;0;1
17 -LED 14;Register 4;0;0;0;0;0;0;0;1
18 -LED 15;Register 3;0;0;0;0;0;0;1;0
19 -LED 16;Register 4;0;0;0;0;0;0;1;0
20 -LED 17;Register 3;0;0;0;0;0;1;0;0
21 -LED 18;Register 4;0;0;0;0;0;1;0;0
22 -LED 19;Register 3;0;0;0;0;1;0;0;0
23 -LED 20;Register 4;0;0;0;0;1;0;0;0
24 -LED 21;Register 3;0;0;0;1;0;0;0;0
25 -LED 22;Register 3;0;0;1;0;0;0;0;0
26 -LED 23;Register 3;0;1;0;0;0;0;0;0