Arduino control 74LS379 (DDU-1 Game Plan Pinball Display) need help.

Hey all,

I am trying to drive an old DDU-1 Game Plan Board using an arduino.

This board has two 74LS379 chips that each load a 74LS48 chip to drive a 7-segment display. There are 7 Digits connected to each 379 circuit (See: Attachment IMG_1620.jpg). Currently I have the following code:

const int DIGIT_PINS[] = {A6, A0, A1, A2, A3, A4, A5};                                                                            
const int CLOCK_PINS[] = {5, 11};
const int BCD_PINS[] = {6, 7, 8, 9};

void setup() {
  Serial.begin(115200);
  // put your setup code here, to run once:
  for (int pin = 0; pin < 7; pin++) {
    pinMode(DIGIT_PINS[pin], OUTPUT);
    digitalWrite(DIGIT_PINS[pin], LOW);
  }

  for (int pin = 1; pin < 14; pin++) {
    pinMode(pin, OUTPUT);
    digitalWrite(pin, LOW);
  }
  digitalWrite(CLOCK_PINS[0], LOW);
  digitalWrite(CLOCK_PINS[1], LOW);
  digitalWrite(4, LOW);
}


void loop() {
  for (int pin = 0; pin < 7; pin++) {
    for(int clock_pin=0; clock_pin < 2; clock_pin++) {
        BCDSet(pin);
        delayMicroseconds(250);
        digitalWrite(CLOCK_PINS[clock_pin], LOW);
        digitalWrite(DIGIT_PINS[pin], HIGH);
        delayMicroseconds(250);
        digitalWrite(DIGIT_PINS[pin], LOW);
        digitalWrite(CLOCK_PINS[clock_pin], HIGH);
     
    }
  }
}

void BCDSet(byte number)
{
  for (int i=0;i<4;i++)
  {
    if (bitRead(number, i)==1)
    {
      digitalWrite(BCD_PINS[i], HIGH); 
    }
    else
    {
      digitalWrite(BCD_PINS[i], LOW); 
    }
  }
}

Which is stepping through each of the 7 digits, for each step it loads a number via the 1D-4D lines on the 74LS379 and clocks the CK port (one for each of the 74LS379 chips).

I expected this code to result in both the top display and bottom display to have 0123456 as their value. (Note the last digit is located to the side (See: Attachment IMG_1619.jpg). As you can see the top circuit is resulting in 0000000 and the bottom 0123456.

I have checked the clock pins coming into both the 74LS379 chips (See: Attachment QC000003.JPG).

I guess I am missing something obvious about how these chips work/how I can drive them from the Arduino. Hoping someone might have a pointer to get me moving forward again.

Thanks

QC000003.jpg

I figured out what was wrong. Code updated as follows

const int DIGIT_PINS[] = {A0, A1, A2, A3, A4, A5, A6};                                                                            
const int CLOCK_PINS[] = {5, 11, 10, 12};
const int BCD_PINS[] = {6, 7, 8, 9};
const int ENABLE_PIN = 4;


unsigned long startMillis;

void setup() {
  Serial.begin(115200);
  // put your setup code here, to run once:
  for (int pin = 0; pin < 7; pin++) {
    pinMode(DIGIT_PINS[pin], OUTPUT);
    digitalWrite(DIGIT_PINS[pin], LOW);
  }

  for (int pin = 1; pin < 14; pin++) {
    pinMode(pin, OUTPUT);
    digitalWrite(pin, LOW);
  }
  for(int clock_pin=0; clock_pin < 4; clock_pin++) {
    digitalWrite(CLOCK_PINS[clock_pin], LOW);
  }
  
  digitalWrite(ENABLE_PIN, LOW);
  startMillis = millis();
}


void loop() {
    for (int pin = 0; pin < 7; pin++) {
      for(int clock_pin=0; clock_pin < 4; clock_pin++) {
          delayMicroseconds(10);
          digitalWrite(CLOCK_PINS[clock_pin], LOW);
          BCDSet(pin);
          delayMicroseconds(10);
          digitalWrite(CLOCK_PINS[clock_pin], HIGH);
      }
      digitalWrite(DIGIT_PINS[pin], HIGH);
      delayMicroseconds(1000);
      digitalWrite(DIGIT_PINS[pin], LOW);
      
    }
}

void BCDSet(byte number)
{
  for (int i=0;i<4;i++)
  {
    if (bitRead(number, i)==1)
    {
      digitalWrite(BCD_PINS[i], HIGH); 
    }
    else
    {
      digitalWrite(BCD_PINS[i], LOW); 
    }
  }
}