Operácie

Infračervený vypínač s ATtiny45

Zo stránky SensorWiki

Záverečný projekt predmetu MIPS / LS2025 - Meno Priezvisko


Zadanie

Cieľom môjho zadania bolo vytvoriť program, ktorý umožní vysielať špecialny kód, ktorý budeme vysielať pomocou IR diody.


Vývojová doska ACROB.

Literatúra:


Analýza a opis riešenia

Opíšte sem čo a ako ste spravili, ak treba, doplňte obrázkami... Podrobne opíšte použité komponenty (okrem základnej dosky s ATmega328P procesorom), pridajte linky na datasheety alebo opis obvodu.

Celkový pohľad na zariadenie.

Nezabudnite doplniť schému zapojenia! V texte by ste mali opísať základné veci zo zapojenia, samotná schéma nie je dostačujúci opis.

Schéma zapojenia.


Algoritmus a program

Algoritmus programu využíva toto a toto, základné funkcie sú takéto a voláma ich tuto... Výpis kódu je nižšie...


<tab name="Hlavný kód"><syntaxhighlight lang="c++" style="background: LightYellow;"> /* Simple NEC IR sender with button on ATmega328P (Arduino Uno hardware) in AVR C Wiring:

 - IR LED anode via 100? resistor to PD3, cathode to GND
 - Pushbutton: one side to PD2, other to GND (use internal pull-up)
 - Indicator LED anode via 330? resistor to PB5 (Arduino pin 13), cathode to GND
 - F_CPU = 16 MHz
  • /
  1. define F_CPU 16000000UL
  2. include <avr/io.h>
  3. include <util/delay.h>

// --- Definícia pinov ---

  1. define IR_DDR DDRD
  2. define IR_PORT PORTD
  3. define IR_PIN 3 // PD3 pre IR LED
  1. define BTN_DDR DDRD
  2. define BTN_PORT PORTD
  3. define BTN_PINR PIND
  4. define BTN_PIN 2 // PD2 pre tlačidlo
  1. define LED_DDR DDRB
  2. define LED_PORT PORTB
  3. define LED_PIN 5 // PB5 (Arduino pin 13) pre indikáciu

// Časovania protokolu NEC (v mikrosekundách)

  1. define NEC_HDR_MARK 9000
  2. define NEC_HDR_SPACE 4500
  3. define NEC_BIT_MARK 562
  4. define NEC_ONE_SPACE 1688
  5. define NEC_ZERO_SPACE 562
  6. define NEC_RPT_SPACE 2250

// 32-bitový kód, ktorý sa bude odosielať

  1. define MY_CODE 0xBF40FF00

// Funkcia na vyslanie "mark" (38 kHz nosnej) po dobu "us" µs static void mark(uint16_t us) {

   // kmitočet ~38 kHz: perioda ~26 µs, polperióda ~13 µs
   uint16_t cycles = us / 26;
   while (cycles--) {
       IR_PORT |= (1 << IR_PIN);
       _delay_us(13);
       IR_PORT &= ~(1 << IR_PIN);
       _delay_us(13);
   }

}

// Funkcia na vyslanie "space" (vypnutá LED) po dobu "us" µs static void space(uint16_t us) {

   IR_PORT &= ~(1 << IR_PIN);
   while (us--) {
       _delay_us(1);
   }

}

// Funkcia na odoslanie 32-bitového NEC kódu static void sendNEC(uint32_t code) {

   // úvodný rámec (header)
   mark(NEC_HDR_MARK);
   space(NEC_HDR_SPACE);
   // odosielanie bitov LSB ako prvé
   for (uint8_t i = 0; i < 32; i++) {
       mark(NEC_BIT_MARK);
       if (code & 1) {
           space(NEC_ONE_SPACE);
       } else {
           space(NEC_ZERO_SPACE);
       }
       code >>= 1;
   }
   // záverečný "mark"
   mark(NEC_BIT_MARK);
   IR_PORT &= ~(1 << IR_PIN);

}

int main(void) {

   // nastavenie GPIO: IR LED výstup
   IR_DDR |= (1 << IR_PIN);
   // tlačidlo vstup s interným pull-up
   BTN_DDR &= ~(1 << BTN_PIN);
   BTN_PORT |= (1 << BTN_PIN);
   // indikácia LED výstup
   LED_DDR |= (1 << LED_PIN);
   LED_PORT &= ~(1 << LED_PIN);
   while (1) {
       // čakanie na stlačenie tlačidla (aktívne LOW)
       if (!(BTN_PINR & (1 << BTN_PIN))) {
           _delay_ms(50);  // eliminácia odrazu (debounce)
           if (!(BTN_PINR & (1 << BTN_PIN))) {
               // odoslanie NEC kódu
               sendNEC(MY_CODE);
               // krátke zobrazenie výsledku na LED
               LED_PORT |= (1 << LED_PIN);
               _delay_ms(200);
               LED_PORT &= ~(1 << LED_PIN);
               // počkaj na uvoľnenie tlačidla
               while (!(BTN_PINR & (1 << BTN_PIN)));
               _delay_ms(50);
           }
       }
   }
   return 0;

}

Pridajte sem aj zbalený kompletný projekt, napríklad takto (použite jednoznačné pomenovanie, nemôžeme mať na serveri 10x zdrojaky.zip:

Zdrojový kód: zdrojaky.zip

Overenie

Ako ste overili funkciu, napríklad... Na používanie našej aplikácie stačia dve tlačítka a postup používania je opísaný v sekcii popis riešenia. Na konci uvádzame fotku hotového zariadenia.

Aplikácia.

Video:



Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.