Go Down

Topic: Problems with 4794's in series!! (Read 520 times) previous topic - next topic

markisgod

I'm using an arduino to power two 4794 LED drivers, so I can display digits on my two 7 segment LEDs. Unfortunately, it isn't working properly.

I can display any number, 00-99, but everytime a 1, 4, or 9 shows up on the display on the right a segment is lit up that shouldn't be.

I've checked everything and it seems to be fine. What's wrong!!?

Here's the datasheet for the 4794s:
http://www.nxp.com/acrobat_download/datasheets/HEF4794B_3.pdf

And here's my code:
Code: [Select]
int data = 9;
int strob = 8;
int clock = 10;
int oe = 11;
int count = 0;
long dato = 0;

int velocity = 00;
long binaryLED = 0;

void setup()
{
 pinMode(data, OUTPUT);
 pinMode(clock, OUTPUT);
 pinMode(strob, OUTPUT);
 pinMode(oe, OUTPUT);
}

void loop()
{
 convert(velocity);
 segmentWrite();
 velocity++;
 if(velocity==100){velocity=0;}
}

void segmentWrite(){
  dato = binaryLED;
  for (count = 0; count < 16; count++) {
   digitalWrite(data, dato & 01);
   dato>>=1;
   if (count == 15){
   digitalWrite(oe, LOW);
   digitalWrite(strob, HIGH);

   }
   PulseClock();
    digitalWrite(oe, HIGH);
}

 delayMicroseconds(20);
 digitalWrite(strob, LOW);
 delay(100);


 serialWrite(10);
 serialWrite(13);
delay(100);                  // waits for a moment
}

void PulseClock(void) {
   digitalWrite(clock, LOW);
   delayMicroseconds(20);
   digitalWrite(clock, HIGH);
   delayMicroseconds(50);
   digitalWrite(clock, LOW);
}

int convert(int number){
    int i = 0;
    int numberl = 0;
    int numberr = 0;

    while(10*i<=number){
      i++;
    }
    numberl = i - 1;
    numberr = number - (10 * numberl);
    binaryLED = 0;
   
    if(numberl==0){
      binaryLED = 32256;
    }else if(numberl==1){
      binaryLED = 4608;
    }else if(numberl==2){
      binaryLED = 48128;
    }else if(numberl==3){
      binaryLED = 46592;
    }else if(numberl==4){
      binaryLED = 53760;
    }else if(numberl==5){
      binaryLED = 58880;
    }else if(numberl==6){
      binaryLED = 60928;
    }else if(numberl==7){
      binaryLED = 12800;
    }else if(numberl==8){
      binaryLED = 65024;
    }else if(numberl==9){
      binaryLED = 61952;
    }
   
    if(numberr==0){
      binaryLED = binaryLED + 126;
    }else if(numberr==1){
      binaryLED = binaryLED + 18;
    }else if(numberr==2){
      binaryLED = binaryLED + 188;
    }else if(numberr==3){
      binaryLED = binaryLED + 182;
    }else if(numberr==4){
      binaryLED = binaryLED + 210;
    }else if(numberr==5){
      binaryLED = binaryLED + 230;
    }else if(numberr==6){
      binaryLED = binaryLED + 238;
    }else if(numberr==7){
      binaryLED = binaryLED + 50;
    }else if(numberr==8){
      binaryLED = binaryLED + 254;
    }else if(numberr==9){
      binaryLED = binaryLED + 242;
    }
   
}


Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy