Ir ao conteúdo
  • Cadastre-se

Arduino Placar em Arduino


Posts recomendados

Olá, estou desenvolvendo um placar eletrônico em Arduino, a ideia nasceu em PIC, porém após analisar melhor, se tornou mais atraente no Arduino.
Segue o tópico em que discuti toda parte eletrônica:
Marcador de Pontos em PIC
 

Aqui o Projeto no Fritzing:
placar_bb3.thumb.png.e560448c4c5dae15ea8fb9226dd4c972.png

Os leds estão na seguinte sequência:
ABCDEFG 
Só coloquei lado a lado para simular.
Como podem ver os leds estão multiplexados na sequência DEZENA-UNIDADE, por faltar entradas no arduino eu utilizo um multiplexador D74HC4067.
Os botões estão ligados de uma forma para utilizar apenas uma entrada analógica.

Segue o projeto no Proteus:
2882yoy.png

Como podem ver está um pouco diferente, o D74HC4067 no Proteus não tem as entradas SIG, VCC e GND (O arduino não tem as última duas), apresenta uma entrada X (Que eu acredito a corresponder a SIG, porém me corrijam caso eu esteja errado)

Um amigo iria me ajudar com o código, porém ele está sem tempo então vou tentar desenvolver o mesmo.
Como sou novato em tudo isso, estou em dúvida de como fazer, comecei a escrever porém travei.


//Mutiplexador 16 canais
//Pinos controladores do multiplexador
int s0 = 10;
int s1 = 11;
int s2 = 12;
int s3 = 13;
//Pino SIG do multiplexador
int SIG_pin = 9;


void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);

Serial.begin(9600);
}

 

Se alguém puder me ajudar a escrever o código, já deixo meus agradecimentos.

Atenciosamente,
João Pedro.
  

Link para o comentário
Compartilhar em outros sites

Sobre o problema do proteus: Todos esses pinos são escondidos. Se você quiser ligá-los você vai na esquerda na barra de utilitários e em "Terminals Mode", está tudo ai. O pino GND é o mesmo GND dos micro controladores e das outras partes do teu circuito e o "POWER" você leva para sua área de trabalho do proteus e clica duas vezes nele e na ja nela "String" você seleciona os pinos escondidos que você quer.

 

Note que se você não mencionar esses pinos escondidos você terá  problema se você for usar o Ares na hora de desenho do circuito, no resto não tem problema pois eles já foram colocados em 5V qualquer que seja a tensão necessária para ligar o CI.

 

 

Sobre o código você pode tentar fazer um "For" para ir fazendo os comando automaticamente... E para você saber como funciona olhe o datasheet desse componente na tabela verdade fornecida. Ai você vai tentando ligar os S e desligando para ver como funciona ^^

Link para o comentário
Compartilhar em outros sites

@Bommu Perneta
Continuei a escrever e obtive algum avanço.

//Mutiplexador 16 canais
//Pinos controladores do multiplexador
int s0 = 10;
int s1 = 11;
int s2 = 12;
int s3 = 13;
//Pinos de energia dos Displays
int dp1 = 7;
int dp2 = 6;
int dp3 = 5;
int dp4 = 4;
//Pino SIG do multiplexador
int SIG_pin = 9;

// Tabela para controlar os Pinos do multiplexador
byte controlPins[] = {B00000000, 
                      B10000000,
                      B01000000,
                      B11000000,
                      B00100000,
                      B10100000,
                      B01100000,
                      B11100000,
                      B00010000,
                      B10010000,
                      B01010000,
                      B11010000,
                      B00110000,
                      B10110000,
                      B01110000,
                      B11110000 }; 
 
void setup(){
  //Definindo pinos do multiplexador como saida
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
// definindo pinos do display como saida
pinMode (dp1, OUTPUT);
pinMode (dp2, OUTPUT);
pinMode (dp3, OUTPUT);
pinMode (dp4, OUTPUT);

digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
digitalWrite(dp1, LOW);
digitalWrite(dp2, LOW);
digitalWrite(dp3, LOW);
digitalWrite(dp4, LOW);


Serial.begin(9600);
}

void loop() {
  
void setOff(){
  digitalWrite(pinA, LOW);
  digitalWrite(pinB, LOW);
  digitalWrite(pinC, LOW);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, LOW);
  digitalWrite(pinP, LOW);
}

void set1(){
  digitalWrite(pinA, LOW);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, LOW);
  digitalWrite(pinP, LOW);
}

void set2(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, LOW);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinP, LOW);
}

void set3(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinP, LOW);
}

void set4(){
  digitalWrite(pinA, LOW);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinP, LOW);
}

void set5(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, LOW);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinP, LOW);
}

void set6(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, LOW);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinP, LOW);
}

void set7(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, LOW);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, LOW);
  digitalWrite(pinG, LOW);
  digitalWrite(pinP, LOW);
}

void set8(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinP, LOW);
}

void set9(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, LOW);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, HIGH);
  digitalWrite(pinP, LOW);
}

void set0(){
  digitalWrite(pinA, HIGH);
  digitalWrite(pinB, HIGH);
  digitalWrite(pinC, HIGH);
  digitalWrite(pinD, HIGH);
  digitalWrite(pinE, HIGH);
  digitalWrite(pinF, HIGH);
  digitalWrite(pinG, LOW);
  digitalWrite(pinP, LOW);
}

}

Porém ainda estou com dúvida de como vou escrever pra controlar o Multiplexador, não acho nenhum código pra comparar, como pode ver no código os pins de A até G não tem uma variável, como vou escrever a variável deles?
#define pinD = S0, S1;
#define pinD = (B110000000);

Eu realmente to perdido.

Link para o comentário
Compartilhar em outros sites

Não estou entendendo direito teu código...

//Definindo pinos do multiplexador como saida
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

Ai em cima você está definindo os pino do arduino como output... em teoria os pinos do decodificador serão input... mas você não precisa declarar isso, os pinos do decodificador pelo que saiba vão fazer o trabalho sozinhos e apresentar os resultados da sua tabela verdade... Se é de S0 a S4, os pinos de entrada terão 2^(4)=16 possibilidades e isso é igual ao número de saídas de I0 a I15.

 

Se procurar na net por demultiplexe arduino você acha alguns exemplos

https://www.tigoe.com/pcomp/code/arduinowiring/540/

 

Se eu fosse você, além de tentar entender essa lógica ai dos demultiplexe arduino tentaria aplicar valores a cada porta vagarosamente em códigos pequenos para ver o que resulta. Tenta escrever de 0 a 9 depois veja para que serve os transistores nessa sequencia ligando e os desligando...

 

Depois de saber no que resulta tudo, você parte para um função "for" para ir acrescentando e trocando os vetores, usa um delay para ver os números... e por ai vai... novamente tem exemplos de função for na net...

 

Link para o comentário
Compartilhar em outros sites

@Bommu Perneta
Obrigado, já resolvi essa parte.

Agora a minha dúvida é, como ligar mais de uma saída do multiplexador no código, porque a única ideia que tenho é botar delays e ficar ligando e desligando (muito rápido).

Por exemplo, pra formar o número 3, eu tenho que ligar os segmentos ABCDG, no 74HC4067, no caso vou ter que mandar o código binário ligar as saídas/entradas  C0,C1,C2,C3,C6 (Se for nos dois primeiros display, se for nos outros dois teria que ligar as C7,C8,C9,C10,C13), Porém como eu faço no meu código pra ligar mais de uma ao mesmo tempo?

Não sei se ficou claro, eu tenho que ligar 5 segmentos para formar o número 3, só que pra isso eu tenho que ativar 5 entradas do multiplexador ao mesmo tempo, como eu faria isso?

Não quero o código pronto, só um exemplo para eu entender.

Link para o comentário
Compartilhar em outros sites

3 horas atrás, João Pedro Possetti disse:

Porém como eu faço no meu código pra ligar mais de uma ao mesmo tempo?

através de multitarefa usando o comando millis... dá uma procurada... É meio ruim de entender de primeira, mas depois disso dá para fazer multitarefa nele mais facilmente X)

 

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz @Bommu Perneta

Mudei o projeto xD
Em vez de usar o 74HC4067, vou usar um MAX7219, ele é próprio para displays de 7 segmentos.
Porém surgiu outra dúvida, que eu mostro no vídeo, eu consigo simular com os displays já prontos, porém se troco por leds não vai, acredito que seja meu PC que não ta dando conta, porém se puderem confirmar isso, já fico mais tranquilo!

https://drive.google.com/file/d/0B2VQsocyrdhhaVRveW85eTBWV1k/view

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 hora atrás, João Pedro Possetti disse:

PC que não ta dando conta

Sim pode ser isso. Mas ... vem cá... pra que colocar leds se com display já deu certo?

 

Me lembrei que já tinha dito num post anterior: se seu arduíno tiver 11 ports digitais livres - 7 segmentos + 4 pros comuns dos displays -, nem precisaria da interface. Trocadilhamente esta seria a "porta estreita". Escolheste a "porta larga"

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

É a cpu pedindo pinico...basicamente. Para contornar isso vai na aba "System", depois em "Set Animations options". Reduz os frames por segundo ate uns 20. Se ainda tiver problema modifica timestep per frame e single step time.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
19 minutos atrás, Bommu Perneta disse:

Reduz os frames por segundo ate uns 20. Se ainda tiver problema modifica timestep per frame e single step time.

...e se isso não melhorar, vá nas propriedades do led e escolha "digital" e não "analogico".  E+: as peças que não está utilizando ou que nem fede nem cheira pro circuito, habilite o "exclude from simulation". E tem+,... mas deixa pro futuro pra não te dar congestão

 

