Kaip ir pradėti nutraukti veikiamus IR RC5 naudojant AVR?

  • Thread starter Terminatorius Elektra
  • Start date
T

Terminatorius Elektra

Guest
Sveiki,,,
Aš sėkmingai padarė ac kodas priėmimo IR RC5 kodą, naudodamas ATmega16 naudojant AVR taikymo pažymi

BUT I dont know kaip rašyti arba kaip pradėti rašyti nutraukti veikiamus RC5 IR recever

Aš naudoju codevision, PLZ gali kas nors man padėti, kaip pradėti?cuz i buvo visiškai prarastas čia, cuz jokios informacijos rasite šiuo klausimu

Ačiū

 
Tai mano kodas ĮR RC5 imtuvo naudojant ATmega16

Kodas:

Kodas:

/************************************************* ****
Chip type: ATmega16L

Programos tipas: Straipsniai

Laikrodis dažnis: 7.372800 MHz

Atminties modelis: Mažos

Išorės SRAM dydis: 0

Duomenys Stack dydis: 256

************************************************** *** /tuščia setup_AVR ();

# define CHECKBIT (ADRESAS, BIT) (ADRESAS & (1 <<BIT))

# include <mega16.h>

# include <stdio.h>

# include <io.h>

unsigned char Temp = 0;

unsigned char komandą [10] = (0);

unsigned char sistema [10] = (0);

unsigned char timerH = 0;

unsigned char timerL = 0;

int bitcnt / / bitų skaičius kol bus gautas

unsigned char ref1; / / 3 / 4 bit_time

unsigned char ref2; / / 5 / 4 bit_time

int i = 6;

int j = 5;

int k;pertraukti [TIM0_OVF] tuščia timer0_ovf_isr (tuščia)

(

timerL / / padidėjimų kas 255 * 1/7.372800 sekundžių

temp ;

if (temp == 255) (temp = 0; timerH ;) / / padidėjimų kas 255 * 255 * 1/7.372800 sekundes

)void main (void)

(

setup_AVR ();
# asm ( "SEI)o (1)

(inicijuoti: temp = 0;

timerH = 0;detect1: timerL = 0;detect2: jei (timerH> 15) / / Jei ne pradėti bitų aptikta per 132ms

goto kaltės;jei (timerL> 102) / / Jei eilutė aukštą daugiau nei 3.5ms

goto start1 / / tada laukti pirmosios pradėti KALTAIif (! CHECKBIT (PIND, 2)) / / Jei eilutė:

goto detect1 / / PIND = 0 mažas - pereiti į detect1 ir anuliuoti laiko

else goto detect2 / / PIND = 1 aukštas - pereiti į detect2 ir patikrinti už 3,5 ms idealios aukštostart1: o (CHECKBIT (PIND, 2)) / / toliau tikrinti galimybę pirmą pradėti KALTAI

(

jei (timerH> 15) / / Jei ne pradėti bitų aptikta per 132ms

goto kaltės; / / uždarykite printf ( "5");

)timerL = 0; / / Priemonė halflength pradžios KALTAIstart2: while (! CHECKBIT (PIND, 2)) / / Priemonė halflength pradžios bitų (žemo lygio ilgis)

(

jei (timerL> 26) / / Jei startbit ilgiau nei 1.1ms,

goto kaltės; / / išėjimas

)

/ / timerL = 1 / 2 šiek tiek laiko

ref1 = 3,0 * timerL/2.0 / / ref1 = 3 / 4 bitų laiko

ref2 = 5,0 * ref1/3.0 / / ref2 = 5 / 4 bitų laiko

timerL = 0;start3: o (CHECKBIT (PIND, 2)) / / patikrina, ar antroji pradžia šiek tiek gauna

(

jei (timerL> ref1) / / Jei auga kraštas yra per ilgas

goto kaltės; / / išėjimas

)bitcnt = 12 / / Gauti 12 bitų

j = 5; / / Už komandą

i = 5; / / Dėl sistemos

pavyzdys: timerL = 0;

while (timerL <ref1); / / palaukti iki pirmojo 1 / 4 Kito KALTAIwhile (bitcnt> 0)(

/ / Dabar gauna pirmąjį 7 bitai, įskaitant przełączać KALTAI

while (bitcnt> 6)

(If (PIND.2 == 0) (/ / bit gavo yra 0

sistema = 0; / / saugoti bitų sistemos

i -; bitcnt - / / pasirengti kitam KALTAI

while (! CHECKBIT (PIND, 2)) / / laukti iki kito krašto

(

jei (timerL> ref2) goto kaltės;

)

goto mėginys / / palaukti kito KALTAI

)else (/ / bit gavo 1

sistema = 1; / / saugoti bitų sistemos

i -; bitcnt - / / pasirengti kitam KALTAI

while (CHECKBIT (PIND, 2)) / / laukti iki kito krašto

(

jei (timerL> ref2) goto kaltės;

)

goto mėginys / / palaukti kito KALTAI

)

)

/ / Dabar gauna paskutinius 6 bitaijei (PIND.2 == 0) (/ / bit gavo yra 0

Komanda [j] = 0; / / saugoti bitų į komandą

j -; bitcnt - / / pasirengti kitam KALTAI

while (! CHECKBIT (PIND, 2)) / / laukti iki kito krašto

(

jei (timerL> ref2) goto kaltės;

)

goto mėginys / / palaukti kito KALTAI

)else (/ / bit gavo 1

Komanda [j] = 1; / / saugoti bitų į komandą

j -; bitcnt - / / pasirengti kitam KALTAI

while (CHECKBIT (PIND, 2)) / / laukti iki kito krašto

(

jei (timerL> ref2) goto kaltės;

)

goto mėginys / / palaukti kito KALTAI

)

)

printf ( "aa");

for (k = 5, k> = 0, k -)

printf ( "% d", komandą [k]);

printf ( "bb");

for (k = 5, k> = 0, k -)

printf ( "% d", sistemą [k]);kaltės: goto inicijuoti;);

)

tuščia setup_AVR ()

(

PORTD = 0x00;

DDRD = 0x00;

TCCR0 = 0x01;

TCNT0 = 0x00;

OCR0 = 0x00;

TIMSK = 0x01;

ACSR = 0x80;

SFIOR = 0x00;

)
 
http://www.wara.com/modules.php?name=News&file=article&sid=610

Sony protokolas

 
Dvi būdu galite padaryti.
Pirmasis:
Naudokite įvesties surinkimo Kaisčiai aptikti IR signalą, I'm not sure AVR jau teikia šią funkciją, ar ne, pabandykite patikrinti duomenų lapą.

Antra:
Naudokite vieną išorės nutraukti plius viena laikmatis,
paleiskite laikmatį skaičiavimo kai IR signalą prie išorės nutraukti Kaisčiai.

 
I think įvesties surinkimas yra labai smulkūs metodą, turite išteklių plz?

 
kittythai rašė:

http://www.wara.com/modules.php?name=News&file=article&sid=610Sony protokolas
 
Terminatorius Elektra rašė:

I think įvesties surinkimas yra labai smulkūs metodą, turite išteklių plz?
 

Welcome to EDABoard.com

Sponsor

Back
Top