View previous topic :: View next topic |
Author |
Message |
Guest
|
Infrared |
Posted: Thu Jan 27, 2005 3:58 pm |
|
|
I am trying to talk between 2 PIC (PIC16F877) through infrared. Can I use the USART port build-in with the PIC to communicate with IR?
My connection is:
Xmitr-------------Receiver
PIC1 -------------PIC2
TX-RC6-----------RX-RC7
I use the Panasonic PNA4602M as the receiver and use the TSAL6100 IRLED (240 ohm current limit resistor) as the xmitr with 38Khz PWM from RC2.
Anyone has a sample code to send out serial data(ADC in ch0) from the Xmitr and a sample code to receive the data and display it in PORTD (8 LEDs in PORTD).
I got the PWM, Duty Cycle, ADC routing working fine. I can talk it to a PC with a Max232, but can not talk to another PIC.
Please help...
Thanks |
|
|
libor
Joined: 14 Dec 2004 Posts: 288 Location: Hungary
|
|
Posted: Thu Jan 27, 2005 5:14 pm |
|
|
What do you mean by you got the PWM and duty cycle working fine?
Using the PWM in the PIC you have to make a carrier frequency of 38kHz on the LED that can be switched on/off to make 38KHz square wave (with a constant duty cycle of 50%) bursts of various length in time.
What do you mean you can talk to a PC? you mean the PC serial port? a serial port requires no carrier frequency of 38kHz. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
Re: Infrared |
Posted: Thu Jan 27, 2005 5:40 pm |
|
|
Anonymous wrote: | I am trying to talk between 2 PIC (PIC16F877) through infrared. Can I use the USART port build-in with the PIC to communicate with IR?
My connection is:
Xmitr-------------Receiver
PIC1 -------------PIC2
TX-RC6-----------RX-RC7
I use the Panasonic PNA4602M as the receiver and use the TSAL6100 IRLED (240 ohm current limit resistor) as the xmitr with 38Khz PWM from RC2.
Anyone has a sample code to send out serial data(ADC in ch0) from the Xmitr and a sample code to receive the data and display it in PORTD (8 LEDs in PORTD).
I got the PWM, Duty Cycle, ADC routing working fine. I can talk it to a PC with a Max232, but can not talk to another PIC.
Please help...
Thanks |
Then the problem sounds like it is with the PIC receive routine. Post your code. |
|
|
Guest
|
infrared ::: PIC to PIC communication |
Posted: Thu Jan 27, 2005 8:55 pm |
|
|
Here is the code
RECEIVER CODE:
Code: | // This is the receiver code ////
//
//
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=1200, xmit=PIN_C6, rcv=PIN_C7)
main()
{
unsigned c;
set_tris_d(0x00);
output_d(0x00);
while(1)
{
c=getc();
output_d(c);
}
}
|
Here is the Transmitter code:
Code: | //
// Use a 20Mhz crystal
//
// Connection as follow:
// Config. TX pin to B1
// Connected the Anode of IRLED to B1(data pin), Cathode of IRLED connected to a 240 Ohm resistor
// as current limit resistor, the other end of the resistor connected to C2 which
// is PWM pin (38Khz PWM).
#include <16f877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=1200, xmit=PIN_b1)
main()
{
unsigned c;
output_low(pin_a5); // to turn on LED indicate pwr is applied
output_low(PIN_B1); //Reset pin b1
output_low(PIN_C2); // Set CCP1 output low
setup_ccp1(CCP_PWM); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_1, 130, 1); // setup for 38khz base on 20 Mhz crystal
set_pwm1_duty(65); // 50% duty cycle (PR2 = 65 )
setup_adc_ports( ALL_ANALOG ); // Setup ADC converstion
setup_adc( ADC_CLOCK_INTERNAL );
while(1)
{
set_adc_channel( 0 ); // Use channel 0
delay_ms(20);
c = read_adc();
delay_ms(20);
printf("%u",c); // Send data out
}
}
|
|
|
|
Guest
|
|
Posted: Thu Jan 27, 2005 9:08 pm |
|
|
Yes, the transmitter can send data wirelessly and I have the right data display in the hyperterminal.
What I have is a demo 2 plus board which build-in with the max232 converter to PC RS 232.
The Panasonic receiver module pin out as follow
Receiver
Connection as follow:
/---------\
| --------- |
| --------- |
------------
| | |
| | |
/ | \
1 2 3
out Gnd 5V
Connect Output pin to( pin RC6 on demo 2 plus brd) which is Max232 Tin 1. When I open the hyperterminal, I got the right data display. I can't get it to talk to another PIC. |
|
|
libor
Joined: 14 Dec 2004 Posts: 288 Location: Hungary
|
|
Posted: Fri Jan 28, 2005 4:09 am |
|
|
Quote: | Connect th Panasonic's Output pin to( pin RC6 on demo 2 plus brd) |
I suppose it is just a typo in your post (would be too easy :-): the PICs receive pin is the RC7 rather than the RC6. |
|
|
Guest
|
Infrared serial communication. |
Posted: Fri Jan 28, 2005 7:15 am |
|
|
It is right, the RC6 is the input pin to the Max232 (per sch of demo 2 plus
board). So if I connect the output of the infrared receiver to the
RC6, then I have the result display in the hyperterminal.
But if I connect it to RC7 which is input to PIC (RX) and I try to echo what ever
coming on RC7 to PC rs 232, then I got nothing. I've try to display the data
received at pin rc7 to port D, I got nothing either.
What did I do wrong? |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Jan 28, 2005 7:29 am |
|
|
Get rid of the IR for now until you get the receive working. Connect the other PIC or the PC to the receive PIC and do your testing. You should add the ERRORS parameter to the #use rs232 statement or the receive can stop working since you are not handling the buffer overflow error. |
|
|
Guest
|
infrared serial comm |
Posted: Fri Jan 28, 2005 9:08 am |
|
|
Thanks for everyone support.
I got it work fine now. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Fri Jan 28, 2005 9:27 am |
|
|
So what was the problem? |
|
|
Guest
|
infrared |
Posted: Fri Jan 28, 2005 10:52 am |
|
|
the variable (unsigned c;) should be ( byte c;)
and always use putc() instead of printf().
For both the receiver and transmitter |
|
|
|