|
|
View previous topic :: View next topic |
Author |
Message |
sainath
Joined: 29 Jan 2004 Posts: 2
|
x10 controller for the pic |
Posted: Thu Jan 29, 2004 4:37 pm |
|
|
Hello,
Can any body let me know what he problem could be.
Any way here is what i am doing
I actually am interfacing a pic micro with a PSC04 X10 controller
(Micro side)
B0 <------ -----------Zero crossing detect from psc04 ( X10 remote controller) connected to a pull up.Black wire 1 of RJ11
B2 -------------------> Input to x10 controller pin 4(yellow) of RJ11
gnd ------------------ gnd of PSC , pins 2 and 3 of telephone jack
I plug the x10 controller and the lampmodule lm 465 in the same power bar and i see the zerocrossing and the pulses getting transmitted but the incandescent table lamp shows no change.
then the code using a driver x10.c from ccs compiler
i did in the main function
while (true)
{
// address command
x10_write(house_code,2); // functions defined in x10.c
x10_write(house_code,2); // house code A, key code 2
//Send the off command
x10_write_bits(7,4,1);
x10_write_bits(house_code,4,0);
x10_write_bits(28,5,0);
x10_write_bits(0,6,1); // silence for 6 cycles
//2nd time
x10_write_bits(7,4,1);
x10_write_bits(house_code,4,0);
x10_write_bits(28,5,0); //off command code is 00111 <- compute this way
x10_write_bits(0,6,1);
delay_ms(10000);
//send the on command
x10_write_bits(7,4,1);
x10_write_bits(house_code,4,0);
x10_write_bits(20,5,0); //on command code is 00101
x10_write_bits(0,6,1); //6 cycles of 0's for pause
x10_write_bits(7,4,1);
x10_write_bits(house_code,4,0);
x10_write_bits(20,5,0);
x10_write_bits(0,6,1);
// delay_ms(10000);
} _________________ SNATH |
|
|
dyeatman
Joined: 06 Sep 2003 Posts: 1933 Location: Norman, OK
|
X10 from PIC |
Posted: Thu Jan 29, 2004 7:20 pm |
|
|
One thing I see immediately is that you are transmitting an ON immediately followed by an OFF without allowing time for the module to react to the command. If you are firing a relay based module the relay won't have time to move it's contacts before you turn it back off.
Also, without doing some checking to confirm, I believe the protocol requires a certain minimum number of AC zero crossings between successive commands. It looks like you may be accomplishing this with the zero writing but I am not that familiar enough with the PIC X10 code to be sure.... A longer delay would be better.
Dave |
|
|
sainath
Joined: 29 Jan 2004 Posts: 2
|
Re: X10 from PIC |
Posted: Fri Jan 30, 2004 12:52 pm |
|
|
Thanks ,
I removed the off and now transmitting only the ON command and also put in the delay. still no luck. Is there an easy way of verifying what command i am actually sending on to the psc04 .
the x10 functions are :
char const X10_HOUSE_CODES[16] = {'M','N','O','P','C','D','A','B','E',
'F','G','H','K','L','I','J'};
BYTE const X10_KEY_CODES[16] = {13,14,15,16,3,4,1,2,5,6,7,8,11,12,9,10};
void wait_for_zero_cross() {
if(input(X10_ZERO_CROSS))
while(input(X10_ZERO_CROSS)) ;
else
while(!input(X10_ZERO_CROSS)) ;
}
void x10_write_bits(BYTE data, BYTE n, BYTE start) {
BYTE i;
BOOLEAN the_bit;
for(i=1;i<=n;++i) {
wait_for_zero_cross();
the_bit=shift_right(&data,1,0);
output_bit(X10_FROM_PIC, the_bit);
delay_ms(1);
output_low(X10_FROM_PIC);
if(start==0) {
wait_for_zero_cross();
output_bit(X10_FROM_PIC, !the_bit);
delay_ms(1);
output_low(X10_FROM_PIC);
}
}
}
void x10_write(BYTE house_code, BYTE key_code) {
BYTE i;
i=0;
while (X10_HOUSE_CODES[i]!=house_code)
i++;
house_code=i;
if(key_code<16) {
i=0;
while (X10_KEY_CODES[i]!=key_code)
i++;
key_code=i;
}
x10_write_bits(7,4,1);
x10_write_bits(house_code,4,0);
x10_write_bits(key_code,5,0);
x10_write_bits(0,6,1);
}
dyeatman wrote: | One thing I see immediately is that you are transmitting an ON immediately followed by an OFF without allowing time for the module to react to the command. If you are firing a relay based module the relay won't have time to move it's contacts before you turn it back off.
Also, without doing some checking to confirm, I believe the protocol requires a certain minimum number of AC zero crossings between successive commands. It looks like you may be accomplishing this with the zero writing but I am not that familiar enough with the PIC X10 code to be sure.... A longer delay would be better.
Dave |
_________________ SNATH |
|
|
|
|
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
|