Página 1 de 1

Recepcao RF

MensagemEnviado: 21 Jul 2009 09:46
por Alesandro F Zagui
Ola a todos

Estou desenvolvendo um equipamento com controle RGB. Criei um PWM para cada led com o TMR0. Até ai funciona.

O problema é que a cor apresentada vai ser definida pelo usuario atravez de um controle remoto via RF.

Entao tenho que ficar parando o PWM para fazer a leitura do controle RF.
Isso faz com que os leds RGB fiquem piscando.

Estou utilizando dois 16f628, um no controle e outro no receptor.

Pensei em fazer a comunicacao entre os dois pela Usart. Alguem ja fez?

MensagemEnviado: 21 Jul 2009 12:07
por Djalma Toledo Rodrigues
Como a comunicação é entre dois uC , apenas em um sentido e estão bem próximos nem é necessário USART, I²C etc.
Mas, se você usar Interrupção não da para usar apenas um PIC ?
.

MensagemEnviado: 21 Jul 2009 13:14
por Alesandro F Zagui
Quando digo que estou usando 2 uC, um é o do controle que o usuario selecionara a cor, e o outro é o quem controla o RGB.

Gostaria de saber se alguem ja usou usart pra fazer comunicao entre dois uC por RF? Entendeu?

MensagemEnviado: 21 Jul 2009 15:12
por fabim
ÂLESÂNDRO.
Seguinte.
Mesmo que seja por RF, o pic que esta controlando o rgb por pwm, vai ter que ficar parando para tratar os bytes recebidos e ver se estão conforme o esperado. pois estes módulos tem um ruido enorme.
O ideal é você colocar um coprocessador, tipo um 12F629 pra ficar olhando o receptor e tratando os dados, e quando chegar coisa certa ele da um toque para o processador que esta cuidando do RGB e manda os dados bem rapidão pela serial emulada, ja no processador rgb os bytes vão chegar certinho, basta pegar e tratar conforme o nocessário.

fabim

MensagemEnviado: 21 Jul 2009 16:11
por Ander_sil
Alesandro o ideal é voce usar PWM por hardware, ai não da pau.

Pega um PIC com 3 canal de PWM ou dois canal e o terceiro led usa a saida do timer.

Ou então usar um CI Drive tipo o PCA9633 4 canal PWM ou PCA9634 8 canal.

http://www.standardics.nxp.com/products ... ca9633.pdf

Fazer o PWM por software vai dar esse problema a não ser que seja bem otimizado o software pra ficar imperceptivel o piscar do led ou seguir o conselho do fabim.

at.

MensagemEnviado: 21 Jul 2009 17:04
por Alesandro F Zagui
Ander, gostei desse PCA9633, vou ver se encontro aqui na minha cidade pra comprar.

Fabim, caso não de certo o PCA9633, vou acabar usando dois 12F629, um pra receber o sinal e o outro pra controlar o RGB.

Obrigado pela ajuda de voces!!!!

Posto depois o resultado.

MensagemEnviado: 21 Jul 2009 17:34
por MOR_AL
Olá¡ Alesandro F Zagui.

Tem uma outra opção.

1) Usa três bytes, um para cada cor. Cada byte conterá um valor compreendido entre 0 e 32, por exemplo. Faz T = 32 e Ton variando de 0 a 32.
Para Ton = 0, corresponde a Ton / T = 0 / 32 = 0.
Para Ton = 32 corresponde a Ton / T = 32 / 32 = 1.
Com isso você terá até 33 valores de intensidade para as cores. Considero uma boa quantidade. Acho que mal dá para perceber a alteração de um valor para o seu vizinho.
2) Crie um timer com interrupção (TIMER0, por exemplo), com cerca de 30ms, e um contador de ciclos. A cada interrupção do TIMER0, um ciclo é incrementado no contador. E a cada interrupção do TIMER0, você atualiza as cores. Como? Se o contador estiver em 15, por exemplo, e o valor do R for menor, ou igual a 15, então você desliga o led R. Caso contrário, você mantém o led aceso. Faça o mesmo para as outras cores. Quando o contador de ciclos alcançar o valor 33, ele deverá ser zerado, para um novo ciclo de 0 a 32.
3) Faça a informação do seu receptor (RF, Infravermelho, etc.) acionar uma interrupção. Esta possuirá maior prioridade que a do Timer0. Ela tem que tratar a decodificação da tecla em tempo real, para não perder alguma informação da tecla.
Esta interrupção irá atualizar os bytes de cor (um dos mencionados no item 1).
MOR_AL

MensagemEnviado: 21 Jul 2009 18:26
por Alesandro F Zagui
MOR_AL

Eu tinha feito o contrario disso, os clicos de RGB geram a interrupção TMR0, e main fica monitorando a entrada de sinal, cada vez que existe uma possibilidade de ser o sinal, ele pausa as interrupcoes do RGB.

Vou tentar inverter entao, da forma que voce disse, vou colocar o sinal de RF na interrupcao externa e vou deixar o main controlar o RGB, usando o flag T0IF para base de tempo. Seria isso mesmo, né?

Meu PWM esta do mesmo jeito que voce descreveu no passo 1.

Obrigado

MensagemEnviado: 21 Jul 2009 20:55
por egipts
Uma opção simples e acredito que mais barata que o PCA seria usar um par encoder/decoder para fazer a comunicação sem fio, pode ser via RF ou IR. Dá uma olhada no site da Holtek.com.tw e da Princeton.com.tw.

Ou googleia HT12D e HT12F ou PT2260/PT2270.

Abraço,
Osiris Torres.

MensagemEnviado: 21 Jul 2009 20:58
por egipts
Particularmente, eu utilizaria um encoder no transmissor (HT12D, 6026 ou 6P20) e um uC com 3 PWM por hardware e rotina de decodificação ativada pelo pino do timer.

Abraço, egipts.

MensagemEnviado: 10 Ago 2009 10:36
por Alesandro F Zagui
Postando um retorno.

Consegui um tempinho esse final de semana para concluir esse projeto.

O funcionamento ficou da seguinte forma.

Crie o protocolo de comunicação RF usando como base de tempo o TMR2.
Coloquei a entrada de RF para gerar uma Interrupção Externa.
E usei o TMR0 como base de tempo para o RGB, mas sem gerar interrupcao, apenas monitorando o flag T0IF no MAIN.

Dessa forma o RGB nao ficou variando e consigui confiabilidade na comunicação RF.

Obrigado a todos pela ajuda.

Abraço.