Ir ao conteúdo
  • Cadastre-se

Contador com cristal 8 Mhz, usando 4 Mhz


Posts recomendados

Pessoal,

 

Compilei o código anexado que é um simples contador de pulso usando display anodo comum com push-button ligando pino 13 ao GND tendo 10K indo para o + 5volts. Só tenho cristal de 4 Mhz, daí no CCS eu simplesmente coloquei 4000000 no lugar de 8000000 e compilei. Mas o troço não funcionou legal não, ele até conta mas assim: os três primeiros digitos vão contando juntos 000 111 222 333 444 quando chega em 999 aí o quarto digito incrementa 1. Estranho demais, pois era para contar 0000, 0001, 0002 e assim até 9999, testei com dois 16f84a. 

 

Outra coisa que achei estranho é porque ali no inicio do código está HS ao invés de XT ? mudei mas foi inútil.

 

E o terceiro problema foi os segmentos que não eram para aparecer ficaram bem acesos quase não dando para ver a contagem.

 

 

 

 

 

CódigoCounter.txt

Link para o comentário
Compartilhar em outros sites

 

Em 14/01/2017 às 20:23, sergiotronic disse:

Só tenho cristal de 4 Mhz

 

Para cristal de 4Mhz usa-se XT e clock de 4000000

Para cristal de 8Mhz usa-se HS e clock de 8000000

 

Em 14/01/2017 às 20:23, sergiotronic disse:

daí no CCS eu simplesmente coloquei 4000000 no lugar de 8000000 e compilei. Mas o troço não funcionou legal não

 

Se configurar errado, tem dois possíveis erros, o primeiro é o de não funcionar e o segundo é do processamento ficar contando errado, por exemplo, se for colocado 8Mhz(8000000) no clock mas o clock real do cristal for 4Mhz, 1 segundo vai durar 2, fora isto praticamente vai tudo bem.

 

Em 14/01/2017 às 20:23, sergiotronic disse:

Outra coisa que achei estranho é porque ali no inicio do código está HS ao invés de XT ? mudei mas foi inútil.

 

XT aceita até 4Mhz e HS aceita de 4 até 20Mhz, ou seja, com cristal de 4Mhz dá pra usar as duas opções, deve ser por isto.

 

Em 14/01/2017 às 20:23, sergiotronic disse:

E o terceiro problema foi os segmentos que não eram para aparecer ficaram bem acesos quase não dando para ver a contagem.

 

Aí já pode ser problema de eletrônica, resistores incorretos por exemplo.

 

Às vezes que eu mexi com esse tipo de display, para testar a lógica eu sempre colocava os tempos de transição entre um display e outro, bem lenta pra ver a varredura como estava se comportando. No seu caso, pra fazer esse teste, você pode mexer no seguinte trecho:

digit = i % 10;
   digit1 = seg(digit);
   output_a(0x0F);             // Turn off all displays
   output_b(digit1);           // Send ones digit
   output_a(0x07);             // Turn on display for ones
   delay_ms(5);
   digit = (i / 10) % 10;
   digit10 = seg(digit);
   output_a(0x0F);             // Turn off all displays
   output_b(digit10);          // Send tens digit
   output_a(0x0B);             // Turn on display for tens
   delay_ms(5);
   digit = (i / 100) % 10;
   digit100 = seg(digit);
   output_a(0x0F);             // Turn off all displays
   output_b(digit100);         // Send hundreds digit
   output_a(0x0D);             // Turn on display for hundreds
   delay_ms(5);
   digit = (i / 1000) % 10;
   digit1000 = seg(digit);
   output_a(0x0F);             // Turn off all displays
   output_b(digit1000);        // Send thousands digit
   output_a(0x0E);             // Turn on display for thousands
   delay_ms(5);

 

Você altera os "delay_ms(5);" para  delay_ms(1000);

 

Assim você pode ver realmente o que está sendo impresso em cada dígito.

 

Por último e mais importante:

Em 14/01/2017 às 20:23, sergiotronic disse:

os três primeiros digitos vão contando juntos 000 111 222 333 444 quando chega em 999 aí o quarto digito incrementa 1

Verifica a lógica para pegar as unidades, dezenas e centenas, se não me engano o correto seria:

Unidade: digit = i % 10;

Dezena: digit = i / 10; 

Centena: digit = i / 100;

Milhar: digit = i / 1000;

 

Tá aí meus 10 centavos!!

 

 

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

Visitante
Este tópico está impedido de receber novas respostas.

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