collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Display de segmentos 4 e 2 Digitos  (Lida 8580 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Display de segmentos 4 e 2 Digitos
« em: 24 de Fevereiro de 2011, 11:57 »
Olá!

Há uns tempos fiz um display de temperatura com 2 displays de segmentos e usei para isso a informação do Ricardo Dias: http://ricardo-dias.com/pt-pt/node/103 e funcionou na perfeição.

Neste momento achei piada a uns Displays de segmentos e comprei, mas não sei se vou conseguir usar o mesmo código.

Os displays são estes:

Dual Digit Numeric Display (Common Cathode)


e

Four Digit Numeric Display (Common Cathode)



No de 4 digitos, os 8 pinos estão partilhados entre os 4 digitos, como fazer para acender o 2º em vez do 1º por exemplo? basta usar um único 74HC595 ? ou não posso fazer desta forma..?

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.531
Re: Display de segmentos 4 e 2 Digitos
« Responder #1 em: 24 de Fevereiro de 2011, 12:04 »
Não consigo ver as imagens...

Mas neste caso, com 4 pins no display consegues ter 16 combinações, ou seja, cada pin não corresponde a um segmento do display mas cada combinação desses 4 pins corresponde a um numero... (claro que acima do 9 não vem o 10, mas sim uma letra normalmente)
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.531
Re: Display de segmentos 4 e 2 Digitos
« Responder #2 em: 24 de Fevereiro de 2011, 12:08 »
Ah... agora já vejo as imagens! :P

Tinha percebido que tinhas dito 4 pins.. mas disseste 4 displays!

Então neste caso tens na mesma os 8 pins, mas ligados entre os displays.. ou seja: por exemplo, os 4 segmentos A dos displays estão "shuntados"

Para podermos colocar numeros diferentes em cada um tens da fazer varrimento pelos 4... ou seja, acendes um display (colocas o cátodo desse display à massa e os restantes a Vcc) e metes lá o numero que queres, depois acendes o outro (cátodo deste à massa e os outros todos a Vcc), e por aí fora. Tens de fazer este varrimento rápido, de modo que não se perceba que os displays tão sempre a acender e a apagar... normalmente podes usar uma freq de 50Hz que já fica bem..
Podes também baixar o valor da resistência a colocar em cada pin de cada segmento, pois como vai estar menos tempo ligado, precisa de mais corrente, senão podes não ver nada...

Fiz-me entender?
« Última modificação: 24 de Fevereiro de 2011, 12:10 por beirao »
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #3 em: 24 de Fevereiro de 2011, 12:14 »
Tou a perceber a ideia.. então mas a nível de ligações tenho de usar 1 só 74HC595 ? a minha confusão é como fazer acender 1 displays e apagar os outros..

P.S.: ah não tinha lido o resto do teu post.. vou ler

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.531
Re: Display de segmentos 4 e 2 Digitos
« Responder #4 em: 24 de Fevereiro de 2011, 12:22 »
Sim, utilizas só um 74hc595

Imagina que queres meter la o numero 1234 nos quatros displays

ligas o catodo do display1 a GND, e utilizas o 74hc595 como utilizavas dantes e colocas la o numero 1
Depois, colocas o cátodo do display1 a Vcc e o cátodo do display2 a GND, e utilizas o 74hc595 para enviar o numero 2.. e por aí fora
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #5 em: 24 de Fevereiro de 2011, 12:24 »
Sim, utilizas só um 74hc595

Imagina que queres meter la o numero 1234 nos quatros displays

ligas o catodo do display1 a GND, e utilizas o 74hc595 como utilizavas dantes e colocas la o numero 1
Depois, colocas o cátodo do display1 a Vcc e o cátodo do display2 a GND, e utilizas o 74hc595 para enviar o numero 2.. e por aí fora

Já se está a fazer luz, apenas uma coisa.. ao fazer isto:

"ligas o catodo do display1 a GND, e utilizas o 74hc595 como utilizavas dantes e colocas la o numero 1
Depois, colocas o cátodo do display1 a Vcc e o cátodo do display2 a GND, e utilizas o 74hc595 para enviar o numero 2.. e por aí fora
"

Ao colocar o cátodo no display 2 desligo o cátodo do display 1 certo? o número que tinha enviado não é apagado?


Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #6 em: 24 de Fevereiro de 2011, 12:25 »
Esquece!
 Percebida a ideia! Logo vou testar  ;D  Obrigadão!!

P.S.: Colocar o cátodo a VCC não vai queimar nada?  :P

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Display de segmentos 4 e 2 Digitos
« Responder #7 em: 24 de Fevereiro de 2011, 12:29 »
Ao colocar o cátodo no display 2 desligo o cátodo do display 1 certo? o número que tinha enviado não é apagado?
Eu já vi que percebeste, mas fica para as pessoas que leiam mais tarde.

Quando ligas apenas 1 dos cátodos a GND, desligas os outros. Se tivesses uma câmara de muitos frames por segundo ias conseguir ver que na realidade só acende 1 dos displays de cada vez. Contudo, fazes isto tão rápido de forma a que o olho humano não consiga perceber esse "piscar".

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #8 em: 24 de Fevereiro de 2011, 12:33 »
Ao colocar o cátodo no display 2 desligo o cátodo do display 1 certo? o número que tinha enviado não é apagado?
Eu já vi que percebeste, mas fica para as pessoas que leiam mais tarde.

Quando ligas apenas 1 dos cátodos a GND, desligas os outros. Se tivesses uma câmara de muitos frames por segundo ias conseguir ver que na realidade só acende 1 dos displays de cada vez. Contudo, fazes isto tão rápido de forma a que o olho humano não consiga perceber esse "piscar".


Pois, tenho de testar! Mas para manter o display 1 com o número que lhe dei acesso tenho então de colocar o Cátodo com VCC certo? dessa forma consigo colocar os números nos restantes mantendo os anteriores acessos.. é isto?
« Última modificação: 24 de Fevereiro de 2011, 16:06 por almamater »

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.531
Re: Display de segmentos 4 e 2 Digitos
« Responder #9 em: 24 de Fevereiro de 2011, 17:05 »
Sim.

Exemplo de 4 displays:

 - Cátodo do display1 a GND e os restantes a VCC: Display1 está ligado, envias o numero que queres. Restantes displays desligados

- Cátodo do display2 a GND e os restantes a VCC: Display2 está ligado, envias o numero que queres. Restantes displays desligados

- Cátodo do display3 a GND e os restantes a VCC: Display3 está ligado, envias o numero que queres. Restantes displays desligados

- Cátodo do display4 a GND e os restantes a VCC: Display4 está ligado, envias o numero que queres. Restantes displays desligados.

Os displays vao tar a piscar, mas como é tão rápido, não vês a piscar...
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #10 em: 24 de Fevereiro de 2011, 17:47 »
Sim.

Exemplo de 4 displays:

 - Cátodo do display1 a GND e os restantes a VCC: Display1 está ligado, envias o numero que queres. Restantes displays desligados

- Cátodo do display2 a GND e os restantes a VCC: Display2 está ligado, envias o numero que queres. Restantes displays desligados

- Cátodo do display3 a GND e os restantes a VCC: Display3 está ligado, envias o numero que queres. Restantes displays desligados

- Cátodo do display4 a GND e os restantes a VCC: Display4 está ligado, envias o numero que queres. Restantes displays desligados.

Os displays vao tar a piscar, mas como é tão rápido, não vês a piscar...

Achas que dá para ligar os 4 cátodos a pinos digitais do Arduino e se estiverem em LOW o display respectivo acende em HIGH apaga. ?

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.531
Re: Display de segmentos 4 e 2 Digitos
« Responder #11 em: 24 de Fevereiro de 2011, 18:17 »
Não deve dar, pkausa da corrente.

Mas experimenta. Se não der, tens de usar um transístor. Mas não te esqueças de usar resistências nos segmentos dos displays!
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Display de segmentos 4 e 2 Digitos
« Responder #12 em: 24 de Fevereiro de 2011, 22:42 »
Pelo esquema que esta no site da Itead é simples de se ver como se liga isso, tem um ânodo comum a cada display, metes no ânodo um transístor e metes um transístor a high, metes os dados para esse mesmo display, desligas o transístor, ligas o outro, metes os dados do outro display, basta fazeres isso a mais de 20-25 vezes por segundo(super fácil para o micro-controlador) e a persistência de visão do nosso olho faz com que pareça que estão os dois displays ligados, se ligas o anodo a um pino do Arduino vais queimar só o pino se tivers muita muita sorte, se não morre o Atmega
Avr fanboy

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #13 em: 25 de Fevereiro de 2011, 09:44 »
Ok, será um esquema como este então só que em vez do LCD é o Cátodo do display respectivo:


http://img193.imageshack.us/i/bkcontrol.png/

Vou testar..
« Última modificação: 15 de Março de 2011, 10:12 por almamater »

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.920
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #14 em: 30 de Maio de 2011, 03:28 »
Ena, finalmente decidi testar isto  :P

Liguei apenas o de 2 displays sem qualquer shiftOut e directamente aos pinos do Arduino , funciona bem tirando a parte de mostrar 2 números ao mesmo tempo, neste caso 'enganar' o olho humano:

Código utilizado:

Código: [Seleccione]
// Seven-segment LED Display
// Common ANODE pins 5 and 10

//   G F + A B
//   | | | | |   -> pins and segments they control
//   ---------
//  F|   A   |B
//   |---G---|   -> segments
//  E|   D   |C
//   ---------
//   | | | | |   -> pins and segments they control
//   E D + C DP

// Segments that make each number when lit:
// 0 => ABCDEF
// 1 => BC
// 2 => ABDEG
// 3 => ABCDG
// 4 => BCFG
// 5 => ACDFG
// 6 => ACDEFG
// 7 => ABC
// 8 => ABCDEFG
// 9 => ABCDFG

// Arduino digital pins used to light up
// corresponding segments on the LED display

#define A 4
#define B 9
#define C 8
#define D 6
#define E 7
#define F 5
#define G 2

#define T1 10 //Transistor 1
#define T2 11 //Transistor 2


// Common ANODE;
// OFF when pin is high
// and ON when pin is LOW

#define ON LOW
#define OFF HIGH

int ms = 800;

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  digitalWrite(T1, LOW);
  digitalWrite(T2, LOW);
}

