SL9946T

SL-9946T (SL9946T) LED 3 1/2 – DIGIT DISPLAY, 2 7/8″ x .75″

Ik zocht een TIL 304. Dit display was de enige die in de ‘vroege TIL’ serie miste. Ik vond hem bij een Amerikaan. En dan zit je meteen tegen verzendkosten en als je pech hebt, invoer belasting. Het loont dan even bij de betreffende verkoper in de winkel te kijken, of er niet iets “bij het doosje in kan”. Zo kom in op deze dubieuze aanschaf van een wekker display. De foto bij de verkoper was onduidelijk. Kon niet goed zien wat er allemaal op het zwarte vlak stond. Zoiets maakt me nieuwsgierig.

Ik heb geen datasheet. Denk dat dit een custom made display is. Daarom zelf maar mijn multi-meter, mijn bench-power-source en een weerstand van 466 Ohm gepakt. Bij 4,83 Volt mat ik 6,30 mA over ieder LEDje. Als ik ervan uitga, dat de weerstand over het LED lampje te verwaarlozen is, krijg je de volgende berekening:

Vtotaal = 4,83 V = Vled + Vweerstand

Vweerstand = I * R  =  6,30 mA * 466 Ohm = 2936 mV

Vled = Vtotaal – Vweerstand = 4830 – 2936 mV = 1894 mV = 1,9 Volt

Ik weet niet hoe de LEDs belast kunnen worden. Ik ga ervan uit dat 10 mA afdoende moet zijn. Dat levert deze som op wanneer er 5 Volt van de arduino op staat:

5 volt totaal = 1,9 Volt LED + 3,1 Volt over de weerstand.

Voor 10 mA heb je een weerstand van 3100 mV / 10 mA = 310 Ohm.

Ik sloot een 330 ohm weerstand aan en oordeelde dat het genoeg licht was. Meer spanning deed hem niet duidelijk feller branden.

Vervolgens was het uitzoeken waar de pinnetjes voor dienen.

Met 2 x een gekoppelde 74HC595N shift register en  5 x een NPN transistor, kreeg ik met drie arduino-pinnetjes, controle over alle 33 LEDjes. (Daarbij krijg ik op de shift registers nog (2 x 8) – (5 anodes + 7 kathodes) = 16 – 12 = 4 output pinnetjes terug.)

Omdat ik geen zin had een RTC aan te sluiten, gebruikte ik een voorbeeld-sketch, die ik eens bij een topic op het arduinoforum.nl heb gemaakt.

Deze sketch geeft een seriele output op de seriele monitor van je computer. Maar om het op het display te krijgen is een andere zaak.

Omdat ik het display moet multplexen, krijg je een duty cycle van van 20%. Alle cathodes worden immers na elkaar aan en uit gezet. Hierdoor moet de piekstroom omhoog, om voldoende helderheid te houden. Grofweg moet de weerstand vermenigvuldigd worden met de duty cycle. Dus 20 % aan, betekend geen weerstand van 310 ohm, maar van 62. Uiteindelijk eindigde ik met 7 weerstandjes van 39 ohm en krijg ik een juist goede helderheid bij 5,85 Volt. Ik meet tot 8 mA over een kathode. Helemaal precies is het niet. Maar als je terug rekent krijg je dit:

  • 40 Ohm
  • 5,9 Vtotaal
  • 1,9 V led
  • 8 mA

Zonder multiplexen zou het (5,9 – 1,9) : 40 = 0,1 A  opleveren.

We “krijgen” echter geen 100 mA, maar 7,9. Het zijn 5 Kathodes, dus 100 : 5 = 25 mA is wat je verwachten zou. Door de “overhead” van de microcontroller (laden van de schift register etc) is het display niet altijd aan. 25 vs. 8 mA. Dus ongeveer 2/3 efficientie verlies op “vol vermogen” / “maximale duplex snelheid”. Ik moet hier nog maar eens beter naar kijken…

De hele display inclusief arduino UNO trekt 90 mA totaal. Dan branden 17 van de 33 LEDjes. De Arduino trekt zelf 40+. Dus 17 ledjes zijn 50 mA. Da’s 3 mA per ledje. Lang leve POV. De zuinigheid zit in onze ogen!! Gratis nagloeien.

Zo werd de proef opstelling:

 ▬

Hieronder mijn aangepaste klok-arduino-sketch-zonder-RTC-maar-met-display-sketch.

// arduino klok SL-9946T, SL9946T, LED, 3-DIGIT DISPLAY
int latchPin = 6;
int clockPin = 7;
int dataPin = 5;

byte cijfers[] = {
  192, 249, 164, 176, 153, 146, 130, 248, 128, 144, 255, 231, 255-32-64,231-32-64, 255-8, 255-2  };

byte dig[] = {
  255,231,192,192,176,255,176};

byte anz=0;// een van de 5 cathodes

volatile unsigned long seconden = 0;
unsigned long seconden_oud = 0;

int seco;
int minu;
int uren;

boolean star = 0;
boolean leng = 0;
boolean chan = 0;
boolean scnd = 0;

ISR(TIMER1_OVF_vect) {
  TCNT1=0xBDC;//45536;
  seconden = seconden+1;
}

void setup() {
  Serial.begin(9600);

  TIMSK1=0x01; // enabled global and timer overflow interrupt;
  TCCR1A = 0x00; // normal operation page 148 (mode0);
  TCNT1=0xBDC;//45536; // set initial value to remove time error (16bit counter register)
  TCCR1B = 0x04; // start timer/ set clock

  zetTijd();

  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
};

void loop () {
  draw();
  if (seconden_oud != seconden){
    seconden_oud = seconden;
    seco++;
    if (seco == 60){
      seco = 0;
      minu++;
      if (minu == 60){
        minu = 0;
        uren++;
        if (uren == 24){
          uren = 0;
        }
      }
    }
    dig[0] = cijfers[14+uren/12];  
    dig[0] = dig[0] - 64*star;
    dig[0] = dig[0] - 32*leng;
    dig[0] = dig[0] - 16*chan;
    dig[0] = dig[0] - 4*scnd;
    dig[1] = cijfers[10+2*(seco%2)+(uren%12)/10];  // verande /30 in %2 wanneer tijd echte secon
    dig[2] = cijfers[(uren%12)%10];  
    dig[3] = cijfers[minu/10];
    dig[4] = cijfers[minu%10];
  }
};

void zetTijd(){
  String tijd = __TIME__;
  uren = (tijd.charAt(0)-48)*10+tijd.charAt(1)-48;
  minu = (tijd.charAt(3)-48)*10+tijd.charAt(4)-48;
  seco = (tijd.charAt(6)-48)*10+tijd.charAt(7)-48;
}

void draw(){
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, 2<5) anz=0;
}
mismaakt door wordpress. mail me als je sketch wil.

 

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>