Leitura de um botão antes do main (rotina principal)

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Leitura de um botão antes do main (rotina principal)

Mensagempor fabio_pic » 12 Mar 2009 20:11

Senhores,

Preciso que o PIC faça uma configuração de USART através de um botão antes que o microcontrolador entre na rotina de main.
Estou tentando usar o #IF mas tá dando erro no compilador (CCS). Parece que não dá pra fazer.... Alguém tem alguma idéia de como se faz isso?

#include <16F877A>
#fuses hs, nolvp, etc...
#define BOTAO PIN_C3

#if (input(BOTAO))
{
use rs232 (baud=[b]9600[/b],xmit=pin_c6,rcv=pin_c7)
}
#else
{
use rs232 (baud=[b]115200[/b],xmit=pin_c6,rcv=pin_c7)
}
#endif

void main (void)
{
código qualquer;
}

Abraços,
Fábio.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor tcpipchip » 12 Mar 2009 23:38

Nao funciona pq sao diretivas do compilador.

Faz o seguinte, mexe direto nos registradores para configuracao de BAUD...

TCPIPCHIP
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor Jorge_Francisco » 13 Mar 2009 09:24

Não lembro mais do CCS, mas deve ter uma função parecida com isso setBaudRate.

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor msamsoniuk » 13 Mar 2009 10:39

nao tem como funcionar, pq input(BOTAO) eh um resultado obtido em tempo de execucao, mas o #if roda em tempo de compilacao (eh apenas uma macro de pre-processador C).

como o tcpipchip disse, o maximo que vc pode fazer eh iniciar os parametros estaticamente, mas tambem nao vai servir pq vc quer uma inicializacao condicional, entao nao tem jeito, vc tem que fazer um if() normal dentro de main.

tem algum motivo especial para nao ser em main() ?
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor tcpipchip » 13 Mar 2009 13:11

http://www.micromagicsystems.com/#/picbaud/4523812801

Escreve entao nos registros...

TCPIPCHIP
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!

Mensagempor Andre_Cruz » 13 Mar 2009 15:22

fabio_pic

Programo em C mas com o hitech, não sei se no CCS é a mesma coisa, mas vou tentar explicar.

Você quer alterar a configuração da USART se caso um botão, for pressionado na inicialização do PIC.

Primeiro para que você possa usar o IF, comando de seleção você deve configurar o pino em que esta o botão, como entrada, senão o if será sempre falso.

Antes do main, acredito que seje meio dificil, você pode fazer assim que entrar no main, configurar o pino do botão como entrada, e logo em seguida fazer um if para selecionar entre as duas configuraçaões da USART.

Abraço
Espero ter ajudado a você ter uma idéia de como solucionar seu problema.

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor Jorge_Francisco » 13 Mar 2009 15:52

Pois é, só quando entrar no main mesmo, fazendo um teste do botão e logo em seguida usando uma função para setar o Baud, ou indo direto nos registros. Só vejo um problema nisto, a pessoa terá que estar pressionando o botão quando o equipamento for ligado. Não seria melhor criar uma rotina, dentro de um loop?E dentro deste loop também estaria o resto do código?

Vlw
Avatar do usuário
Jorge_Francisco
Dword
 
Mensagens: 1009
Registrado em: 12 Out 2006 09:53
Localização: Rio de Janeiro

Mensagempor Andre_Cruz » 13 Mar 2009 16:05

Jorge_Francisco

Pelo que entendi, era isso que o fabio_pic precisa.

Logo na inicialização do PIC, ler o estado desse botão e alterar a configuração da USART.

Se ele precisar de testar sempre, ele pode colocar esse if dentro de uma interrupção, ou dentro de um loop, como você disse.

Se ele nos dar mais detalhes do projeto dele, e algoritmo fica mais facil.

Abraço

André
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor fabio_pic » 13 Mar 2009 22:56

Senhores,

Primeiramente gostaria de agradecer as respostas.

O problema é justamente esse. Se a "setagem" do baud rate é feito nas diretrizes (em tempo de compilação), ou seja, antes da inicialização do PIC, como eu posso alterar depois?

Pensei em fazer essa manobra pois ainda não consegui entender o processo de alteração do baud de alguns dispositivos por comando. Explico.
Exemplo: Tenho um dispositivo que tem a taxa padrão é 9600 mas o sistema deve trabalhar a 115200. Este dispositivo tem comando para alterar a taxa de 9600 para 115200 (ou outras taxas). Até aí tudo bem.

Então eu tenho um sistema que está a 115200 e um dispositivo a 9600.
A pergunta é. Como enviar um comando para o dispositivo mudar para 115200 se o sistema está e 9600. A única resposta que encontrei é: alterar a taxa do sistema (PIC) de forma temporária. Entenderam?

Realmente acho isso bem estranho.

Abraços a todos,
Fábio.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor buiz » 14 Mar 2009 14:17

Não sei se entendi bem a aplicação que vc quer, mas no CCS seria +/- assim:



Código: Selecionar todos
#USE rs232(BAUD=9600, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7, BITS=8, STREAM=COM1)

#USE rs232(BAUD=115200, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7, BITS=8, STREAM=COM2)



main()
{

if (input(BOTAO)) fputc(VAR,com1); // envia pela com1 a 9600

if(!input(BOTAO)) fputc(VAR,com2); // envia pela com2 a 115200

}



Att.

Buiz.
Avatar do usuário
buiz
Byte
 
Mensagens: 165
Registrado em: 20 Out 2006 14:59
Localização: Cachoeira do Sul - RS

Mensagempor fabio_pic » 14 Mar 2009 16:10

buiz,

Preciso que o PIC fale com dois dispositivos a 115200 mas um deles tem a taxa padrão em 9600. Este de 9600 posso mudar para 115200 através de comando AT mas para isso o PIC deve estar a 9600 primeiro para que depois do camando dado mude para 115200.

A sua dica resolverá meus problemas. Irei testar o mais rápido possível.

Obrigado,
Fábio.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor Renie » 15 Mar 2009 02:24

Olá Fábio,

Para conectar em uma linha sem padrão de Baud, apesar de não ser
muito complicado, todos os dispositivos precisam estar preparados para
tal atuação!


O método usado desde a pré-historia dos modems, era ir testando a
conexão desde a taxa mínima até a máxima!

[]'s
Renie
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

Mensagempor fabio_pic » 15 Mar 2009 03:03

Pois é Renie,

Isso é realmente estranho. Só que estou receoso em fazer o teste de baud pois acho que com isso travei um módulo GPRS pois ele tem o baud inicial padrão em 115200 e tentei um comunicação a 9600.

Ainda espero achar a resposta para a questão da troca de baud por comando AT.

Obrigado,
Fábio.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor fabio_pic » 15 Mar 2009 03:30

buiz,

Inseri as linhas que você sugeriu no código e, apesar de não apresentar erros de compilação, o PIC transmitiu a 115200 independente do estado do botão.
fabio_pic
Nibble
 
Mensagens: 81
Registrado em: 03 Set 2007 09:04
Localização: Rio de Janeiro

Mensagempor Renie » 15 Mar 2009 03:39

Olá Fábio,


Se estiver usando um botão mesmo, a chance de erro é talvez uns 80%!!!!!!

Se fosse uma chave definida antes de ligar o circuito era outra coisa
( mais parecido com seu post inicial ).

Ler botão, precisa de rotinas específicas para debounce!

[]'s
Renie
Renie
Word
 
Mensagens: 732
Registrado em: 11 Out 2006 22:35
Localização: RJ - Niterói - Brasil

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

cron

x