Ir ao conteúdo

Aterramento de dígito no positivo


Ir à solução Resolvido por .if,

Posts recomendados

Postado

Saudações,

Estou com uma dúvida cruel. Estou montando um display 7 digitos **catodo** comum e a situação é a seguinte:

O microcontrolador(Arduino[Por favor não movam este tópico para lá]) possui suas saídas fornecendo tensão positiva,até aí beleza,porque os 7 segmentos do display são anodo,ou seja,precisa-se de terminais positivos. Mas o problema é que:

Esses display possuem 7 segmentos por dígito,como na imagem:right.png.4f6a159bb3423d50919e9fbe76cccc69.png

O que faz a corrente fluir é a conexão com o terra do circuito,maaaaasss: O Arduino só possui saídas positivas - não tem condições de 'ativar' o pino e fazer aterramento para que os led's se acendam. Mesmo que eu aterra no próprio terra da placa todos os led's se acenderiam(conforme eu acionasse o A,B,C,D,etc.. de cada dígito),e eu não quero que isso aconteça,já que estou trabalhando com alimentação chaveada,que vai funcionar na seguinte maneira: Eu aterro o primeiro digito,mapeio todos os segmentos123.png.ab8208c7cfdfa5a7b5a204d5d9d591da.png 

Por exemplo,eu quero que apareça no visor o número 13: Aterrar o primeiro dígito ; Acionar segmento B (como na imagem) ; Desligar segmento B; Acionar segmento C; Desligar segmento C; Desaterrar primeiro dígito; Aterrar segundo dígito ; E como no primeiro dígito,ligar os segmentos A, B, C, D, G, sendo que cada um deve ser desligado após o seu acionamento;

Assim ficaria uma alimentação chaveada,dando o efeito POV (Persistência da visão,em PT-BR) e não sobrecarregaria a placa.

Mas como disse,esse aterramento e desaterramento dos dígitos não podem ser feitos a partir da tensão positiva que os terminais ''microcontrolados" do Arduino fornecem.

Eu estava pesquisando e vi que os caras colocavam na pinagem o aterramento no positivo mesmo,e diz eles que davam certo,mas não tem lógica nenhuma,até porque já fiz testes.

Alguém me da uma luz!!!

 

 

  • Membro VIP
Postado

O tal efeito pov você precisa fazer uma varredura duns 20Hz pra cada display. Pra isso use - pesquise - sobre interrupção dum timer qualquer

microcontrolador_PIC_pratica4_fig3.pngassim...

14 minutos atrás, Gabriel G.S. 1023 disse:

podem ser feitos a partir da tensão positiva que os terminais ''microcontrolados" do Arduino fornecem

(tá faltando R)

Postado

O propósito é exatamente esta mas a situação que comentei continua do mesmo jeito,já que eu terei que chavear o aterramento.

18 minutos atrás, Isadora Ferraz disse:

 

"(tá faltando R)" 

??????

 

  • Membro VIP
  • Solução
Postado

R esistores.

2 minutos atrás, Gabriel G.S. 1023 disse:

chavear o aterramento

No caso de display multiplexado, isso se chama

21 minutos atrás, Isadora Ferraz disse:

varredura

e sinto te informar que é obrigatória.

Pelo que reentendi você quer acionar um (unzinho) segmento de cada vez, é isso? De fato não precisa já que vai ter que usar 8 saídas pros segmentos, acione de 8 em 8 uai.

Já a técnica de acionar um a um até que existe mas num caso avançado (que penso não ser o seu). É pra quando há limitação de potência ou corrente do buffer... algo quando a soma delas - dos pinos - ultrapassa a máxima que o ci fornece no total. (não reexplico)

adicionado 3 minutos depois
45 minutos atrás, Gabriel G.S. 1023 disse:

O Arduino só possui saídas positivas - não tem condições de 'ativar' o pino e fazer aterramento para que os led's se acendam.

Ah sim... você se engana. Sim qualquer mc ativa o zero (ou terra) nos terminais. Basta colocar o anodo no + e catodo nesta saída ativa em zero. (De novo ... falta R)

  • Curtir 1
Postado
3 horas atrás, Gabriel G.S. 1023 disse:

O Arduino só possui saídas positivas

Quem disse?

Qualquer CI lógico quando está em zero está conectado ao negativo, Arduíno segue o mesmo sistema.

 

3 horas atrás, Gabriel G.S. 1023 disse:

Mas como disse,esse aterramento e desaterramento dos dígitos não podem ser feitos a partir da tensão positiva que os terminais ''microcontrolados" do Arduino fornecem.

Nesse caso deve usar os transistores, igual aparece no exemplo acima postado pela @Isadora Ferraz .

