Problema com um código para pic16f777 interruptor de 4 vias

T

Tom2

Guest
Eu escrevi um código para um switch de 4 vias como é mostrado na imagem below.The problema é que o circuito não é qualquer um working.Is que sabem o que é o problema?? (Eu usei pcm compilador e pic16f777 microcontrolador) o código é : if ((input (PIN_A3) == 0)) {/ / se A3 é setup_timer_2 baixa (T2_DIV_BY_1, 255,1); output_high (PIN_D2);} else if (((input (PIN_A3) == 0)) && (input (PIN_A4) == 0)) {/ / se A_4 é baixa setup_timer_2 (T2_DIV_BY_4, 255,1); output_high (PIN_D3);} else if (((input (PIN_A3) == 0) && (input (PIN_A4 ) == 0) && (input (PIN_A5) == 0))) {/ / se A_5 é baixa setup_timer_2 (T2_DIV_BY_16, 255,1); output_high (PIN_C4);} else if (((input (PIN_E0) == 0) && (input (PIN_A3) == 0) && (input (PIN_A4) == 0) && (input (PIN_A5) == 0))) {/ / se setup_timer_2 (T2_DISABLED, 255,1);}
 
Primeiro, eu acho o circuito um pouco estranho. Saída 1 se a entrada 1, saída 2 se input1 e entrada 2 e assim por diante. De qualquer forma, por qualquer saída para um valor elevado, o pino 1 deve ser elevado. Mas isto significa que apenas a primeira parte do código é executado eo programa salta para baixo para o fim das cláusulas se, então, se, e mais. Portanto, a lógica está com defeito. Teste cada caso seqüencialmente com coisas if, else if não. Além disso, se todas as entradas são baixas, em seguida, todas as cláusulas são verdadeiras e será executado. Todos os conditons deve ser único para cada cláusula. Como se o pino 1 do A, mais se o pino 2 do B e assim por diante. Neste caso, a cláusula 1 pino teria a prioridade mais alta. Você poderia verificar para se certificar de que um e apenas um pino foi colocado e assim por diante antes de executar qualquer ação, mas que é até você. Além disso, são as chaves dip debounced? executar as entradas através de um chip CMOS de buffer (os portões de entrada devem ser CMOS) e usar os valores apropriados para o resistor e capacitor (é apenas um filtro). Não me lembro dos valores, basta mudar google debouncing, algo deve vir para cima. Ou simplesmente usar o delay_ms () declaração para checar se o pino ainda é baixa. Também é só usar if (input (PIN_E0), esqueça o == 0 coisas, não é necessayr desde que a função de entrada retorna um 1 ou um 0 (que é boolean) já. Espero que ajude.
 
Por favor verifique se as portas são configurados como E / S digitais
 

Welcome to EDABoard.com

Sponsor

Back
Top