Ik was van plan met een projectje om met de afstandbediening een display aan te sturen dit was ik dan van planmet een pic16f877.
Hier heb ik een mooie website voor gevonden met een werkend concept.
Ik wou dan een philips afstandbediening gebruiken die de rc 5 infrarood code gebruikt.
Hiervan heb ik nu in c een implimentatie van gevonden alleen een paar dingen zijn me hier nog niet helemaal duidelijk ik hoop dat jullie hier even wat licht kunnen bijschijnen
En dan gaat het me vooral om de interrupt routine hoe het rc 5 protocol gedecodeerd wordt. de bit set en de delay_us snap ik niet kwa werking en berekening.
En nog even een ander vraagje zou ik de infrarood ontvanger z'n stroom kunnen laten trekken vanaf de microcontroller? Ik ga dr vanuit dat dat wel moet lukken want ik heb er ook wel eens een temperatuur sensor aan gehangen!
Hier heb ik een mooie website voor gevonden met een werkend concept.
Ik wou dan een philips afstandbediening gebruiken die de rc 5 infrarood code gebruikt.
Hiervan heb ik nu in c een implimentatie van gevonden alleen een paar dingen zijn me hier nog niet helemaal duidelijk ik hoop dat jullie hier even wat licht kunnen bijschijnen
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| #include<16f877a.h> #use delay (clock=4000000) #fuses xt,nowdt,noprotect,noput,nolvp #use rs232 (Baud=9600,xmit=pin_c6,rcv=pin_c7) //RS232 transmission setup #include"lcd_new.h" int counter,i,com,adr; int16 buffer; #int_ext //interrupt int_IR() { counter=0; //reset counter and buffer buffer=0; disable_interrupts(int_ext); //disable interrupts while(!input(pin_b0)) //wait for high level { delay_us(15); ++counter; } //time how long has been low if(counter>=38&&counter<=45) //if from about 800 to 1000 us { //do routines delay_us(200); for(i=0;i<13;i++) //13 following bits { if(input(pin_b0)) //if the input high {bit_set(buffer,0); //set the LSB and shift left buffer<<=1;} else //otherwise just shift buffer<<=1; delay_us(1740); //wait for naxt bit } buffer>>=1; //shift 1 right because of last reading com=buffer&0b00111111; //command is 6-bit long; ignore the rest buffer>>=6; //shift 6 right adr=buffer&0b00011111; //address is 5-bit long; ignore the rest //display on an LCD printf(lcd_putc,"\fAddress:%u\nCommand:%u",adr,com); printf("A%uC%u",adr,com); //send bytes to the rs232 delay_ms(150);} //wait return(0); //return to main } main() { lcd_init(); while(1) { enable_interrupts(int_ext); //enable external interrupt ext_int_edge(H_to_L); //falling edge enable_interrupts(global); //enable interrupts } } |
En dan gaat het me vooral om de interrupt routine hoe het rc 5 protocol gedecodeerd wordt. de bit set en de delay_us snap ik niet kwa werking en berekening.
En nog even een ander vraagje zou ik de infrarood ontvanger z'n stroom kunnen laten trekken vanaf de microcontroller? Ik ga dr vanuit dat dat wel moet lukken want ik heb er ook wel eens een temperatuur sensor aan gehangen!
[ Voor 11% gewijzigd door een moderator op 18-02-2007 13:57 . Reden: code even wat leesbaarder gemaakt door de highlighter te gebruiken :) ]
And this !! Is to go even further beyond!!!