Change...to...Code:For i = 0 To 3 Debug IHEX2(IR[i] REV 8) NextThe bit order is already reversed as the bits are set by...Code:For i = 0 To 3 Debug IHEX2 IR[i] NextCode:RF.0(i)=1
Change...to...Code:For i = 0 To 3 Debug IHEX2(IR[i] REV 8) NextThe bit order is already reversed as the bits are set by...Code:For i = 0 To 3 Debug IHEX2 IR[i] NextCode:RF.0(i)=1
Moe, you might want to read this article: Controlling the world from your armchair
Moe, Infrared remote control decoding maybe considered something of a black art, however, this tutorial will show you that its principals are quite straightforward, and easy to implement on a PIC microcontroler.
Thanks to BASIC’s shallow learning curve, software designs that used to take weeks can now be realised in a just few hours. This article presents software solutions in the PicBASIC Pro language.
You might want to read the article: Controlling the world from your armchair
The article is an extract from the book, EXPERIMENTING with the PICBASIC PRO COMPILER, written by Les Johnson.
The book is cuerrently out of publication, however we are considering publishing an online version as part of the new PIC BASIC portal that we are developing to support PIC BASIC Users.
dhouston,
When I change code, old result 0 turn to 255. All the keys press are same.
Header Logic 0 Logic 1 Logic 1 logic 0
2400 600 600 600 1200 600 1200 600 600
x a b c d e f g h i j
+------------------------+ +------+ +--------------+ +--------------+ +------+
| | | | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
---+ +------+ +------+ +------+ +------+ +------
x____________________________|_____________|______ _____________|___________________|_____________|
pulsin header 1st loop 2nd loop 3rd loop 4th loop
return width of length
-- code start -------------------------------
-- end of code -------------------------------Code:pulsin irIn , 0 , Header 'Line 1 for i =0 to 3 pulsin irin, 0 , tmp 'line 3 if tmp > 90 then body.0[i] = 1 'line 5 else body.0[i] = 0 'line 7 endif next
I think pulsin work as follow:
1. pulsin is timeout when no rising edge was found. return width is zero.
2. pulsin is time out when rising edge was found and then until falling edge. return the width length.
so pulsin in code run like that:
Line 1 : pulsin start measure (x) to end edge (b). Width is (a) to (b) so Header = 2400 (space (x) to (a) is not count.
Loop 0 (1st loop)
Line 3 : pulsin start measure (b) to end edge (d). Width is (c) to (d) so tmp = 600 (space (b) to (c) is not count.
Line 5 and 7: see the width lenght (not space) and decided logic 0
Loop 1 (2nd loop)
Line 3 : pulsin start measure (d) to end edge (f). Width is (e) to (f) so tmp = 1200 (space (d) to (e) is not count.
Line 5 and 7: see the width lenght (not space) and decide logic 1
Loop 2 (3rd loop)
Line 3 : pulsin start measure (f) to end edge (h). Width is (g) to (h) so tmp = 1200 (space (f) to (g) is not count.
Line 5 and 7: see the width lenght (not space) and decide logic 1
Loop 3 (4th loop)
Line 3 : pulsin start measure (h) to end edge (j). Width is (i) to (j) so tmp = 600 (space (h) to (i) is not count.
Line 5 and 7: see the width lenght (not space) and decide logic 0
PULSIN can only measure the width length.
When this code is used for NEC Protocol, all pulse are equal depending upon if statement (Logic 0 or 1)
Because In NEC, logic 1 or 0 is determined by space length. How can I measure space with pulsin.
lester
Thanks.
I already read Les Johnson's article and "Section 6: Experimenting with Remote Control" of that book. I already tested it. All are ok. But it's Sony IR Protocol (Pulse Width Modulation) that quite different from NEC IR Protocol (Pulse Distance Modulation).
I admire you and dhouston when I found your join date.
I start and learn picbasic at last week of July of this year. I search and collect PIC books (picbasic, C and Assembly) and article. I found about 60 books and articles. But I cannot find enough explanation for a command. eg. I want to know pulsin in detail. How pulsin work? examples relating pulsin. Pulsin in "PicBasic Pro Manual" is general. Picbasic is best language for me although I've little experience with C Language.
Moe
Last edited by komoe01; - 31st August 2009 at 12:27.
Sorry sample wave is broken.
If wave picture is not found, Please see it in attachment picture
Moe
Last edited by komoe01; - 31st August 2009 at 12:35.
It works fine for me. It's impossible for me to guess at what changes you have made to it. Try to test it using my code exactly as written. Once that works, try modifying it for your application, going step by step to isolate where the problem is being introduced.
The waves you've attached (including the second one) are not NEC IR protocol.
How are you sending the IR codes?
dhouston
The wave image is a sample (part of the sony protocol).
Ok. dhoustonTry to test it using my code exactly as written.
But 12F629 pic is not available for me. Just a few PIC model can buy in my country. I have to use 16F84A or 16F628A. Beside I use IR, not RF.
I'm a beginner for pic so I've not familiar with DEBUG that used in your code.
So I write code to PIC than I see the result of LED signal and Computer program.
When I test it using your code exactly, what can I see the result from where? Can I use Infrared remote control? or I must built your transmitter to test receiver.
I think I must to change some code.
I do my best as you say!
Thanks.
Moe
The code I posted above in this thread is for IR. If you study it you will see that the method is identical to Lester's.
I have one 12F629 sending the 32 bit codes and another receiving the codes. Instead of IR transmitter and receiver I have the transmitter PIC connected directly to the receiver PIC. I do not have an IR receiver handy. However, I've used the same basic code in devices which did have an IR receiver.
I quickly modified a simple test program written for other purposes to display the DEBUG output. See the attachment. You should see the same output ($50$AF$42$BD) every 15 secs) in whatever terminal program you are using.
As for DEBUG, read the manual - it's similar to SerOut and SerOut2.
You should be able to use my code merely by changing the GPIO.x pins to whatever RA.x pins you are using. I haven't used a 16F84A in ages so I'm not going to write the conversion for you.
Last edited by dhouston; - 31st August 2009 at 16:56.
dears ,
i know its a very long time , but please am stick on this , can you post a full working code for pic16f84a to decode nec protocol .
many many thanks .
Bookmarks