Página 1 de 1

Comando Switch

MensagemEnviado: 21 Jul 2008 22:37
por franca-junior
Opa, to tentando fazer uma rotina utilizando o comando switch, que fizesse a seguinte função:
Ao precionar a chave 1 acende led1, caso precione a chave 2 acenda o led 2, etc...
To usando o seguinte código retirado do livro do Fábio Pereira mas não acontece nada. Oque eu tenho que fazer para executar a função.? Pesquisei alguns topicos mas não encontrei nenhum que me ajudasse.
Agradeço a atenção abraço;

Código: Selecionar todos
#include <16F628.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,PUT,NOBROWNOUT,NOLVP
 
main()
{
 //  setup_adc_ports (no_analogs); tirei essa linha pq com ela o CCS não compila

    while (true)
  {
      output_a(0);
      switch (input_a())
      {
    case     0 : output_high(pin_a0);
             break;
    case     1 : output_high(pin_a1);
             break;
    case    2 : output_high(pin_a2);
             break;
      }
   }
}

MensagemEnviado: 21 Jul 2008 22:51
por Msconfig
setup_adc_ports (no_analogs); Não funciona por que o 16F628 não tem ADC.

Algumas coisas que vc deve ver:

Vc lê e escreve na mesma porta, aonde e como estão ligadas as chaves?
Tem pull-up ou pull-down?
Kd o debounce das teclas?
Pq não usa o oscilador interno?
Pq usa o MCLR externo?
Kd o comando para apagar os Leds?
Kd o default do Switch?

Etc...

Ah, output_a(0); com alguma chave pressionada e sem limitação de corrente pode queimar teu PIC.

MensagemEnviado: 21 Jul 2008 23:03
por Maurício
Switch com bit?
Isso daí não vai funcionar!
Switch é para inteiros.
Suas chaves estão todas em um mesmo port?
Elas são acionadas com zero ou com um?

[]'s

MensagemEnviado: 21 Jul 2008 23:06
por franca-junior
Escrevo na mesma porta pq o esquema ta o seguinte:
RA0 - LED1
RA1 - LED2
RA2 - LED3
RA3 - LED4
RA4 - CHAVE1
RA5 - CHAVE2 / RESET MCLR
RA6 - CHAVE 3
RA7 - CHAVE4

As perguntas 2,3,4 e 5 não vou saber te responder, não coloquei o comando para apagar os leds pq eles nem acendem. Tirei o default pq ai soh ficava um led aceso direto:


Código: Selecionar todos
default :
   output_high(pin_a3);

MensagemEnviado: 22 Jul 2008 00:16
por Msconfig
Bom, recomendo usar fast_io:
#use fast_io(a)

e configurar o TRIS:

set_tris_a(0b11110000);

Assim nao queima a porta.

MensagemEnviado: 22 Jul 2008 08:33
por andre_luis
Muito estranho :
Voce sequencialmente apaga todos os bits da porta e em seguida o aciona :
Código: Selecionar todos
      output_a(0);


Código: Selecionar todos
    output_high(pin_an);


Tá faltando alguma coisa.
Eu colocaria esse output_a(0) antes do loop infinito.
Observe que essa sua rotina apenas realiza o acendimento. Ela não trata do apagamento no caso da tecla ter sido solta.