Changes for page Front I/O

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

From version 9.1
edited by Kevin Wiki
on 2024/07/07 22:44
Change comment: There is no comment for this version
To version 8.2
edited by Kevin Wiki
on 2024/07/05 14:00
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.
... ... @@ -281,211 +281,7 @@
281 281  There are 4 words, each containing 7 data bits. They do not
282 282  
283 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 -