Pages: [1]   Go Down
Author Topic: Problems with STLED316S  (Read 813 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 28
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I started a project last year with the STLED316S ... and then moved, etc, etc, and didn't pick it back up again until now.  Everything was already soldered up and I just needed to work on the software.  But I can't get it to work.  I'm not sure if it's hardware or software related, but the hardware seems okay (I know the board itself is working, but perhaps there are problems with my LCD board that has the STLED316S and the HDSP-B04E four-digit seven-segment display on it).

Does this code look like it will work?

For reference, here is the datasheet for the STLED316S: http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00181714.pdf

And, this post has my schematic for the LCD board: http://arduino.cc/forum/index.php/topic,72849.15.html

Quote
const byte LED_PIN = 6;
const byte DOUT_PIN = 2;
const byte CLK_PIN  = 3;
const byte STB_PIN  = 4;

const byte NUM_DIGITS = 4;

const byte STB_LOW_DELAY    = 0;
const byte DOUT_WRITE_DELAY = 0;

boolean ledState = false;
boolean configured = false;

void setup() {
  //Serial.begin(57600);
  pinMode(LED_PIN, OUTPUT);
  pinMode(DOUT_PIN, OUTPUT);
  pinMode(CLK_PIN, OUTPUT);
  pinMode(STB_PIN, OUTPUT);
  //Serial.println("setup complete");
}

void loop() {
  ledState = (ledState ? 0 : 1);
  digitalWrite(LED_PIN, ledState);

  if (!configured) {
    // CONFIGURATION
    startCommand();
    sendNum(B00010000); // command: 0 = unused, 0 = write, 0 = auto-inc, page: 10, addr: 000 (7-segment configuration address)
    byte digits = (NUM_DIGITS - 1) & 0x03; // see datasheet - 000 = one, 001 = two, 010 = three, 011 = four, 100 = five, 101 = six
    byte config = B11111000; // 111 = brightest (14/16), 11 = constant brightness, 000 = number of digits
    sendNum(config | digits); // combine the config and digits into one byte
    nextCommand();
    
    // TURN IT ON
    sendNum(B00001101); // command: display on
    nextCommand();
    
    // SEND NUMBERS
    sendNum(B00000000); // command: 0 = unused, 0 = write, 0 = auto-inc, page: 00, addr: 000 (start of seven segment display)
    for (byte i = 0; i < NUM_DIGITS; i++) {
      sendNum(B00010000);
    }
    endCommand();

    configured = true;
  }
  delay(500);
}

void startCommand() {
  digitalWrite(CLK_PIN, LOW);
  digitalWrite(STB_PIN, LOW);
  delay(STB_LOW_DELAY);
}

void endCommand() {
  digitalWrite(STB_PIN, HIGH);
}

void nextCommand() {
  endCommand();
  startCommand();
}

void sendNum(byte num) {
  //Serial.println(((int) num));

  for (byte i = 0; i < 8; i++) {
    digitalWrite(CLK_PIN, LOW);
    byte d = num & (0x1 << i);
    //Serial.print("  "); //Serial.println((d ? "1" : "0"));
    digitalWrite(DOUT_PIN, d);
    delay(DOUT_WRITE_DELAY);
    digitalWrite(CLK_PIN, HIGH);
    delay(DOUT_WRITE_DELAY);
  }
  
}


Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 28
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I should probably also note that I've tried testing the board with my multimeter (I don't have anything more advanced) and got some weird readings.  However, the readings don't seem to change based on my software - they are the same even when I just apply power to the board.  The weird thing is that reading from the display's segment (cathode) pins to the display's digit (anode) pins gives me around 2.12 volts.  Unless I'm just really confused because I've been banging my head on this all day, that seems like it should be the opposite (power on the anode, ground on the cathode).
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 28
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Anyone?
Logged

Pages: [1]   Go Up
Jump to: