Changes for page Front I/O
Last modified by Kevin Wiki on 2024/07/07 22:48
From version
4.2
edited by Kevin Wiki
on 2024/07/04 23:40
on 2024/07/04 23:40
Change comment:
There is no comment for this version
To 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
Summary
Details
- Page properties
-
- Content
-
... ... @@ -6,12 +6,11 @@ 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. 8 8 9 -[[image:xserve io main cable pinout.drawio.png]] 9 +[[image:xserve io main cable and PCB pinout.drawio.png||alt="xserve io main cable pinout.drawio.png"]] 10 10 11 11 (% class="wikigeneratedid" %) 12 -[[attach:xserve io main cable pinout.drawio.svg||target="_blank"]] 12 +[[attach:xserve io main cable and PCB pinout.drawio.svg||target="_blank"]] 13 13 14 - 15 15 (% class="wikigeneratedid" %) 16 16 This cable allows us to communicate with 4 chips using two data lines, audio & service switch, case switch and (yet to be documented) compute LEDs 17 17 ... ... @@ -149,7 +149,7 @@ 149 149 150 150 == SAA1064T data for driving center IO LED stack == 151 151 152 -Center IO stack is a stack of 2 3LED's, 22blue and 1 green for ethernet activity. These are duplicated next to each other and driven by each their SAA1064T chips. Earlier we found the i2c address and just by playing around figured out that 4 segments of 1 byte binary values are used to set ship register.151 +Center IO stack is a stack of 24 LED's, 23 blue and 1 green for ethernet activity. These are duplicated next to each other and driven by each their SAA1064T chips. Earlier we found the i2c address and just by playing around figured out that 4 segments of 1 byte binary values are used to set ship register. 153 153 154 154 {{code language="C++"}} 155 155 void fillColumns() { ... ... @@ -167,7 +167,7 @@ 167 167 {{/code}} 168 168 169 169 (% class="wikigeneratedid" %) 170 -Here the last byte we send only is 5 bits since we only have 5 LEDs instead of 6 to address (total of 2 3). Also note that we start the transmission with a single bit.169 +~-~- Here the last byte we send only is 5 bits since we only have 5 LEDs instead of 6 to address (total of 24). Also note that we start the transmission with a single bit. ~-~- 171 171 172 172 == Pinouts voltages from MLB == 173 173 ... ... @@ -195,6 +195,89 @@ 195 195 * Power LED P3V3 - 3.30V 196 196 * Power LED - 0.87 V 197 197 197 += Controlling top I/O LED = 198 + 199 +On the top row we have the following input/output devices in order from left to right; 200 + 201 +Left side: 202 + 203 +* physical lock 204 +* lock LED 205 +* warning/service button 206 +* warning/service LED 207 +* locate button 208 +* power LED (red & green) 209 +* fan LED (red & green) 210 +* temperature LED (red & green) 211 +* compute LED (unknown) 212 + 213 +Right side: 214 + 215 +* power LED (red & green) 216 +* fan LED (red & green) 217 +* temperature LED (red & green) 218 +* compute LED (unknown) 219 +* lock switch 220 + 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 + 223 +(% border="1" %) 224 +|=(% scope="row" %)Register|1|2|3|4|5|6|7 225 +|=Device|Power LED Green|Power LED Red|Fan LED Green|Fan LED Red|Temperature LED Green|Temperature LED Red|Lock LED 226 + 227 +To control each LED we shift either a 0 to turn off or 1 to turn on. Since each device shares a single red/green LED (power LED green & power LED red) setting both to 1 at the same time will always leave it red. That is when power LED green and power LED red are both enabled, red always takes precedence. 228 + 229 +Use following script to power LEDs one at a time: 230 + 231 +{{code language="c++"}} 232 +#include <PCA9554.h> // Load the PCA9554 Library 233 + 234 +PCA9554 ioCon1(0x24); // Create an object at this address 235 + 236 +uint8_t mapIO = 0b10000000; 237 + 238 +void shiftL() { 239 + mapIO = (mapIO << 1) | ((mapIO & 0x80) >> 7); 240 +} 241 + 242 +void write() { 243 + Serial.println("writing to PCA9554 device"); 244 + 245 + for (int i = 0; i < 8; ++i) { 246 + ioCon1.digitalWrite(i, (mapIO & (1 << i)) ? 0 : 1); 247 + } 248 +} 249 + 250 +void setup() 251 +{ 252 + Serial.begin(9600); 253 + Serial.println("Setup"); 254 + 255 + ioCon1.portMode(ALLOUTPUT); 256 +} 257 + 258 +void loop() 259 +{ 260 + write(); 261 + shiftL(); 262 + 263 + delay(500); 264 +} 265 +{{/code}} 266 + 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 + 198 198 199 199 ))) 200 200
- xserve io main cable pinout.drawio.png
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.kevin - Size
-
... ... @@ -1,1 +1,0 @@ 1 -41.4 KB - Content
- xserve io main cable pinout.drawio.svg
-
- Author
-
... ... @@ -1,1 +1,0 @@ 1 -XWiki.kevin - Size
-
... ... @@ -1,1 +1,0 @@ 1 -41.4 KB - Content
- xserve io main cable and PCB pinout.drawio.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.kevin - Size
-
... ... @@ -1,0 +1,1 @@ 1 +88.9 KB - Content
- xserve io main cable and PCB pinout.drawio.svg
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.kevin - Size
-
... ... @@ -1,0 +1,1 @@ 1 +83.3 KB - Content