CC-3364CH


Ik vond dit display op eBay en denk hem te gaan gebruiken voor mijn Reverse GeoCaching projec. Het heeft drie soorten displays in één.

-1-

Eerst de som: 3  x 7-segment display = 21 LEDjes || voortgangsbalk = 10 LEDjes || de ‘ster’ = 8 LEDjes || de ‘punt’ in de ster = 1 LEDje. Totaal dus 40 LEDjes. Deze zijn gerangschikt volgens een 8 bij 5 rooster.

-2-

Uit bovenstaand plaatje kun je afleiden dat er 8 POSITIEVE ANODES &  5 NEGATIEVE CATHODES zijn.

Omdat er geen datasheet (‘handleiding’) is, moet je zelf uitzoeken bij welke combinatie van A en C welk LEDje gaat branden. Dit kun je doen door de 5 volt van de arduino op een A-pin te zetten en de GND op een C-pin.

Maar eerst uitrekenen welke weerstand we nodig hebben.

-3-

Er staat 1.7 Volt. De maximale hoeveel milliampère bij CONTINU branden ontbreekt. Zo ook de PIEK, want omdat de LEDjes in een 5 bij 8 rooster liggen, zul je snel achter elkaar van anodes, (òf de cathode) moeten switchen. Dan wordt het een DUTY-cycle van 1/8 (of 1/5).

Een LED zit meestal tussen de 5 en de 20 milliampère. Hieronder een grafiek die de benodigde weerstand (Y-as) bij verschillende milliampèrages (X-as) aangeeft.

-4-

Dat is theorie. Bij dit display heb ik met een 330 ohm weerstand met mijn multimeter de verschillende ampèrages gemeten. De HELDERHEID van de LEDjes neem boven de 14-20 mA niet meer duidelijk toe. Om aan de veilige kant te blijven, ga ik voor 16 milliampere als maximale stroom.

Het benodigde weerstandje wordt dan eentje van 206 Ohm want:    0,016 A * 206 Ohm = 3,3 Volt. En 3,3 V over de weerstand + 1,7 Volt over LED = 5 Volt.

-5-

Omdat we maar 1 van de 5 kathodes (MIN) tegelijk kunnen bedienen, hebben we maar 1/5 de van de tijd om de energie voor de maximale helderheid door het LEDje te laten gaan. Dit doen we door de weerstand  door 5 te delen. 206 / 5 = 51 Ohm. De PIEK-stroom wordt dan ook 5 keer zo hoog: 16 mA = 80 mA, alleen over een kortere duur.

-6-

Wanneer we per Kathode ALLE LEDjes aan hebben staan, geeft dat een piekstroom vanuit de arduino van 8*80 mA = 640 mA. En dat is OEPS! Volgens de datasheet van de ATmega328p chip, kan er maar 200 mA max doorheen en 40 mA per IO-pin.

-7-

Door een TRANSISTOR te gebruiken, kunnen we met een klein beetje “Arduino-stroom” een grotere “externe-stroom” op de LEDjes zetten. Zo ongeveer:

 -8-

Er moeten dus 8 plus 5 = 13 transistors aangestuurd worden. Dan heb je meteen je hele arduino vol met draden zitten. Beter is het een SHIFT REGISTOR te gebruiken. Met zo’n IC kun je met drie lijnen (lees arduino-pinnetjes) 8 OUTPUT lijnen maken. Als je 2 van deze IC’s achter elkaarzet, heb je met 3 arduino-pinnetjes, 16 outputlijnen. We hebben er maar 13 nodig, zodat ik er 16-13 = 3 overhoud. Ik denk dat ik deze ga gebruiken om een RGB-LEDje aan te sturen. Hierover later meer.

De drie lijnen van de 74HC595 shift register, bestaan uit een

1. clock: die het tempo aangeeft

2. Datalijn: die bepaalt of er een 1 of een 0 de IC ingaat.

3. de hendel: de zgn. latch bepaald wanneer de data in de IC op de 8 OUTPUT lijnen worden gezet.

WERKING: je klokt acht keer een 1 of een nul in en haalt dan de hendel over. Bij twee shiftregisters doe je dit 16 keer, voor je de hendel overhaalt.

Er zijn ook shiftregisters zonder latch. Dan zie je aan de outputkant van de IC steeds de volgde BIT ingklokt worden. Alles scrolt als het ware langs. Bij dit display wil je eerst alle informatie klaarzetten en dan pas tonen.

 

OPMERKING: was plots stuk van deze tutorial kwijt. Daarom nu lekker afgeraffeld. Hier een excel sheet waarin ik de codes voor de shiftregisters maak voor 0-9 & A-Z & sterretje en voortgangsbalk.: Excel sheet (cc-3364CH)

SKETCH ARDUINO: cc_3364CH zip

 

int dataPin  = 6;  // HC595
 int latchPin  = 7; // HC595
 int clockPin  = 8; // HC595
int Cath[] = {128, 64, 32, 16, 8};
 int ascii[] = {252, 96, 218, 242, 102, 182, 190, 224, 254, 246, 2, 238, 62, 156, 122, 158, 142, 188, 110, 12, 112, 174, 28, 236, 236, 58, 206, 230, 140, 182, 30, 124, 124, 124, 110, 102, 218};
 int ster[] = {8, 16, 1, 32, 2, 64, 4, 128};
 int bar[] = {128, 64, 32, 16, 8, 4, 2, 1, 0, 0};
int Cathode[5];
 int maxVertraging = 96;
void setup(){
 pinMode(dataPin, OUTPUT);
 pinMode(latchPin, OUTPUT);
 pinMode(clockPin, OUTPUT);
}
void loop(){
 for (int c1 =0; c1<37; c1++){
 for (int c2 =0; c2<37; c2++){
 for (int c3 =0; c3<37; c3++){
 for (int lijn = 0; lijn < 10; lijn++){
 for (int rond = 0; rond < 8; rond++){
 maakDisplay(c1,c2,c3,rond,lijn);
 for (int vertraging = 0; vertraging < maxVertraging; vertraging++){
 for (int i =0; i < 5; i++){
 shiftIt(Cathode[i], Cath[i]);
 }
 }
 }
 }
 }
 }
 }
 }
void shiftIt (byte byte_1, byte byte_2){
 byte b[] = {byte_1, byte_2};
 digitalWrite(latchPin, HIGH);
 for (int byte_0to2 = 0; byte_0to2 < 2; byte_0to2++){
 for (int k=0; k < 8; k++){
 digitalWrite(clockPin, LOW);
 if ( b[byte_0to2] & (1 << k) ){
 digitalWrite(dataPin, HIGH);
 }
 else{
 digitalWrite(dataPin, LOW);
 }
 digitalWrite(clockPin, HIGH);
 }
 }
 digitalWrite(latchPin, LOW);
 }
void maakDisplay(byte getal1, byte getal2, byte getal3, byte sterretje, byte barretje){
Cathode[0] = ascii[getal1];
 Cathode[1] = ascii[getal2];
 Cathode[2] = ascii[getal3];
 Cathode[3] = bar[barretje];
 Cathode[4] = ster[sterretje];
/*   het negende en tiende streepje
 zitten op een 'onlogische' plek.
 Daarom separaat toevoegen indien nodig. */
if (barretje == 8){
 Cathode[0] = Cathode[0] | 1;
 }
if (barretje == 9){// het negende en tiende streepje zitten op een onlogische plek.Daarom separaat toevoegen indien nodig
 Cathode[1] = Cathode[1] | 1;
 }
}

                                                            
                        

2 Responses to CC-3364CH

  1. Rene says:

    Toch verbazingwekkend dat je hier op komt en zulke geinige displays weet te benutten.
    Dan ook nog even zo documenteren… Zit dr bij jou nou een draadje los of juiste extra vast? :D

    • Paul says:

      Het gaat er mij om, dat je, wat je ook voor LED-display tegenkomt, het kan op deze manier aangestuurd worden. Zo’n display is een soort Sudoku. Je weet dat het kan, maar dan hoe….

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>