void loop() {
  digitalWrite(T2, LOW);
  digitalWrite(T1, HIGH);
  zero();
  one();
  two();
  three();
  four();
  five();
  six();
  seven();
  eight();
  nine();
  digitalWrite(T1, LOW);
  digitalWrite(T2, HIGH);
  zero();
  one();
  two();
  three();
  four();
  five();
  six();
  seven();
  eight();
  nine();

//Aqui é onde queria mostrar o número zero em ambos:

  digitalWrite(T2, LOW);
  digitalWrite(T1, HIGH);
  zeroSemDelay();
  digitalWrite(T1, LOW);
  digitalWrite(T2, HIGH);
  zeroSemDelay();

}

// 0 => ABCDEF
void zero() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, OFF);
  delay(ms);
}

// 1 => BC
void one() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  delay(ms);
}

// 2 => ABDEG
void two() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, OFF);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  delay(ms);
}

// 3 => ABCDG
void three() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, ON);
  delay(ms);
}

// 4 => BCFG
void four() {
  digitalWrite(A, OFF);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 5 => ACDFG
void five() {
  digitalWrite(A, ON);
  digitalWrite(B, OFF);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 6 => ACDEFG
void six() {
  digitalWrite(A, ON);
  digitalWrite(B, OFF);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 7 => ABC
void seven() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, OFF);
  digitalWrite(E, OFF);
  digitalWrite(F, OFF);
  digitalWrite(G, OFF);
  delay(ms);
}

// 8 => ABCDEFG
void eight() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}

// 9 => ABCDFG
void nine() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, OFF);
  digitalWrite(F, ON);
  digitalWrite(G, ON);
  delay(ms);
}


// 0 => ABCDEF
void zeroSemDelay() {
  digitalWrite(A, ON);
  digitalWrite(B, ON);
  digitalWrite(C, ON);
  digitalWrite(D, ON);
  digitalWrite(E, ON);
  digitalWrite(F, ON);
  digitalWrite(G, OFF);
  }


Resultado:



Não deverá ser só fazer isto pois não:

Código: [Seleccione]
  digitalWrite(T2, LOW);
  digitalWrite(T1, HIGH);
  zeroSemDelay();
  digitalWrite(T1, LOW);
  digitalWrite(T2, HIGH);
  zeroSemDelay();

 

P.S.: Já agora, os transistores que usei (BD137) podem/devem ser substituídos por outros ou estão bem assim?
« Última modificação: 31 de Maio de 2011, 01:08 por almamater »