EU (eu) gosto do led amarelo ou azul: maior destaque na tela

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz
Eu falei isso no vídeo, não encontro nenhum display no tamanho que eu quero e eles tem que ser visíveis de longe, então tenho que fazer meu próprio no tamanho certo.
@Bommu Perneta
Vou testar aqui e mando resultado!

@Edit
Já estava em 20 aheuahue, eu diminui pra 5 e já se tornou visualmente visivel, um pouco lerdo, mas deu pra ver que ta funcionando.
 

3 horas atrás, Isadora Ferraz disse:

EU (eu) gosto do led amarelo ou azul: maior destaque na tela

Eu tinha pensando em 2 displays vermelhos e 2 azuis pra dar aquela difrenciada.

@Edit2
Mudei pra Digital e nem acendeu.
Será que agora consigo usar leds de auto brilho? Ou nem vai funcionar sem resistores?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
1 hora atrás, João Pedro Possetti disse:

Eu falei isso no vídeo

Sorry não "ouvi" o video - literalmente - to sem som

 

1 hora atrás, João Pedro Possetti disse:

pensando em 2 displays vermelhos e 2 azuis

sorry de novo.. falei da simulação na tela do proteus e não na real. ALém do +.. não ouvi seu pensamento kk

 

1 hora atrás, João Pedro Possetti disse:

Mudei pra Digital e nem acendeu

estranho pra simulação. Talvez alguma configuração do ci de interface, falta conexão... etc sei lá.

 

1 hora atrás, João Pedro Possetti disse:

Será que agora consigo usar leds de auto brilho?

Na real? Seja de qualquer tipo de led que for...

1 hora atrás, João Pedro Possetti disse:

nem vai funcionar sem resistores

Ou vai, mas aí.. o buraco é+ em baixo. Melhor colocar....

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

14 horas atrás, Isadora Ferraz disse:

Ou vai, mas aí.. o buraco é+ em baixo. Melhor colocar....

Como eu calculo qual eu vou usar ai?
Agora que me toquei, esse CI permite usar um resistor para todos os leds, pensei em usar de 100k para os 28 leds difusos que vão formar os 4 displays.
Será que é demais? Ou de menos? Se eu for usar alto brilho devo aumentar né?

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
3 horas atrás, João Pedro Possetti disse:

Como eu calculo qual eu vou usar ai?

A grosso modo...

Tens que ter as informações do led: corrente Iled e tensão Vled dele. Também a informação da fonte Vcc

Aí é fazer: R=(Vcc-Vled)/Iled

Se este ci tem como controlar a corrente de todos os leds com 1 resistor, ótimo. Se achar que deve, publique a parte do datasheet de onde tirou esta informação. Da mesma forma, vais ter que saber a corrente dos leds.

Sim, leds de alto brilho brilham mais com menor corrente. Mas de novo e sempre, busque informações no d.s. do bicho

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, Isadora Ferraz disse:

Aí é fazer: R=(Vcc-Vled)/Iled

Difuso= (5-2)/0,02=150
Alto brilho= (5-3)/0,03=66
Mas esse resultado é para um led só,não? Eu faço esse valorXquantidade de leds?
porque ai daria 150*28=4200, 66*28=1848.
Se estiver certo, coloco um de 100k independente de qual eu vá usar.

Aqui o DataSheet:
MAX7219
Na página 5, fala sobre o pino 18 que é o do resistor.
 

Link para o comentário
Compartilhar em outros sites

9 horas atrás, João Pedro Possetti disse:

Como eu calculo qual eu vou usar ai?
Agora que me toquei, esse CI permite usar um resistor para todos os leds, pensei em usar de 100k para os 28 leds difusos que vão formar os 4 displays.
Será que é demais? Ou de menos? Se eu for usar alto brilho devo aumentar né?

 

Utiliza um de 10k,que é bem perto do minimo recomendado 9.53k(pg.8 datasheet). Controla o brilho pela spi(dutycicle).Lembra também que quanto mais digitos,menor será o brilho,pois é multiplexado.No caso utilizado resistor de 10k,a corrente seria 40ma para cada segmento,utilizado apenas um digito,para dutycicle 100%(na verdade quase 100%,pois é 31/32 o maximo).Caso utilizar 4 digitos,mantendos os outros parametros,a corrente cairia para 10ma.Obviamente o brilho vai depender na onde utiliza,provavelemente num ambiente sem claridade,qualquer corrente vai funcionar de boa,já se tiver sol,talvez nem no maximo fica bom.Utiliza na alimentação capacitor cerâmico de 100nf para filtrar ruido e capacitor eletrolítico de 10uf para aguentar picos de correntes.A maioria destes max7219 são chinês,pois os originais são bem caro(7dolar),então tomar cuidado com os limites.

image.png.c36264037f48f3c0a49e089a1a38693a.png

Pg.4

image.png.86d809f564458d6cef62f70609c6b68c.png

Pg.2

MAX7219-MAX7221.pdf

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!