Display von ACP USV

Hab gestern wieder ein Teil aus einer kaputten APC USV gefunden. Die Anzeige Batterie und Leistung mit Aus/Ein Knopf. Hab mir gedacht ob man das nicht für den Arduino brauchen könnte zum herumspielen.


Es ist ein ganz interessantes Board - hat 16 LEDs in verschiedenen Farben, zwei Taster. Die LED´s werden über eine serielles 16Bit register welches auch als LED Treiber verwendet werden kann angesteuert (MIB5026CD).

Die Schaltung ist recht einfach da sie praktisch nur aus dem 5026CD besteht ..



Hab ein kleines Test Programm geschrieben. Das Timinig ist recht simple .. die Daten werden über den CLK rein geschoben am Schluss geht LE high und schiebt die Daten auf die Ausgänge. ( MIB5026CD Datenblatt )


 /*  
  ACP Display  
  LED treiber chip MIB5026CD -> 16 Ausgänge  
  pin 1 = LE  
  pin 2 = SW2  
  pin 3 = SW3  
  pin 4 = CLK  
  pin 5 = SDI  
  pin 6 = +5V  
  pin 7 = GND  
  pin 8 = <leer>  
  */  
 const int analogInPin = A0;   
 const int le_pin = 7;  
 const int clk_pin = 6;  
 const int sdi_pin = 5;  
 int speed = 50;  
 // the setup routine runs once when you press reset:  
 void setup() {          
  // init Serial port  
  Serial.begin(9600);  
  // initialize the digital pin as an output.  
  pinMode(le_pin, OUTPUT);  
  pinMode(clk_pin, OUTPUT);  
  pinMode(sdi_pin, OUTPUT);  
 }  
 void flashdisplay()  
 {  
  write2display(0x0);  
  for(int i=0; i < 5; i++)  
  {  
   write2display(0xffff);  
   delay(400);  
   write2display(0x0);  
   delay(600);  
  }  
 }   
 void write2display (int value)  
 {  
  int i = 0;  
  long m = 32768;  
  int d = 3;  
  while(i < 16)  
  {  
   digitalWrite(sdi_pin, LOW);  
   if(value & m)  
    digitalWrite(sdi_pin, HIGH);  
   delayMicroseconds(d);  
   digitalWrite(clk_pin, HIGH);  
   delayMicroseconds(d);  
   digitalWrite(sdi_pin, LOW);  
   delayMicroseconds(d);  
   digitalWrite(clk_pin, LOW);  
   m >>= 1;  
   i++;  
  }  
  delayMicroseconds(d);  
  digitalWrite(le_pin, HIGH);  
  delayMicroseconds(2*d);  
  digitalWrite(le_pin, LOW);  
 }  
 // the loop routine runs over and over again forever:  
 void loop()  
 {  
  flashdisplay();  
  int counter = 0;  
  while (counter < 65535)  
  {  
   speed = analogRead(analogInPin) + 1;  
   delay(2);  
   write2display(counter);  
   counter++;  
   delay(speed);  
  }  
 }  


Zählt einfach durch die Geschwindigkeit wird über einen Schieberegler definiert ... Bin noch am überlegen was man mit dem Teil machen kann .. aber zB ein Würfelspiel könnte man machen mit den 6 LEDs in der Mitte.

Muss mal schauen ob ich noch so ein paar alte USVen finde ...

Bin im Moment voll auf der Suche nach recycle-baren Dingen. Hab zuletzt einige 16x2 Displays gefunden .. mal sehen was man da machen kann.