Comando Switch

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Comando Switch

Mensagempor franca-junior » 21 Jul 2008 22:37

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;
      }
   }
}
franca-junior
 
Mensagens: 4
Registrado em: 13 Jul 2008 00:35

Mensagempor Msconfig » 21 Jul 2008 22:51

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.
Avatar do usuário
Msconfig
Byte
 
Mensagens: 116
Registrado em: 18 Nov 2006 16:11

Mensagempor Maurício » 21 Jul 2008 23:03

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
Editado pela última vez por Maurício em 21 Jul 2008 23:07, em um total de 1 vez.
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor franca-junior » 21 Jul 2008 23:06

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);
franca-junior
 
Mensagens: 4
Registrado em: 13 Jul 2008 00:35

Mensagempor Msconfig » 22 Jul 2008 00:16

Bom, recomendo usar fast_io:
#use fast_io(a)

e configurar o TRIS:

set_tris_a(0b11110000);

Assim nao queima a porta.
Avatar do usuário
Msconfig
Byte
 
Mensagens: 116
Registrado em: 18 Nov 2006 16:11

Mensagempor andre_luis » 22 Jul 2008 08:33

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.
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x