diff --git a/IR_Encoder.cpp b/IR_Encoder.cpp index 50a0197..1847465 100644 --- a/IR_Encoder.cpp +++ b/IR_Encoder.cpp @@ -6,10 +6,6 @@ #define TestOut 13 IR_Encoder::IR_Encoder(uint16_t addr, uint8_t pin, IR_Decoder* decPair = nullptr) { - - // sendBuffer = new uint8_t[dataByteSizeMax] { 0 }; - ir_out = pin; - pinMode(ir_out, OUTPUT); id = addr; this->decPair = decPair; signal = noSignal; diff --git a/IR_Encoder.h b/IR_Encoder.h index a7c6453..066e981 100644 --- a/IR_Encoder.h +++ b/IR_Encoder.h @@ -8,8 +8,6 @@ class IR_Encoder : IR_FOX { friend IR_Decoder; friend void isr(IR_Encoder& e); public: - - uint8_t ir_out; /// @brief Вывод передатчика uint16_t id; /// @brief Адрес передатчика private: @@ -27,10 +25,20 @@ public: // TIMER2 Ini uint8_t oldSREG = SREG; // Save global interupts settings cli(); - TCCR2A = (1 << WGM21); // Clear Timer On Compare (Сброс по совпадению) - TCCR2B = (1 << CS20); // Предделитель 1 - TIMSK2 |= (1 << OCIE2A); // Прерывание по совпадению - OCR2A = 465/* ((F_CPU / 38000) - 1) */; //38кГц + // DDRB |= (1 << PORTB3); //OC2A (17) + TCCR2A = 0; + TCCR2B = 0; + + // TCCR2A |= (1 << COM2A0); //Переключение состояния + + TCCR2A |= (1 << WGM21); // Clear Timer On Compare (Сброс по совпадению) + TCCR2B |= (1 << CS20); // Предделитель 1 + TIMSK2 |= (1 << OCIE2A); // Прерывание по совпадению + #if F_CPU == 16000000 + OCR2A = /* 465 */((F_CPU / (38000*2)) - 2); //38кГц + #elif F_CPU == 8000000 + OCR2A = ((F_CPU / (38000 * 2)) - 2); //38кГц Частота_мк / (Предделитель * Частота * 2) + #endif SREG = oldSREG; // Return interrupt settings } diff --git a/IR_config.h b/IR_config.h index ee9c774..a6e5ffa 100644 --- a/IR_config.h +++ b/IR_config.h @@ -76,7 +76,7 @@ typedef uint16_t crc_t; #ifndef freeFrec #define freeFrec true #endif -#define subBufferSize 17 //Буфер для складирования фронтов, пока их не обработают (передатчик) +#define subBufferSize 15 //Буфер для складирования фронтов, пока их не обработают (передатчик) #define preambPulse 3