ze escreveu:que tal se vc postar o esquema? realmente falamos linguas um pouco diferentes e tenho a impressão que vc queimou a etapa do pisca led. mas enfim...
Outra coisa (chute) o compilador pode estar se perdendo entre signed e unsigned char p.ex.
Tem como vc ver as variáveis no proteus. Carregue o .cof (se o compilador gerar) no lugar do .hex. Ao pausar vc tem acesso ao fonte, variaveis e etc no debug
Bom dia ZE.
Bem, consegui resolver o problema.
Criei uma INT value_batt. Essa int é de 8 bits, ou seja, valor de 0 a 255 certo? Bom, percebi que o resistor de 2k2 do esquema original não permitia chegar ao valor de 'low battery' porque no máximo o valor da tensão só caía até 2.51V com 100% do trimpot. Então baixei o valor do resistor para 1k5 para que eu finalmente pudesse testar os valores para full batt e low batt. E finalmente cheguei ao valor de 150 que me permitiu declarar 'low batt' qualquer valor de tensão abaixo disso. Com tensão de 2.44V ainda é full bat. Já com 2.42V já é low batt. Depois foi só recolocar o valor original de 2k2 no resistor e ficar tranquilo quanto ao valor de tensão de full battery para mais de 2.5V.
Mas como sou um pentelho perfeccionista, e novato em programação e metido a besta, pensei em melhorar esse medidor de bateria de forma que pudesse ter um controle maior do real estado da bateria. Então o que fiz? Delimitei o valor de 2.42V para não mais ser battery low e sim battery half. De modo que só abaixo de um valor de value_batt de digamos, 120, fosse indicado baterry low.
No entanto deu pau. Fiz o full ser x>150, o half ser <=150 e o low <=120. Acontece que agora, quando vai a 2.42V, ele marca battery half, ok, mas quando cai mais para bem menos de 2.1v, até 1.2v, ele ao invés de marcar 'low battery', marca FULL!
Sei que deve ser um erro idiota de limites de valores, mas confesso que já tentei várias formas de escrever isso e continua não funcionando. Meu Deus, onde foi que eu errei?
Abaixo o código pra voce dar uma olhada e com certeza vai matar de primeira, mas a besta aqui ainda não achou o erro.
Quanto ao esquema, já havia postado, mas estou anexando de novo. Obrigado pela ajuda amigo.
- Código: Selecionar todos
case 4:
set_adc_channel(0);
value_batt = read_adc();
if ( ISPRESSED_KEY1 )
printf(lcd_putc,"\f");
lcd_gotoxy(3,1);
if (value_batt>150)
lcd_putc("BATTERY FULL");
if (value_batt <=150)
lcd_putc("BATTERY HALF");
if (value_batt <=120)
lcd_putc("BATTERY LOW");
break;
Você não está autorizado a ver ou baixar esse anexo.