Transmissor de infravermelho com pic e ardudino receber

Olá Garagistas!

Estou com um problema, estou fazendo um trabalho para meu curso de automação e não estou conseguindo resolver um problema.
Bom configurei o arduino para receber os comando de um controle remoto de tv, ok tudo funcionando e ativando as portas corretamente. O problema que acabou se tornando um desafio até para o professor:
Fazer o pic transmitir os sinais para o arduino, ou seja, fazer ele se tornar o controle remoto.
Alguém poderia me ajudar?

Exibições: 1984

Responder esta

Respostas a este tópico

Olá Senhor Rui, infelizmente aqui não funcionou. Talvez por que eu use o compilador mikroc, e não reconheceu alguns comandos, qual compilador o senhor usa? tive que fazer algumas alterações por causa dele. os problema apresentados.
- Led ligado direto, emitindo valores aleatório
- e o botão que coloquei no portB não fez nada.

Sr. RSC, bom dia,

Se o Sr.  ler no post que coloquei na terça feira,

"  vou ver se escrevo um code.

Tem algum PIC que você tem preferencia ou posso escrever para o PIC16F1847?

Mas eu escrevo em C Hi-Tech.  "

Verá que compilador que utilizei foi o HI-TECH .

Nunca usei o MickroC, e acredito que deve estar faltando algo no código que você "reescreveu",

pois conforme você pode ver na tela do analisador lógico que postei, tudo funciona.

Rui

Pois é senhor Rui, eu vi que foi no Hi- tech, até estou vendo se consigo encontrar para baixar. o senhor podia me mandar seu e-mail para eu lhe enviar o código? meu e-mail rodrigocunhars2004@yahoo.com.br

Sr. RSC,

poste aqui seu code eu eu tento identificar o que pode star faltando.

Rui

/*
Nome do Projeto: E_RC_PIC
Nome do Aquivo: E_RC_PIC.c
Dependências: htc.h
MCU: PIC16F628a
Board: N/A
Compilador Hi_Tech
IDE: MPLAB
Hardware: PIC16F628a
Escrito por: Rui Viana
Data: 08/07/2015
Uso: Didático
Desenhos N/A
Copyright @ N/A

Este programa é software livre;
e é distribuído na esperança que possa ser útil, mas SEM QUALQUER GARANTIA;
mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM.

REVISIONS: (latest entry first)
2015-07-07 - E_RC_PIC.c - First release
2015-07-08 - E_RC_PIC.c - Corrigida a sída de PORT B 3

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Descrição:

Este código para simular a emissão de um controle remoto com protocolo NEC
os valores a serem transmitidos estão nas variaveis ADDR e CMD.
Foi usado p PWM em 38.462Hz. para gerar o sinal a ser modulado.
As saídas são PORT A 0 saída sem modulação, PORT B 3, saída com modulação em 38.462Hz.
*/

//#include //Carrega a biblioteca para o microcontrolador PIC16F628A

#ifndef _XTAL_FREQ
#define _XTAL_FREQ 4000000 //Define a utilização do clock interno de 4 Mhz
#endif





//Configuracao FUSES
//__CONFIG(FOSC_INTOSCCLK & WDTE_OFF & PWRTE_OFF & BOREN_OFF & LVP_OFF & CP_OFF & CPD_OFF & MCLRE_ON);//Interno

#define PINOLED RA0_BIT // Pino ao qual o led esta ligado
#define PINOBOT0 RB0_BIT // Pino ao qual o botao esta ligado
char ADDR; // variavel para valor de endereço a transmitir
char NotADDR; // variavel para valor inverso de endereço a transmitir
char CMD; // variavel para valor de comando a transmitir
char NotCMD;
unsigned char i=0;
char CARRY; // variavel para valor inverso de comando a transmitir
// --------------------------------- header -----------------------------------
void header(void)
{
CCP1CON = 0x0C; // Configura o CCP1 como PWM mode
T2CON = 1; // habilita o timer2, para permitir o PWM
PINOLED = 1; // Acende Led em RA0 Transmite bit
delay_us(9000); // Aguarda 9 milesegundos
T2CON = 0; // Desabilita o timer2, para permitir o PWM
PINOLED = 0; // Apaga Led em RA0
CCP1CON = 0x00; // Reset PWM mode
RB3_bit = 0; // Zera saída PWM
delay_us(4500); // Aguarda 4,5 milesegundos
}
// --------------------------------- bitON -----------------------------------
void bitON(void)
{
CCP1CON = 0x0C; // Configura o CCP1 como PWM mode
T2CON = 1; // habilita o timer2, para permitir o PWM
PINOLED = 1; // Acende Led em RA0 Transmite bit
delay_us(560); // Aguarda 560 microsegundos
T2CON = 0; // Desabilita o timer2, para permitir o PWM
PINOLED = 0; // Apaga Led em RA0
CCP1CON = 0x00; // Reset PWM mode
RB3_BIT = 0; // Zera saída PWM
delay_us(560); // Aguarda 560 microsegundos
}
// --------------------------------- bitOFF -----------------------------------
void bitOFF(void)
{
CCP1CON = 0x0C; // Configura o CCP1 como PWM mode
T2CON = 1; // habilita o timer2, para permitir o PWM
PINOLED = 1; // Acende Led em RA0 Transmite bit
delay_us(560); // Aguarda 560 microsegundos
T2CON = 0; // Desabilita o timer2, para permitir o PWM
PINOLED = 0; // Apaga Led em RA0
CCP1CON = 0x00; // Reset PWM mode
RB3_BIT = 0; // Zera saída PWM
delay_us(1690); // Aguarda 1690 microsegundos`
}
// --------------------------------- bitStop -----------------------------------
void bitStop(void)
{
CCP1CON = 0x0C; // Configura o CCP1 como PWM mode
T2CON = 1; // habilita o timer2, para permitir o PWM
PINOLED = 1; // Acende Led em RA0 Transmite bit
delay_us(560); // Aguarda 560 microsegundos
T2CON = 0; // Desabilita o timer2, para permitir o PWM
CCP1CON = 0x00; // Reset PWM mode
RB3_BIT = 0; // Zera saída PWM
PINOLED = 0; // Apaga Led em RA0
}
// --------------------------------- InitPWM -----------------------------------
void InitPWM(void)
{
T2CON = 1; // habilita o timer2, para permitir o PWM
PR2 = 0x19; // Configura o periodo em TMR2
T2CON = 0x00; // Set prescaler para 1 para a frequencia de 38.462Khz
CCPR1L = 0x0D; // Duty Cycle 50%
}
// --------------------------------- void -----------------------------------
void main(void)
{
CMCON = 0x07;
TRISB = 0x02; // Pino RB1 Entrada o restante Saída
TRISA = 0x00; // Todos pinos saídas
PINOBOT0 = 0;
INTCON = 0B00000000; // força pull up
// Set pino RB0 +5v
// nRBPU = 0; // Pull-up no PORTB
InitPWM(); // Inicializa os regs de PWM
PORTB = 0; // Zera o PORT B
while (1)
{
ADDR = 0x25; // Byte de teste para address Protocolo NEC
NotADDR = ADDR ^ 0xFF; // Byte de teste para inverso do address Protocolo NEC
CMD = 0x38; // Byte de teste para data Protocolo NEC
NotCMD = CMD ^ 0xFF; // Byte de teste para inverso do data Protocolo NEC

TMR0 = ADDR; // só pra diag
TMR0 = NotADDR; // só pra diag
TMR0 = CMD; // só pra diag
TMR0 = NotCMD; // só pra diag

header(); // Trasmite o Header NEC



for (i = 0; i<8; i++) // Faça 8 vezes Transmite o Endereço
{
ADDR = ADDR1; // Desloque o byte a ser transmitido
if (CARRY ==0 )
{ // Se era zero
bitOFF();
} // Transmite bit Zero
else // Se não era zero
bitON(); // Transmite bit Um
}
for (i = 0; i<8; i++) // Faça 8 vezes Transmite o complemento de Endereço
{
NotADDR = NotADDR1;
if (CARRY ==0 ) // Se era zero
bitOFF(); // Transmite bit Zero
else // Se não era zero
bitON(); // Transmite bit U
}
for (i = 0; i<8; i++) // Faça 8 vezes Transmite o Comando
{
CMD = CMD1;
if (CARRY ==0 ) // Se era zero
bitOFF(); // Transmite bit Zero
else // Se não era zero
bitON(); // Transmite bit U
}
for (i = 0; i<8; i++) // Faça 8 vezes Transmite o complemento de Comando
{
NotCMD = NotCMD1;
if (CARRY ==0 ) // Se era zero
bitOFF(); // Transmite bit Zero
else // Se não era zero
bitON(); // Transmite bit U
}
bitStop(); // Transmite bit de parada

delay_ms(100); // Para Diag
}
}

Sr. RSC,
ao postar code,dê preferencia de postar ou como arquivos ou postar em sites do tipo
www.pastebin.com,
pois postando direto na areá de digitação, perde-se a identição e pode também perder caracteres.


Rui

Sr. RSC,

o Sr. tirou (Comentou) as configurações do PIC.

Como não conheço o MikroC , não sei como elas são definidas, mas em Hi-Tech é imperativo que tenha estas configurações.

Rui

as configurações foram feitas direto no mikroc, pois como dava erro tive que comentar e colocar direto no mikroc

RSC,

como eu disse anteriormente, eu não tenho o MikroC e nunca utilizei ele.

Mostre o code que fiz, e também as telas que postei, ao seu Prof. e discuta com ele

como adaptar o código de Hi-Tech para MikroC.

O importante é manter o protocolo.

Queimando um  pouco de neurônio, tenho certeza que funcionará.

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço