Pages: [1]   Go Down
Author Topic: Display 7 segmentos de 4 digitos  (Read 7518 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 1
Posts: 105
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buenas, tengo este display http://www.ledtoplight.net/File/TOP-5461AS.PDF

Lo tengo conectado con ejemplos que encuentro por la web pero todos ellos son para displays separados (por lo menos los que yo encuentro).

Teneis algun ejemplo para que pueda aprender como funciona ya que todos los ejemplos son para displays separados o con 16 pines en lugar de 12 y no funcionan bien y el display me muestra solo el primer caracter, no consigo que muestre mas de un caracter.


En teoria este display esta echo para que con un solo 74hc595 funcione, no?


Basicamente quiero aprender a escrivir ciertas cosas cuando encianda un rele  (On, OFF, HOLA...).


Gracias por la ayuda que me podais prestar smiley
Logged

0
Offline Offline
Full Member
***
Karma: 1
Posts: 105
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Encontre este que me funciona, simplemente cuenta de 0 a 9 y vuelve a empezar.

Lo malo es que todos los digitos hacen lo mismo y me gustaria saber como decirle que debe mostrar en cada digito independientemente.

Sabeis como seria?

(la fuente es http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1247631566/all )
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 11;

//holders for infromation you're going to pass to shifting function
byte data;
byte dataArray[10];

void setup() {
  //set pins to output because they are addressed in the main loop
  pinMode(latchPin, OUTPUT);
  Serial.begin(9600);

  //Arduino doesn't seem to have a way to write binary straight into the code
  //so these values are in HEX.  Decimal would have been fine, too.
  dataArray[0] = 0x3F; // 0
  dataArray[1] = 0x06; // 1
  dataArray[2] = 0x5B; // 2
  dataArray[3] = 0x4F; // 3
  dataArray[4] = 0x66; // 4
  dataArray[5] = 0x6D; // 5
  dataArray[6] = 0x7C; // 6
  dataArray[7] = 0x07; // 7
  dataArray[8] = 0x7F; // 8
  dataArray[9] = 0x67; // 9


  //function that blinks all the LEDs
  //gets passed the number of blinks and the pause time
  blinkAll(2,500);
}

void loop() {


  for (int j = 0; j < 10; j++) {
    //load the light sequence you want from array
    data = dataArray[j];
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //move 'em out
    shiftOut(dataPin, clockPin, data);  
    //return the latch pin high to signal chip that it
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    delay(1000);
  }
}



// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
  // This shifts 8 bits out MSB first,
  //on the rising edge of the clock,
  //clock idles low

  //internal function setup
  int i=0;
  int pinState;
  pinMode(myClockPin, OUTPUT);
  pinMode(myDataPin, OUTPUT);

  //clear everything out just in case to
  //prepare shift register for bit shifting
  digitalWrite(myDataPin, 0);
  digitalWrite(myClockPin, 0);

  //for each bit in the byte myDataOut[ch65533]
  //NOTICE THAT WE ARE COUNTING DOWN in our for loop
  //This means that %00000001 or "1" will go through such
  //that it will be pin Q0 that lights.
  for (i=7; i>=0; i--)  {
    digitalWrite(myClockPin, 0);

    //if the value passed to myDataOut and a bitmask result
    // true then... so if we are at i=6 and our value is
    // %11010100 it would the code compares it to %01000000
    // and proceeds to set pinState to 1.
    if ( myDataOut & (1<<i) ) {
      pinState= 1;
    }
    else {
      pinState= 0;
    }

    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin  
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
  }

  //stop shifting
  digitalWrite(myClockPin, 0);
}


//blinks the whole register based on the number of times you want to
//blink "n" and the pause between them "d"
//starts with a moment of darkness to make sure the first blink
//has its full visual effect.
void blinkAll(int n, int d) {
  digitalWrite(latchPin, 0);
  shiftOut(dataPin, clockPin, 0);
  digitalWrite(latchPin, 1);
  delay(200);
  for (int x = 0; x < n; x++) {
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 255);
    digitalWrite(latchPin, 1);
    delay(d);
    digitalWrite(latchPin, 0);
    shiftOut(dataPin, clockPin, 0);
    digitalWrite(latchPin, 1);
    delay(d);
  }
}
 

« Last Edit: January 21, 2011, 01:54:47 pm by comeollas » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 64
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, creo que necesitarías 2 74HC595  uno para seleccionar los dígitos y otro para el número en si, o bien 1 74HC595 y 4 salidas del arduino para escoger el dígito (no se si me he explicado)

Quizás este enlace te sirva (lo siento está en inglés) sobre todo la segunda página

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1265669651

Saludos.
Logged

0
Offline Offline
Full Member
***
Karma: 1
Posts: 105
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perfectamente te has explicado smiley

Mi duda es cual seria el shift out para escrivir por ejemplo Hola todo el mundo hace reloges y cosas asi, si no entiendo ni como poner hola o 1234 no puedo ir a por esos ejemplos.

Logged

Pages: [1]   Go Up
Jump to: