Arduino am Charlieplexing-Display
Eigentlich
wollte ich nur einen gebrauchten Akku aus einer alten E-Zigarette
ausbauen. aber dann fand ich darin ein besonderes Charlieplexing-Display mit nur sechs
Anschlüssen. Es wurde für die Ladekontrolle einegsetzt. Aber für eine
Zigarette ist es viel zu schade. Deshalb habe ich es ausgebaut und auf
einen Arduono Nano gelötet.
Mit 6
Anschlüssen kann man im Charlieplexing bis zu 30 LEDs ansteuern. Dieses Display
hat etwas weniger. Mit Batterie,Vorwiderstand und zwei Messspitzen konnte ich
rausbekommen, wie die Segmente angeschlossen sind. Das Beispielprogramm enthält
alle Segmente mit den Anoden im Array dd und den Kathoden im Array ee. Die
jeweils ersten 16 Positionen betreffen die beiden Siebensegmentziffern. Der
Rest steht für die weißen Symbole und die farbigen Balken. Im Arduino muss
man für alle sechs Ports jeweils die Datenrichtung (DDRD) und den Portzustand
(PORDD) einschalten. das geschieht in einem Timer-Interrupt mit 4 kHz.
//Charlieplexing-Display am Pin 2...7
int d,e,n,i,z,c,w,s;
int dd[]={64,32,16,16,8,8,8,0,128,64,128,32,128,16,8,0 ,0,16,32,64,128,48,112,240,0,8,16,32,64,128,248,0,0,32,64,96};
int ee[]={32,64,32,64,64,32,16,0,64,128,32,128,16,128,128,0,8,8,8,8,8,8,8,8,0,4,4,4,4,4,4,0,0,16,16,16};
int seg[]={0xfc,0x60,0xda, 0xf2,0x66,0xb6,0xbe,0xe4,0xfe,0xf6};
void setup() {
cli();
TCCR1A = 0;
TCCR1B = 0;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS11);
TCNT1 = 0;
OCR1A = 499;// 4000 Hz
TIMSK1 |= (1 << OCIE1A);
sei();//allow interrupts
}
ISR(TIMER1_COMPA_vect) {//Interrupt 4kHz
if(n>35){n=0;}
DDRD=0; PORTD==0;
if(n<8 && seg[z]&(128>>n)){
DDRD=(dd[n]+ee[n]) & 254;
PORTD=ee[n];
}
if(n>7 && n<16 && seg[e]&(128>>(n-8))){
DDRD=(dd[n]+ee[n]) & 254;
PORTD=ee[n];
}
if(n>15 && n<24){
DDRD=(dd[c+16]+ee[c+16]) & 254;
PORTD=ee[c+16];
}
if(n>23 && n<30){
DDRD=(dd[w+24]+ee[w+24]) & 254;
PORTD=ee[w+24];
}
if(n>31 && n<35){
DDRD=(dd[s+32]+ee[s+32]) & 254;
PORTD=ee[s+32];
}
n++;
}
void loop(){
for (z=0;z<10;z++){ //Zehner
for (e=0;e<10;e++){ //Einer
c=e/2+1; //Colour
if (c>1) {c+=3;}
for(w=7;w>0;w--){ //White
delay(100);}
s=e/2;
//Symbole
}
}
}
Die
Software steuert das Display in der Haupt-Loop. Zehner, Einer, Farbbalken, weiße
Umrandung und weiße Symbole werden jeweils durch eigene Variablen gesteuert.
Im
Internet konnte ich nichts zu diesem Display finden, kein Datenblatt, keinen
Hersteller, nichts. Ich verdanke es meinem Bruder, der achtlos weggeworfene
E-Zigaretten im Interesse des Umweltschutzes und der Bastelfreude aufsammelt.