if tmp >= 500 then
Will never be as tmp is BYTE size
if tmp >= 500 then
Will never be as tmp is BYTE size
Dave
Always wear safety glasses while programming.
Every iteration of your loop turns the led off right after start. There's you problem.![]()
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
thanks for reply everyone..
@demon and mackaraket guys the above code is working there is nth wrong with it.i just want to add an additional functionality of on/off...
@cncmachineguy i didnt understand your reply can u elaborate a little.... plz
Last edited by engineer7; - 5th June 2011 at 13:05.
Code:Start: LOW SONYLED <-------------------------Here you turn off the LED IRBUTTON=255: IRDEVICE=255 Pulsin irin,0,header if header < 1000 or header > 1350 then goto Start check: for i =0 to 11 pulsin irin,0,tmp if tmp >= 500 then Body.0[i]=1 'Sony Logic 1 is 120 else Body.0[i]=0 ' Sony Logic 0 is 60 endif next IRBUTTON = Body & %01111111 if IRBUTTON <=9 then loop: toggle Sonyled '<----------------------change! endif pause 100 goto start <--------sends program back to the beginning, this will turn off the LED
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
@ Demon, I do not at all to be a guru who could figure out how it will go screwy, I am fairly certain IRBUTTON is ALWAYS = 0 after his for loop. Since there is NO way to cram a number bigger then %11111111,$FF,255 in a byte, it will always do the else setting all 11 bits to zero.
So I would certainly question the OP's statement that it works, I think it prolly does in fact receive the signal, and detect the header. but I think from there it will fail as soon as it is tested for specific button presses.
We shall wait and see![]()
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
without to check your code i think you should consider the frames (codes) of the ir Sony protocol... because Sony remotes all appear to repeat each frame a minimum of 3 times...and also i think you toggle the led by pressing too long time the button on the remote ..... add some some long pause for test
@cncmachineguy thanx a lot for pointing me the problem.i ve been a fool n i admit...the toggle function works fine... thanx v much again
your approach has been dead on...g8 advice for beginners!!
@demon u r right as well.the code is working for all the buttons of my remote(unexpected results)... not for just button <9 .problem wid temp most probably... i'll declare it a WORD n c how it goes...!
@bogden thanks for your input as well. i have put a delay of 100...
my final code it is toggling on button 6 of your sony remote.n the good thing is no interrupts or timers simple code
Code:@ DEVICE pic16F877a, WDT_OFF ' Watchdog Timer @ DEVICE pic16F877a, PWRT_OFF ' Power-On Timer @ DEVICE pic16F877a, BOD_OFF ' Brown-Out Detect @ DEVICE pic16F877a, LVP_OFF ' Low-Voltage Programming @ DEVICE pic16F877a, CPD_OFF ' Data Memory Code Protect @ DEVICE pic16F877a, PROTECT_OFF ' Program Code Protection @ DEVICE pic16F877a, HS_OSC Define OSC 20 cmcon=2 Header var word Body var word i var byte tmp var word irButton var byte irDevice var byte irIN var PortB.2 SonyLED var PortB.5 TrisB = %00000100 Start: 'LOW SONYLED IRBUTTON=255: IRDEVICE=255 Pulsin irin,0,header if header < 1000 or header > 1350 then goto Start check: for i =0 to 11 pulsin irin,0,tmp if tmp >= 500 then Body.0[i]=1 'Sony Logic 1 is 120 else Body.0[i]=0 ' Sony Logic 0 is 60 endif next IRBUTTON = Body & %01111111 if IRBUTTON=5 then loop: toggle Sonyled endif pause 100 goto start
copy/paste n njoy love PBP!!!!
Insignificant, but I would change this:
Code:if IRBUTTON=5 then loop: toggle Sonyled endif
To this:
Code:if IRBUTTON=5 then toggle Sonyled
Bookmarks