Ir ao conteúdo

Auto consumo do CPU com display 7 seguimentos


tehuan

Posts recomendados

Postado

Boa tarde galera!

Eu criei um contador que com uma entrada no pino A0 somo um a uma variável, e uma entrada no pino A1 subtraio um desta mesma variável, de acordo com o valor desta variável acendo os leds do display.

O que acontece é que o proteus diz que está alto o consumo da CPU, e os leds do número que está aceso no momento ficam piscando, com exceção do nove esse funciona normal.

uWRDI.png

Código do display

#include <16F628A.h>

#FUSES NOWDT

#FUSES INTRC_IO

#FUSES PUT

#FUSES NOPROTECT

#FUSES BROWNOUT

#FUSES NOLVP

#FUSES NOCPD

#FUSES NOMCLR

#use delay(clock=4000000)

#define soma PIN_A0

#define subt PIN_A1

#define led1 PIN_B0

#define led2 PIN_B1

#define led3 PIN_B2

#define led4 PIN_B3

#define led5 PIN_B4

#define led6 PIN_B5

#define led7 PIN_B6

int credito;

void main()

{

while (true)

{

if (!input(soma))

{

credito++;

if (credito == 0)

{

credito = 255;

}

do{}

while (!input(soma));

}

if (input(subt))

{

credito--;

if (credito == 255)

{

credito = 0;

}

do{}

while (input(subt));

}

if (credito == 1)

{

output_low(led1);

output_high(led2);

output_high(led3);

output_low(led4);

output_low(led5);

output_low(led6);

output_low(led7);

}

if (credito == 2)

{

output_high(led1);

output_high(led2);

output_low(led3);

output_high(led4);

output_high(led5);

output_low(led6);

output_high(led7);

}

if (credito == 3){

output_high(led1);

output_high(led2);

output_high(led3);

output_high(led4);

output_low(led5);

output_low(led6);

output_high(led7);

}

if (credito == 4){

output_low(led1);

output_high(led2);

output_high(led3);

output_low(led4);

output_low(led5);

output_high(led6);

output_high(led7);

}

if (credito == 5){

output_high(led1);

output_low(led2);

output_high(led3);

output_high(led4);

output_low(led5);

output_high(led6);

output_high(led7);

}

if (credito == 6){

output_high(led1);

output_low(led2);

output_high(led3);

output_high(led4);

output_high(led5);

output_high(led6);

output_high(led7);

}

if (credito == 7){

output_high(led1);

output_high(led2);

output_high(led3);

output_low(led4);

output_low(led5);

output_low(led6);

output_low(led7);

}

if (credito == 8){

output_high(led1);

output_high(led2);

output_high(led3);

output_high(led4);

output_high(led5);

output_high(led6);

output_high(led7);

}

if (credito == 9){

output_high(led1);

output_high(led2);

output_high(led3);

output_high(led4);

output_low(led5);

output_high(led6);

output_high(led7);

}

else{

output_low(led1);

output_low(led2);

output_low(led3);

output_low(led4);

output_low(led5);

output_low(led6);

output_low(led7);

}

}

}

Desde já agradeço a ajuda amigos!

Postado

Eu estou acionando os pinos por aterramento. Mando 5 volts direto na porta e um botão ligando o GND, acionando o botão os 5 volts escoam pelo terra.

If (!input(pin_a0)

{

bloco de comandos

}

Abraço! Estranho o lance da foto, eu também não estou conseguindo ampliar hoje pela manhã estava normal. Vou tentar resolver.

Postado

O que acontece é que o proteus diz que está alto o consumo da CPU, e os leds do número que está aceso no momento ficam piscando, com exceção do nove esse funciona normal.

Nao entendi este aviso de alto consumo ( é do PIC?) eles sempre roda a 100% a nao ser que você faca uma funcao/programa pra o PIC hibernar quando nao usado.

Postado

POsta um link com o projeto completo para vermos em tempo real.

se sua variável 'Credito' só chega a 255,voce pode definila como Unsigned Char e nãpo precisa desta linha;

if (credito == 255)

{

credito = 0;

}

Tanto para decrementar como para encrementar pois um byte quando 'estoura',volta para zero automaticamente.

Nao entendi este aviso de alto consumo ( é do PIC?) eles sempre roda a 100% a nao ser que você faca uma funcao/programa pra o PIC hibernar quando nao usado.

O aviso é sobre a animação gerada pelo PC,não do PIC.

Postado

Fala pessoal...

Joguei um videozinho no youtoba pra facilitar pra galera, poder me ajudar, o código fonte ta no meu primeiro post.

Abraço pessoal pela ajuda!

Postado
Tenta isso;

Vá em 'System/Set_Animation Options' e coloque 50,120,50,50 nas opções dos quadros a esquerda.

Fala amigão melhorou pouca coisa, mas é bom saber que o problema não está no código está no programa.

Outra dúvida galera

No caso de eu trocar os if's por switch ficariam assim?

switch(credito)

{

case 1:

bloco de comandos;

case 2:

bloco de comandos;

default:

bloco de comandos;

}

Nesse caso o programa entende os números 1 e 2 como sendo possíveis valores da variável crédito? E caso a variável assuma algum desses valores executa os comandos?

Sendo sim a resposta das perguntas anteriores. Trabalhando com display de 7 segmentos eu não preciso do comando break, pois preciso que o comando seja verdadeiro até que a variável assuma outro valor.

Desculpa o bombardeio de dúvidas galera, espero ter sido claro...

Abração a todos!

Arquivado

Este tópico foi arquivado e está fechado para 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!