Pessoal, finalmente consegui colocar essa tranqueira prá funcionar, e o legal é que foi do jeito que eu comentei no post anterior, o mesmo algoritimo que parece funcionar muito bem para qualquer resistência no HT6P20B (testei umas 4 bem diferentes e todas mantiveram o mesmo funcionamento no bichinho, porem não está funcionando corretamente "ainda"...
O que acontece é o seguinte, para fazer o teste se estava funcionando corretamente resolvi só ler os botões e acender leds, daí depois eu trato a sequencia gravando o número do CI e tudo mais, para isso eu usei o comando shift_right(&codigo, 4, valor_do_bit); que insere bit a bit numa variável de 32 bits (int32) deslocando-os para a direita.
Depois eu pego o MSB desta variável onde estará o Anti-code + valor dos botões + pedaço da sequencia de identificação do CI.
O problema é que quando eu aperto o botão D0 e seguro ele acende o led, apaga o led, derrepente acende o outro led mantendo o anterior aceso também, daí acende só o segundo e depois apaga os dois, no mínimo eu achei bizarro pois não entendi porque faz isso, pior que o D1 funciona certinho, se eu seguro ele precionado acede o led e apaga, se eu precionar os dois botões acende e apagam os dois leds, ou seja, ele funciona perfeitamente um botão e apertando os dois, o outro botão têm um comportamento maluco, pior que eu já tentei entender o pq disso e não cheguei a uma conclusão, a única coisa que me passou na cabeça é a tal transição lógica de 01 para 10, mesmo assim acho que não têm nada a ver, sei lá, se alguém puder me ajudar o trecho do código que faz essa bagunça está citado abaixo... (pior é que o anti-code ele está lendo direitinho, se eu mudo essa sequencia ele não funciona e sempre para ele acender um led alem da informação do botão já lê o anti-code, se não bater ele nem acende... (Lembrando que essa é uma rotina de teste, a definitinha vai armazenar os códigos, compará-los e validá-los ou não...
dado = (valor_botao & 0b11111100); // parte "bruta" do código e
// elimino quem eu não vou precisar
if(dado==0b10101000) // esse é o botão 10 (fica bagunçado quando)
{
led_red=!led_red;
delay_ms(1000);
}
else
{
// esse botão abaixo é o botão 01, se eu retirá-lo do programa o outro botão funciona normalmente, se eu deixo ele aqui o outro fica bagunçado, coisa de louco...
if(dado==0b10100100)
{
led_green=!led_green;
delay_ms(1000);
}
else
{
if(dado==0b10101100) // 11 quando eu preciono os dois botões, funciona direitinho tb...
{
led_green=!led_green;
delay_ms(1);
led_red=!led_red;
delay_ms(1000);
}
}
}
enable_interrupts(global);
conta_bit=24;
Bom, é só esse trecho que está me dando problema, quem puder me ajudar serei grato, muito obrigado!!!