Sida 2 av 2
Postat: 4 november 2007, 15:36:01
av squiz3r
Icecap: De va ganska dyra, och värkar relativt svåra att använda. Men det kan vara bra att veta att de finns i frammtiden
Mvh
Postat: 4 november 2007, 15:40:49
av Icecap
Vi kanske har olika synsätt med priset men besvärliga är de definitivt inte! Så länge du har en UART på µC'n kan du inte få det enklare.
Postat: 5 november 2007, 14:32:29
av manicken
denna kod har jag skrivit till en PIC som använder en ingång med avbrott
den decodar signalen från en NEC fjärrkontrol
#define IRBUFFERSIZE 4
void initIR(void); // only called in main once
void IRreceive(void); //only called in interrupt
char bank3 IRbytes[IRBUFFERSIZE];
char IRtime = 0, IRbyteCount=0, IRint = 0;
void main(void){
initPIC(); // sets port directions
initIR();
while (1){
if (IRtime>0x15){
IRcheck(); // checks received decoded codes
}
}
}
void initIR(void){
INTE=1;
T1CON=0x20;// based on 8 MHz crystal (1:4 prescale)
TMR1ON=1;
GIE = 1:
}
void IRreceive(void){
INTF=0;
if (INTEDG)
{
TMR1ON=0;
INTEDG=0;
TMR1H=0;TMR1L=0;
TMR1ON=1;
}
else // INTEDG==0
{
TMR1ON=0;
INTEDG=1;
IRtime = ((TMR1H<<8)+TMR1L)/50;
if (IRtime>0x15){ IRint=255; IRbyteCount=0;}
else if ((IRtime>=0x03)&&(IRtime<=0x05))
{
IRbytes[IRbyteCount] = IRbytes[IRbyteCount]>>1;
IRbytes[IRbyteCount] = IRbytes[IRbyteCount] & 0x7F;
}
else if ((IRtime>=0x0E)&&(IRtime<=0x10))
{
IRbytes[IRbyteCount] = IRbytes[IRbyteCount]>>1;
IRbytes[IRbyteCount] = IRbytes[IRbyteCount] | 0x80;
}
IRint++;
if ((IRint==8)||(IRint==16)||(IRint==24)||(IRint==32)) IRbyteCount++;
TMR1H=0; TMR1L=0;
}
INTF=0;
}
Postat: 5 november 2007, 15:22:56
av squiz3r
"Så länge du har en UART på µC'n kan du inte få det enklare."

, då måste man lära sig använda den också
Jag brukar alltid köra egna "hitte på" protokoll när jag ska köra seriel komunikation
manicken: Den va lite kortare än min kod

. Men C förstår jag inte mycket av
Mvh