Página 1 de 2

Erros no programa - Mikroc/Proteus [Jogando a Toalha]

MensagemEnviado: 17 Fev 2016 19:42
por elzirobotelho
Montei um projeto onde me exibe data, hora, mensagem e temperatura em 8 display de 7 seg. O problema é quando eu habilito a chamada da rotina de temperatura(), que fica no laço while dentro da rotina main(); os caracteres da opção Sair (quando acessa o menu através do botão enter) fica indescritível, e quando acesso a opção mensagem para a alteração da mensagem exibida, não funciona adequadamente. Segue em anexo o programa escrito no MikrocPro e os arquivos do Proteus 7.7.
Detalhe, este circuito rodei num hardware real, e apresenta o mesmo problema no circuito simulado pelo Proteus.
Já quebrei a cabeça e não consegui achar o erro no programa. Sei que o programa é bem longo, se alguém quiser tentar e me ajudar a desvendar este problema, agradeço

Sds

Re: Jogando a Toalha

MensagemEnviado: 17 Fev 2016 22:02
por andre_luis
elzirobotelho escreveu:quando acesso a opção mensagem para a alteração da mensagem exibida, não funciona adequadamente


Se tiver como detalhar mais isso aí ajudaria.
Um video no Youtube talvez fosse melhor do que com palavras...

Re: Jogando a Toalha

MensagemEnviado: 18 Fev 2016 07:07
por brasilma
Olá Colega,

Pelo que descreve, está ocorrendo alguma especie de conflito, que pode ser de sinal ou variável. V

erifique a ligação de pinos do display, veja se não ficou nenhum sem conexão, verifique a rotina do display, variáveis em comum.

Re: Jogando a Toalha

MensagemEnviado: 18 Fev 2016 07:48
por tcpipchip
Opa,

Esta dizendo que falta DLL da MAXIM

Re: Jogando a Toalha

MensagemEnviado: 18 Fev 2016 07:59
por tcpipchip
Ahh, faz um teste no 18F4620 tambem no PROTEUS

Re: Jogando a Toalha

MensagemEnviado: 18 Fev 2016 08:45
por ze
tentei analisar por alguns minutos. Numa análise superficial penso que tudo pode ser otimizado. p.ex. penso não ser necessários:
-WordToStr()
-max7219: faria varredura pelos pinos que sobram
Sei que isso não te ajudou muito mas tenho visão minimalista e seu projeto me pareceu muito complexo pra uma missão tão simples. Estimo que o fonte poderia ser reduzido nuns 60% e o circuito uns 25. Pelo menos reduziria um pouco o tamanho do palheiro onde está a agulha

Pra tentar agregar algum coisa...
-carregue o .cof no proteus pra ver o fonte
-rode passo a passo
-crie break points onde suspeita de algo
Talvez as interrupções esteja zoando o barraco

Re: Jogando a Toalha

MensagemEnviado: 18 Fev 2016 20:17
por vtrx
Não baixei nem ví o código,mas provavelmente escreveu uma uma rotina de interrupção para o Display,correto...?

Re: Jogando a Toalha

MensagemEnviado: 19 Fev 2016 06:57
por elzirobotelho
Vou Tentar postar imagem no youtube. Ou selecionar o print da tela e postar

Re: Jogando a Toalha

MensagemEnviado: 19 Fev 2016 07:13
por elzirobotelho
ze escreveu:tentei analisar por alguns minutos. Numa análise superficial penso que tudo pode ser otimizado. p.ex. penso não ser necessários:
-WordToStr()
-max7219: faria varredura pelos pinos que sobram
Sei que isso não te ajudou muito mas tenho visão minimalista e seu projeto me pareceu muito complexo pra uma missão tão simples. Estimo que o fonte poderia ser reduzido nuns 60% e o circuito uns 25. Pelo menos reduziria um pouco o tamanho do palheiro onde está a agulha

Pra tentar agregar algum coisa...
-carregue o .cof no proteus pra ver o fonte
-rode passo a passo
-crie break points onde suspeita de algo
Talvez as interrupções esteja zoando o barraco



É uma boa dica, posso tentar otimizar o programa, embora eu não seja um bom programador no sentido de criar programas enxutos.

Sds

Re: Jogando a Toalha

MensagemEnviado: 19 Fev 2016 07:15
por elzirobotelho
brasilma escreveu:Olá Colega,

Pelo que descreve, está ocorrendo alguma especie de conflito, que pode ser de sinal ou variável. V

erifique a ligação de pinos do display, veja se não ficou nenhum sem conexão, verifique a rotina do display, variáveis em comum.



Eu acredito que o problema seja de software, erro no programa ou bug, qualquer coisa do gênero

Sds

Re: Jogando a Toalha

MensagemEnviado: 19 Fev 2016 07:18
por elzirobotelho
andre_teprom escreveu:
elzirobotelho escreveu:quando acesso a opção mensagem para a alteração da mensagem exibida, não funciona adequadamente


Se tiver como detalhar mais isso aí ajudaria.
Um video no Youtube talvez fosse melhor do que com palavras...


Vou fazer um vídeo e posto, e tentarei postar aqui mesmo.

Sds

Re: Jogando a Toalha

MensagemEnviado: 19 Fev 2016 14:31
por elzirobotelho
andre_teprom escreveu:
elzirobotelho escreveu:quando acesso a opção mensagem para a alteração da mensagem exibida, não funciona adequadamente


Se tiver como detalhar mais isso aí ajudaria.
Um video no Youtube talvez fosse melhor do que com palavras...



Estou anexando 2 vídeos, um com a rotina temperatura habilitada e outro sem a habilitação.

Sds

Re: Erros no programa - Mikroc/Proteus [Jogando a Toalha]

MensagemEnviado: 19 Fev 2016 14:33
por elzirobotelho
O Outro vídeo

Re: Erros no programa - Mikroc/Proteus [Jogando a Toalha]

MensagemEnviado: 19 Fev 2016 18:17
por andre_luis
elziro,

A sua função temperatura() é instanciada diretamente dentro do loop while(1) do main(), e possui dentro dela, um delay de 300ms, que é da mesma ordem de grandeza do delay usado pela rotina do display (250ms). Em primeiro lugar, seja qual for o material que você esteja medindo, com certeza sua temperatura não vai variar significativamente em alguns segundos. Isso significa que voce poderia colocar um contador para que essa temperatura fosse monitorada a cada, digamos 10 passadas, ex.:
cpp code
for ( i=0 ; i<10 ; i++ )
{
temperatura();
}
Alem disso, será que 300ms é realmente necessário ?
Não daria pra diminuir 1/10 esse valor ?

No mais, gostei do seu código, tem bastante comentários...

Re: Erros no programa - Mikroc/Proteus [Jogando a Toalha]

MensagemEnviado: 20 Fev 2016 18:36
por elzirobotelho
andre_teprom escreveu:elziro,

A sua função temperatura() é instanciada diretamente dentro do loop while(1) do main(), e possui dentro dela, um delay de 300ms, que é da mesma ordem de grandeza do delay usado pela rotina do display (250ms). Em primeiro lugar, seja qual for o material que você esteja medindo, com certeza sua temperatura não vai variar significativamente em alguns segundos. Isso significa que voce poderia colocar um contador para que essa temperatura fosse monitorada a cada, digamos 10 passadas, ex.:
cpp code
for ( i=0 ; i<10 ; i++ )
{
temperatura();
}
Alem disso, será que 300ms é realmente necessário ?
Não daria pra diminuir 1/10 esse valor ?

No mais, gostei do seu código, tem bastante comentários...



Alterei a rotina temperatura, tirando o Delay, e eliminei o laço do/while, mas continuou o mesmo problema.
Com relação ao sistema de amostragem é uma coisa que eu iria melhorar depois, estou usando um LM35, e a temperatura fica oscilando um pouco com alguns degraus até significativos, mas este é o menor dos problemas

Att