Vai te facilitar na programação, pois quando a saída do Arduíno ficar positiva pra acender o display, o transistor vai conectar o catodo do display ao terra.

Isso também irá ajudar a não sobrecarregar seu arduíno, já que a corrente consumida pelos displays vai passar pelos transistores.

Postado

Galera,resolvi o problema!!!!!!!!!!!!

Eu estava programando um "computador de bordo" para a bicicleta,aí eu estava testando o giro da roda com cliques do botão,se bati muito para que quando o botão fosse apertado contasse somente uma vez á variável var02,mas esse trecho excluí do código pois era somente teste do que o receptor infravermelho deveria fazer ao detectar o led infravermelho implantado na roda (quem não tem cachorro caça com gato ~não tenho censor hall nem imã). Consegui resolver esse problema do botão,mas eu fiquei com isso na cabeça o dia todo,como qualquer coisa que aprendo e acho interessante. De repente eu me toco que para o Arduino detectar o toque do botão ele tem que fazer aterramento,COM O pinMode INPUT!!!!!!!!!!!!

EUREKA!!!!!!!! Depois de tanto tempo pesquisando o que é velocidade linear,raio,circunferência,pra tentar programar e fazer algo que funcione;testei agora e deu certo,vocês sempre estavam certos,da pra fazer o aterramento

Ps: Código abaixo não tem ctrl + C e ctrl + V,gosto de escrever os nomes das variáveis em inglês mesmo.

#define a 13
#define b 12
#define c 11
#define d 10
#define e 9
#define f 8
#define g 7
#define pd 10
#define rcv_pn 2
#define terra_1 4
#define terra_2 3
#define pi 3.14159265359
int rtimer = 0;
int timer = 0;
int ic = 0;
int apt;
int velo;
bool var01; // Registro de volta
int var02; //Contador de volta
int var03; //
int vdezena;
int vuni;
bool retract_button =  true;
bool press_button = false;
bool countered;
int media;
bool dispn[11][7] = {
  {1,1,1,1,1,1,0},   // 0
  {0,1,1,0,0,0,0},   // 1
  {1,1,0,1,1,0,1},   // 2
  {1,1,1,1,0,0,1},   // 3
  {0,1,1,0,0,1,1},   // 4
  {1,0,1,1,0,1,1},   // 5
  {1,0,1,1,1,1,1},   // 6
  {1,1,1,0,0,0,0},   // 7
  {1,1,1,1,1,1,1},   // 8
  {1,1,1,1,0,1,1},   // 9
  {0,0,0,0,0,0,1}    // Símbolo -;
};
unsigned short int portmap[7] = {a,b,c,d,e,f,g};
inline void disp(const int decimal,const int numeric){
  int i = 0;
  pinMode(terra_1,OUTPUT);
  pinMode(terra_2,INPUT);
  while(1){
    if(i >= 7){
    digitalWrite(g,0);
    break;
    }
    digitalWrite(portmap[i],dispn[decimal][i]);
    digitalWrite(portmap[--i],0);
    i += 2;
  }
  i = 0;
  pinMode(terra_1,INPUT);
  pinMode(terra_2,OUTPUT);
  while(1){
    if(i >= 7){
    digitalWrite(g,0);
    break;
    }
    digitalWrite(portmap[i],dispn[numeric][i]);
    digitalWrite(portmap[--i],0);
    i += 2;
  }
  
  i = 0;
}
void setup() {
  pinMode(a,OUTPUT);
  pinMode(b,OUTPUT);
  pinMode(c,OUTPUT);
  pinMode(d,OUTPUT);
  pinMode(e,OUTPUT);
  pinMode(f,OUTPUT);
  pinMode(g,OUTPUT);
  //Serial.begin(2000000);
}
void loop() {
timer = millis();
press_button = digitalRead(rcv_pn);
if(press_button != retract_button){
  if(press_button == false && retract_button == true)
  var02++;
 }
retract_button = digitalRead(rcv_pn);
if(timer - rtimer >= 1000){ //each one                                                                                                                second
  velo = ((207.345 * var02)/100) * 3.6;
  if(velo - media > 3){
    media = velo;
  }
  media = (velo + media) / 2;
  */
  /*Serial.println("-------------------------------------------------------------------");
  Serial.print("Media: ");
  Serial.print(media);
  Serial.print("     Var02: ");
  Serial.println(var02);
  
  rtimer = millis();
  var02 = 0;
  vdezena = media / 10;
  vuni = media - vdezena;
  /*Serial.print("vdezena: ");
  Serial.print(vdezena);
  Serial.print("          Vuni: ");
  Serial.println(vuni);
  Serial.println("-------------------------------------------------------------------");
  */
  
  disp(vdezena,vuni);
 
}else
  disp(vdezena,vuni);
}
 

 

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...