Ir ao conteúdo
  • Cadastre-se

Problema com modulo RF no PIC - baud rate?


MatheusLPS

Posts recomendados

Olá galera do forum. estou desenvolvendo um projeto aqui onde pretendo fazer aquisição de dados via USB. Como comentei num tópico mais p trás aí.

A parte de USB está funcionando que é uma beleza! Consigo acender e apagar leds no meu circuito e ler a temperatura com um LM35. Até aí tudo bem.

O problema que preciso comunicar com outro PIC usando 1 módulo RF 433Mhz. Estou tentando usar o RS232. Nada feito. Não funciona nem a pau.

No proyeus funciona q é uma beleza. Eu coloquei 1 fio ligando o TX e o RX do outro PIC e eles conversam entre si tranquilamente. Mas no circuito montado....

Bem, vou postar os códigos tanto do transmissor quanto do Recptor. Quem sabe não aparece alguem e me dá uma luz.

Estou usando um cristal de 12Mhz. Com os fuses q eu uso, declaro q o clock é de 48Mhz. Não entendi direito. Mas desse jeito a USB está funfando perfeitamente.

Circuito. O fio simula uma conexão RF. No proteus funciona...(_(

circuitom.png

Transmissor:


#device adc=10
#define WireTX PIN_C6 // <--------- C 6
#define WireRX PIN_C7
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=2400,xmit=WireTX , rcv=WireRX ,ERRORS , STREAM=COM_A )


#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 2 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 5 //size to allocate for the rx endpoint 1 buffer



#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h> //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports



#define LED_OK PIN_B6
#define LED_FAIL PIN_B7
#define LED_ON output_high
#define LED_OFF output_low

int periodo;
int ciclo1=0;
int ciclo2=0;
int ciclo3=0;

#define modo recibe[0]
#define param1 recibe[1]
#define param2 recibe[2]
#define param3 recibe[3]
#define param4 recibe[4]
#define resultado envia[0]
#define barra send[0]
#define status send2[0]

/*=====================
A interrupção:
=======================*/

#int_timer1
void TIMER1_isr (void)
{
set_timer1(65480); //Preload do timer1

/*=====================
Testes para ciclo = 0:
=======================*/

if (ciclo1 == 0)
{
output_low (PIN_B0);
}
if (ciclo2 == 0)
{
output_low (PIN_B1);
}
if (ciclo3 == 0)
{
output_low (PIN_B2);
}

/*==============================
Já que o ciclo é diferente de 0:
================================*/
if (periodo <255)
{
If (periodo < ciclo1)
{
output_high (PIN_B0);
}
else
{
output_low (PIN_B0);
}


If (periodo < ciclo2)
{
output_high (PIN_B1);
}
else
{
output_low (PIN_B1);
}

If (periodo < ciclo3)
{
output_high (PIN_B2);
}
else
{
output_low (PIN_B2);
}

}
else if (periodo == 255)
{
output_high (PIN_B0);
output_high (PIN_B1);
output_high (PIN_B2);
periodo=0;
}
periodo++;
}

void main(void) {

int8 recibe[5]; //declaramos variables
int8 envia[2];
int8 send[1];
int8 send2[1];
int16 adc=0;

LED_OFF(LED_OK); //encendemos led rojo
LED_ON(LED_FAIL);

usb_init(); //inicializamos el USB

setup_adc_ports(AN0); //Configura canais analógico
setup_adc(ADC_CLOCK_INTERNAL); //De acordo com relógio interno.

usb_task(); //habilita periferico usb e interrupciones
usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host

LED_OFF(LED_FAIL);
LED_ON(LED_OK); //encendemos led verde

while (TRUE)
{
if(usb_enumerated()) //si el PicUSB está configurado
{
if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host
{

usb_get_packet(1, recibe, 5); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe

if (modo == 0) // Modo_Suma
{
resultado = param1 + param2; //hacemos la suma
usb_put_packet(1, envia, 2, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
}

if (modo == 1) // Modo_Carro
{
if (param1 == 0)
{
fputc('U',COM_A);
delay_ms(20);

}

if (param1 == 1)
{
fputc('R',COM_A);
delay_ms(20);

}

if (param1 == 2)
{
fputc('D',COM_A);
delay_ms(20);

}

if (param1 == 3)
{
fputc('L',COM_A);
delay_ms(20);
}

if (param1 == 4)
{
fputc ('S');
}
}

if (modo == 2) // Envio da Temperatura
{
set_adc_channel(0); //Habilitación canal0
delay_us(20);
adc = read_adc();
barra=((5*adc*100)/1024);
usb_put_packet(1, send, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
}
if (modo == 3) //Modo PWM
{
if (param1 == 0) //pwm desativado, pinos em nível baixo
{
SETUP_TIMER_1 (T1_DISABLED); //Configurar timer1 para clock iterno/8

}

if (param1 == 1) //pwm ativado
{
SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_2); //Configurar timer1 para clock iterno/8
enable_interrupts (INT_TIMER1); //Habilitar Interrupções
enable_interrupts (global);
ciclo1=param2;
ciclo2=param3;
ciclo3=param4;
}
}

if (modo == 4)
{
status=1;
usb_put_packet(1, send2, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC
}

}
}
}
}
#include <18F4550.h>

Receptor:



#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,PLL3,CPUDIV1,VREGEN
#use delay (clock = 48000000)
//------------------------------
#define WireTX PIN_C6
#define WireRX PIN_C7 //<-----
//------------------------------
#use rs232(baud=2400, xmit=WireTX, rcv=WireRX, ERRORS, STREAM=COM_A)
unsigned int8 data;
int flag=0;
//#include <lcd.c>

#define LED1 PIN_B0

#int_rda
void rd_isr(void)
{
disable_interrupts(INT_RDA); // Disable Serial Recieve Interrupt
disable_interrupts(GLOBAL); // Disable Global Interrupts

data= fgetc(COM_A);
if(data=='U')
{
flag=1;
}

if(data=='R')
{
flag=2;
}

if(data=='D')
{
flag=3;
}

if(data=='L')
{
flag=4;
}

if(data=='S')
{
flag=5;
}

enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
}

void main()
{
//lcd_init();
enable_interrupts(global);
enable_interrupts(int_rda);
output_high (PIN_D2);

for(;;)
{
Switch (flag)
{
Case 1:
{
//lcd_putc ("\fU");
output_toggle(LED1);
delay_ms (100);
break;
}

Case 2:
{
//lcd_putc ("\fR");

output_toggle(LED1);
delay_ms (100);
break;
}

Case 3:
{
//lcd_putc ("\fD");
output_toggle(LED1);
delay_ms (100);
break;
}

Case 4:
{
//lcd_putc ("\fL");
output_toggle(LED1);
delay_ms (100);
break;
}

Case 5:
{
//lcd_putc ("\fS");
output_low(LED1);
delay_ms (100);
break;
}

flag=0;
}
}
}
#include <18f4550.h>

Será a configuração dos baud rate?

Alguem tem alguma luz aí?

P.S: Assim q botar esse RF p funcionar, vou me dedicar a terminar o tutorial q prometi aqui:

Tutorial PicUSB by MatheusLPS Koala

Falou

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

O meu nome é Alvimar e sou do Espirito Santo...Venho a um certo tempo

fazendo algumas pesquisas sobre o PIC e CCS, pois de vez em quando, ajudo

alguns estudantes a estarem desenvolvendo e/ou montando alguns projetos eletrônicos

prontos da internet....

Achei seu projeto interessante e por isso decidi montar seu TCC junto com um estudante e tentar, sem modificar o código fonte,

colocar para funcionar também com o RF....Se não me engano seu TCC foi em 2010...talvez já tenha feito ou resolvido o problema...mas de qualquer forma, achei que seu problema, pelo menos naquela época,

merecia uma resposta....Ainda está em fase de teste, mas pelo menos até agora está tudo bem...

post-1019468-13884964507833_thumb.jpg

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...