Operácie

Infračervený vypínač s ATtiny45: Rozdiel medzi revíziami

Zo stránky SensorWiki

StudentMIPS (diskusia | príspevky)
StudentMIPS (diskusia | príspevky)
Riadok 150: Riadok 150:


Pre overenie funkcionality som pripojili tlacidlo na PD2 pomocou, ktorého ovládame IR diodu. Ako dalsie sme pripojili testovacie rele na napajanie 5V. Pomocou tlacidla vysleme kod, ktory zopina rele.
Pre overenie funkcionality som pripojili tlacidlo na PD2 pomocou, ktorého ovládame IR diodu. Ako dalsie sme pripojili testovacie rele na napajanie 5V. Pomocou tlacidla vysleme kod, ktory zopina rele.
[[Obrázok:1d9acdca-bb07-4b5b-a863-ede10ef7991c.jpg|400px|thumb|center|Vývojová doska ACROB.]]
[[Súbor:realnezapojenie.jpg|400px|thumb|center|Realne zapojenie obvodu]]


'''Video:'''
'''Video:'''

Verzia z 21:19, 11. jún 2025

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.

Súbor:1d9acdca-bb07-4b5b-a863-ede10ef7991c.jpg
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...


/*
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
*/

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>

// --- Definícia pinov ---
#define IR_DDR   DDRD
#define IR_PORT  PORTD
#define IR_PIN   3       // PD3 pre IR LED

#define BTN_DDR   DDRD
#define BTN_PORT  PORTD
#define BTN_PINR  PIND
#define BTN_PIN   2      // PD2 pre tlačidlo

#define LED_DDR   DDRB
#define LED_PORT  PORTB
#define LED_PIN   5      // PB5 (Arduino pin 13) pre indikáciu

// Časovania protokolu NEC (v mikrosekundách)
#define NEC_HDR_MARK  9000
#define NEC_HDR_SPACE 4500
#define NEC_BIT_MARK   562
#define NEC_ONE_SPACE 1688
#define NEC_ZERO_SPACE 562
#define NEC_RPT_SPACE 2250

// 32-bitový kód, ktorý sa bude odosielať
#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;
}

Zdrojovz kod projektu: Zdrojový kód: zdrojaky.zip

Overenie

Pre overenie funkcionality som pripojili tlacidlo na PD2 pomocou, ktorého ovládame IR diodu. Ako dalsie sme pripojili testovacie rele na napajanie 5V. Pomocou tlacidla vysleme kod, ktory zopina rele.

Realne zapojenie obvodu

Video:



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