Fórum témák

» Több friss téma
Fórum » AVR infra játékfegyver
Lapozás: OK   1 / 1
(#) fillx hozzászólása Jún 4, 2010 /
 
Sziasztok!

Infrás játékfegyvereket szeretnék építeni.
jelenleg dugaszolós próbapanelen 2db ATtiny85 el tesztelgetem a küldés és a fogadást.
a vivő frekvenciát(36khz) egy 555 időzítő állítja elő és egy n-csatornás feten keresztül kapcsolgatom
A programot AVR Studio 4 és AVR-GCC használatával írtam c-ben.

dolgozom egy idelye ezen a kódon de már annyira összekavarodtam hogy kell egy kis hozzáértő segítség

Tehát az alábbi kód-nak elvileg az lenne a dolga hogy
start bittel kezdve (2400us-os pulza + 600us szünet)
és a 2x8bites kód küldése (log"1" 1200us ,log"0" 600us, szünet 600us)
LSB-től kezdve külön a címet és a parancsot.

  1. void ir_send(uint8_t address, uint8_t command) {
  2.  
  3.         uint8_t mask=0x01;
  4.         uint8_t i;
  5.  
  6.         // start
  7.         PORTB |=  (1<<PINB3);
  8.         _delay_us(2400);
  9.         PORTB &= ~(1<<PINB3);
  10.  
  11.         for(i=0;i<8;i++){
  12.  
  13.                 // várj
  14.                 _delay_us(600);
  15.  
  16.                 if(mask & address) {
  17.                         // 1
  18.                         PORTB |=  (1<<PINB3);
  19.                         _delay_us(1200);
  20.                         PORTB &= ~(1<<PINB3);  
  21.                 }
  22.                 else {
  23.                         // 0
  24.                         PORTB |=  (1<<PINB3);
  25.                         _delay_us(600);
  26.                         PORTB &= ~(1<<PINB3);
  27.                 }
  28.  
  29.                 address >>= 1;
  30.         }
  31.  
  32.         for(i=0;i<8;i++){
  33.  
  34.                 // várj
  35.                 _delay_us(600);
  36.  
  37.                 if(mask & command) {
  38.                         // 1
  39.                         PORTB |=  (1<<PINB3);
  40.                         _delay_us(1200);
  41.                         PORTB &= ~(1<<PINB3);  
  42.                 }
  43.                 else {
  44.                         // 0
  45.                         PORTB |=  (1<<PINB3);
  46.                         _delay_us(600);
  47.                         PORTB &= ~(1<<PINB3);
  48.                 }
  49.  
  50.                 command >>= 1;
  51.         }
  52. }
  53.  
  54. ir_send(0x01,0xFF);


A vétel felől (TSOP 4836 active LOW)
a beérkező címet és parancsot memóriába égetem az olvasás végén

  1. #define INPUT   PB4
  2.  
  3. uint8_t j;
  4. uint8_t address;
  5. uint8_t command;
  6.  
  7. while(1) {
  8.  
  9.         while(bit_is_set(PINB, INPUT)) {
  10.                 PORTD &= ~(1<<PIND6); // led ki
  11.         }
  12.  
  13.         address = 0;
  14.         command = 0;
  15.  
  16.         _delay_us(3100); // vár míg vége a start bitnek
  17.  
  18.         //8-bit cím
  19.         for(j = 8;j >0;j--) {  
  20.                 _delay_us(800);
  21.  
  22.                 if(bit_is_set(PINB, INPUT)) {
  23.                         // 0
  24.                         address &= ~(1 << 7);
  25.                         address >>= 1;
  26.                 }
  27.                 else {
  28.                         // 1
  29.                         address |= (1 << 7);
  30.                         address >>= 1;
  31.                         _delay_us(590);
  32.                 }
  33.  
  34.                 _delay_us(350);
  35.         }
  36.  
  37.         //8-bit parancs
  38.         for(j = 8;j >0;j--) {  
  39.                 _delay_us(800);
  40.  
  41.                 if(bit_is_set(PINB, INPUT)) {
  42.                         // 0
  43.                         command &= ~(1 << 7);
  44.                         command >>= 1;
  45.                 }
  46.                 else {
  47.                         // 1
  48.                         command |= (1 << 7);
  49.                         command >>= 1;
  50.                         _delay_us(590);
  51.                 }
  52.  
  53.                 _delay_us(350);
  54.         }
  55.  
  56.         eeprom_write_byte((uint8_t*)0,address);
  57.         eeprom_write_byte((uint8_t*)1,command);
  58.  
  59.         PORTD |= (1<<PIND6); // led be
  60.  
  61.         _delay_ms(1500);
  62. }


visszaolvasva az eepromból teljesen más értékeket kapok

van egy sejtésem hogy a küldés felöl lesz a gond de már kezdem feladni ezért fordultam hozzátok

üdv fillx
(#) lezsakdomi válasza fillx hozzászólására (») Jún 5, 2010 /
 
mit keressek?
Következő: »»   1 / 1
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem