|
|
View previous topic :: View next topic |
Author |
Message |
attabros
Joined: 28 Jul 2008 Posts: 35
|
Need help in IR receiver |
Posted: Thu Nov 20, 2008 6:36 am |
|
|
Hi Everyone,
I have made a sample program for IR transmitter
Code: |
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void main()
{
int y;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_ccp1(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// TODO: USER CODE!!
while(TRUE)
{
y=1;
{
setup_timer_2(T2_DIV_BY_1,131,1);
set_pwm1_duty(264);
delay_ms(1000);
}
y=0;
{
setup_timer_2(T2_DIV_BY_1,131,1);
set_pwm1_duty(264);
delay_ms(1000);
}
{
set_pwm1_duty(0);
delay_ms(1000);
}
}
}
|
But slightly confused on how I will receive those bits on the receiver side.
I have connected the output pin of receiver to PIC B0 pin. If I want to
glow two leds when y=1 occur D0 will turn on an LED & when y=0 occur D1 will turn another LED. Please help me to generate the receiver code.
THANKS |
|
|
attabros
Joined: 28 Jul 2008 Posts: 35
|
|
Posted: Fri Nov 21, 2008 6:30 am |
|
|
I have studied some projects is it necessary to use interrupt
on the reciever side.
So how i will make a reciever code for the above transmitter. |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Fri Nov 21, 2008 9:59 pm |
|
|
Quote: | y=1;
{
setup_timer_2(T2_DIV_BY_1,131,1);
set_pwm1_duty(264);
delay_ms(1000);
}
y=0;
{
setup_timer_2(T2_DIV_BY_1,131,1);
set_pwm1_duty(264);
delay_ms(1000);
}
{
set_pwm1_duty(0);
delay_ms(1000);
} | I don't get how you are encoding a y=1 and y=0. Anyway, if all you need to do do is turn ON or OFF two LEDs based based on the value of 'y', you don't need to use interrupts. I suppose you are using a TSOP at the receiving end? When the TSOP detects a modulated pulse stream it switches its output low. All you need to do is run a loop on your receiver microcontroller checking for the state of the TSOP pin:
Code: | while(1)
{ //TSOP output is active-low; idle-high
if(input(TSOP)) //no pulses are detected by TSOP
{
output_high(LED0);
output_low(LED1);
}
else
{
output_low(LED0);
output_high(LED1);
}
}
This is going to keep your processor really busy. So if the only thing you want to is toggle LEDs, this is fine. Else, you should look at interrupts.
Rohit
|
|
|
|
attabros
Joined: 28 Jul 2008 Posts: 35
|
|
Posted: Mon Nov 24, 2008 7:02 am |
|
|
Thanks for your reply.
It works fine what if i use an interrupt for the same senario,
what i have studied iterrupt function is used before main function,
but i have no idea how i will use it as well as i need to transfer binary
data just for a practice let suppose 0 to 9 plz have a look
Code: |
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void main()
{
int y;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_ccp1(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// TODO: USER CODE!!
while(TRUE)
{
for(y=0;y<10;y++)
{
setup_timer_2(T2_DIV_BY_1,131,1);
set_pwm1_duty(264);
delay_ms(1000);
}
{
set_pwm1_duty(0);
delay_ms(1000);
}}}
|
will it work fine n how i will read this on the reciever as i m using TSOP
if i connect three LEDs on D0, D1 & D2 to show binary data. |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Mon Nov 24, 2008 7:36 am |
|
|
To send any sort of data you would need to use a protocol. A protocol is a set of 'rules' that are common to the transmitter and receiver. The 'rules' are used to encode and decode the raw data into something meaningful. It would be very difficult to send data other than just '1' and '0' without using a protocol.
The protocol can be a simple one like the generic RS232 (EIA/TIA 232) based serial protocol, or something more complex, like IrDA. The protocol is used to ensure that the receiver gets only the data meant for it - nothing else. Some protocols also have the additional facility of checking for/ensuring data integrity.
Common protocols include the Sony SIRC, Phillips RC5, NEC, JVC, etc. The protocol defines timings of the IR pulse lengths, whether or not Manchester encoding is used, etc.
Most protocols have a 'preamble' or starting sequence; a device address; the actual data; and a stop sequence. When this data is received by the receiver (with the correct address), the preamble, address, and stop sequence are stripped, and the data is extracted out.
Please have a look at http://www.sbprojects.com/knowledge/ir/ir.htm . It has a lot of useful information.
Rohit |
|
|
attabros
Joined: 28 Jul 2008 Posts: 35
|
|
Posted: Sat Nov 29, 2008 2:17 am |
|
|
While Transmitting & Receiving data using RS-232 at both sides from one microcontroller to another using IR as a communication medium between controllers what baud rate should I select for better results ?
THANKS |
|
|
Rohit de Sa
Joined: 09 Nov 2007 Posts: 282 Location: India
|
|
Posted: Sat Nov 29, 2008 2:44 am |
|
|
Speed depends entirely on what hardware you use. You still haven't stated what IR receiver you are using. Anyway, with the TSOP1738 I would not recommend going over 2400 baud, though I have sucessfully tried 4800. At this speed I start to lose data only at a range of 4 feet and over. At 9600 baud there is almost zero data integrity. This is in accordance with the TSOP's datasheet, which states that at least 10 cycles at 38kHz are necessary for the TSOP to detect an IR pulse.
Rohit |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|