collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


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


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


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]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


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

Autor Tópico: Display 7 segmentos  (Lida 32573 vezes)

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

Offline Dave

  • Mini Robot
  • *
  • Mensagens: 368
    • "O Engenhocas"
Display 7 segmentos
« em: 25 de Outubro de 2010, 10:55 »
Olá amigos!

Pode parecer uma pergunta um pouco "estúpida" para vocês, mas para mim não faz sentido....

Reparem no seguinte link: http://www.eletrica.info/termometro-digital-com-pic16f818-e-lm35/

Eis a pergunta: se eu tenho um PIC só com 14 pinos livres, como faço para colocar em funcionamento 3 displays de 7 segmentos?  :o
No link para resultar tudo muito bem... que tipo de ligações terá feito? Haverá algum código especial?


Estava interessado em fazer algo assim, mas feito na totalidade por mim.... tenho um PIC16f88 e 3 displays de 7 segmentos.



O meu obrigado pelo esclarecimento ;)


Cumprimentos
David Martins
Eng. Electrotécnica e de Computadores, UBI

Offline LordNelthon

  • Mini Robot
  • *
  • Mensagens: 96
  • Programming Addicted
Re: Display 7 segmentos
« Responder #1 em: 25 de Outubro de 2010, 12:14 »
Existe um circuito integrado que permite aumentar as saidas digitais do arduino (o 74HC595), mas não sei se é compativel com o PIC.
Espera por respostas de outros users.

EDIT: Parece que sim. :) vê se ajuda http://www.electronics-lab.com/projects/mcu/015/index.html.
« Última modificação: 25 de Outubro de 2010, 12:18 por n3lThon »
Simplesmente fanático por Open Source

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Display 7 segmentos
« Responder #2 em: 25 de Outubro de 2010, 17:26 »
Um 595 é um shift register, funciona com qualquer micro-controlador, até ligado a uma porta paralela de um computador funciona.
Podes tambem pesquisar por multiplexing, que é usares o anodo ou o cátodo comum como um enable para cada display e colocas um transistor, regra geral um 2n2222 serve perfeitamente e usas os 7 de cada segmento para todos os displays e depois usas mais um pino ligado através do 2n2222 ao anodo comum de cada um dos displays em separado, se procurares por 7 segment multiplexing deves encontrar muita coisa, mas com 3 74hc595 podes ligar os 3 displays e só vais precisar de usar 3 pinos do pic.
Avr fanboy

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: Display 7 segmentos
« Responder #3 em: 25 de Outubro de 2010, 19:30 »
Reparem no seguinte link: http://www.eletrica.info/termometro-digital-com-pic16f818-e-lm35/
Eis a pergunta: se eu tenho um PIC só com 14 pinos livres, como faço para colocar em funcionamento 3 displays de 7 segmentos?  :o
No link para resultar tudo muito bem... que tipo de ligações terá feito? Haverá algum código especial?
Estava interessado em fazer algo assim, mas feito na totalidade por mim.... tenho um PIC16f88 e 3 displays de 7 segmentos.

Vê lá se este LINK te ajuda ::

mostrador de 4 dígitos de 7-segmentos, com recepção de dados por porta RS232/USB


Qualquer dúvida, apita!

Offline Dave

  • Mini Robot
  • *
  • Mensagens: 368
    • "O Engenhocas"
Re: Display 7 segmentos
« Responder #4 em: 25 de Outubro de 2010, 19:40 »
Obrigado pelas rápidas respostas ;).

Eu vou estudar todas as hipóteses e tentar entender como tudo funciona... qualquer dúvida eu coloco por cá ;).


Uma vez mais o meu obrigado  ;D
David Martins
Eng. Electrotécnica e de Computadores, UBI

Offline fre_deri_co

  • Mini Robot
  • *
  • Mensagens: 510
Re: Display 7 segmentos
« Responder #5 em: 25 de Outubro de 2010, 20:57 »
não sei se ja esta esclarecido mas em todo caso deixo a minha opinião caso interesse....

CI 4026 - onde este só necessita de se ligar dois pins ao pic (incrementar e reset) permitindo ligar vários 7segment (mas cada um terá de levar um CI destes, cada um ronda os 0,6€), ao incrementar (sempre o das unidades) cada vez que recebe o décimo impulso este envia um para as dezenas, e este por sua vez ao receber o décimo impulso envia um para as centenas .... para enviar o valor basta enviar o valor pretendido em nº de impulsos de 10 micro segundos...
tenho um exemplo que eu usei dois com um picaxe 8m (pic com 8 pins) http://lusorobotica.com/index.php?topic=2653.0


CI 4511 também é uma solução que conheço mas pessoalmente nunca utilizei, onde necessita de quatro pins convertendo o valor enviado em binário para estes para o 7 segmentos...

« Última modificação: 25 de Outubro de 2010, 21:01 por fre_deri_co »
que sempre se partilhe o conhecimento para que sempre se evolua!!!
Frederico Pereira

Offline Dave

  • Mini Robot
  • *
  • Mensagens: 368
    • "O Engenhocas"
Re: Display 7 segmentos
« Responder #6 em: 29 de Outubro de 2010, 18:32 »
Amigos, estou a fazer um pequeno teste com um display de 7 segmentos, mas o programa não está a ser devidamente executado...

Citar
#include <16f88.h>
#use delay (clock=4000000)
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOMCLR, INTRC_IO
#use standard_io(A)


byte const tabela[]={
         0b10111111,
         0b10000110,
         0b11011011,
         0b11001111,
         0b11100110,
         0b11101101,
         0b11111101,
         0b10000111,
         0b11111111,
         0b11100111};

main()
{

int valor;

valor=0;

while (true)
{
   valor = valor+1;
   if (valor>9) valor = 0;
   output_b (tabela[valor]);

   delay_ms(1000);
}
}

De que poderá ser?

O display apenas apresenta o número 1 e não segue com o loop....




Agradeço.

Cumps
David Martins
Eng. Electrotécnica e de Computadores, UBI

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Display 7 segmentos
« Responder #7 em: 29 de Outubro de 2010, 18:53 »
Tens tudo bem ligado, se fizeres um simples programa para piscar um led ele pisca?
Experimenta escrever int8 ou char em vez de int, mas não me parece que venha dai algum erro.
Avr fanboy

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.649
    • Electronic Gear for Musicians
Re: Display 7 segmentos
« Responder #8 em: 29 de Outubro de 2010, 19:21 »
verifica se a função de DELAY, aceita uma variavel de entrada de 16 bits.  Algumas bibliotecas só aceitam 8-bits.

Offline Dave

  • Mini Robot
  • *
  • Mensagens: 368
    • "O Engenhocas"
Re: Display 7 segmentos
« Responder #9 em: 29 de Outubro de 2010, 20:22 »
Amigos, já fiz a dita alteração, mas o problema mantém-se....

Continuo sem ter nada no display a não ser o número 1.
David Martins
Eng. Electrotécnica e de Computadores, UBI

Offline Dave

  • Mini Robot
  • *
  • Mensagens: 368
    • "O Engenhocas"
Re: Display 7 segmentos
« Responder #10 em: 29 de Outubro de 2010, 20:42 »
Amigos, em anexo envio o ficheiro de simulação do proteus, assim como o ficheiro *.hex.

Por que razão o segmento e (RB4) nunca liga?



PS: código actual
Citar
#include <16f88.h>
#use delay (clock=4000000)
#fuses XT, NOWDT, BROWNOUT, PUT, NOMCLR, INTRC_IO

byte const tabela[]={
         0b10111111,
         0b10000110,
         0b11011011,
         0b11001111,
         0b11100110,
         0b11101101,
         0b11111101,
         0b10000111,
         0b11111111,
         0b11100111};

main()
{

int8 valor;

set_tris_a (0b11111100);

valor=0;

while (true)
{
   valor = valor+1;
   if (valor>9) valor = 0;
   output_b (tabela[valor]);
   delay_ms(1000);
}
}

cumps
« Última modificação: 29 de Outubro de 2010, 20:58 por Dave »
David Martins
Eng. Electrotécnica e de Computadores, UBI

Offline Dave

  • Mini Robot
  • *
  • Mensagens: 368
    • "O Engenhocas"
Re: Display 7 segmentos
« Responder #11 em: 29 de Outubro de 2010, 22:20 »
Amigos, o problema está na função de soma....

Executei o com o seguinte código:

Citar
while (true)
{
valor = 5;
   
   output_b (tabela[valor]);

   delay_ms(1000);
   
   valor = 6;
   
   output_b (tabela[valor]);

   delay_ms(1000);
   
   valor = 7;
   
   output_b (tabela[valor]);

   delay_ms(1000);
}

O display liga correctamente.

Isto deixa-me ainda mais confuso, porque parece estar tudo bem ....


cumps
David Martins
Eng. Electrotécnica e de Computadores, UBI

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Display 7 segmentos
« Responder #12 em: 29 de Outubro de 2010, 22:43 »
O problema é estares a usar um simulador que nem sequer é feito pela microchip, manda lá o proteus dar uma volta que isso regra geral só trás mais mal que bem.
Experimenta já agora isto, em vez de fazeres:
Código: [Seleccione]
valor=valor+1;
faz antes:
valor++;
troca o delay_ms(1000); por :
delay_ms(250);
delay_ms(250);
delay_ms(250);
delay_ms(250);
« Última modificação: 29 de Outubro de 2010, 22:47 por senso »
Avr fanboy

Offline Cynary

  • Mini Robot
  • *
  • Mensagens: 182
Re: Display 7 segmentos
« Responder #13 em: 29 de Outubro de 2010, 22:45 »
Com o código mais recente que apresentaste, o display faz: 5,6,7,5,6,7,..., ou faz: 5,6,7, e fica no 7?
Na parte da soma, em vez de fazeres:
valor = valor+1;
tenta cada um destes:
valor++;
++valor;
valor += 1;

E dou-te o mesmo conselho que o senso: larga o simulador.

Offline Dave

  • Mini Robot
  • *
  • Mensagens: 368
    • "O Engenhocas"
Re: Display 7 segmentos
« Responder #14 em: 29 de Outubro de 2010, 22:51 »
OK amigos... eu apenas iniciei o simulador para não "estragar" demais o PIC.

Vou fazer mais testes.... modificando o delay.

Quanto ao incremento, eu estava a utilizar assim (valor++), mas fui procurando alternativas....


Citar
Com o código mais recente que apresentaste, o display faz: 5,6,7,5,6,7,..., ou faz: 5,6,7, e fica no 7?

Ele faz o ciclo.... 5,6,7,5,6,7,5,6,7,5,6,7,.......





cumps  ;)



David Martins
Eng. Electrotécnica e de Computadores, UBI