IRremote, Mega 2560 изменить номер пина IR диода.
- Войдите на сайт для отправки комментариев
Доброго времени суток!
Помогите решить проблемку.
Использую мегу вместе с TFT экраном, который садится прямо на нее и занимает 1-12 цифровые ноги.
Библиотека требует подключения диода к третьему пину. Посмотрел код билиотеки, в IRremoteInt.h нашел такие строки:
// Arduino Mega #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) //#define IR_USE_TIMER1 // tx = pin 11 //#define IR_USE_TIMER2 // tx = pin 9 //#define IR_USE_TIMER3 // tx = pin 5 //#define IR_USE_TIMER4 // tx = pin 6 #define IR_USE_TIMER5 // tx = pin 46
Думаю чудесно, переключу на 5 таймер и будет мне счастье.
Объявил перменную
#define __AVR_ATmega2560__
в начале файла. Правильно сделал?
Но счастья не наступило. На 46 пине сигнала нет, хоть и скетч компилится без ошибок.
Нашел место где определяется нога дляPWM:
#define TIMER_RESET
#define TIMER_ENABLE_PWM (TCCR5A |= _BV(COM5A1))
#define TIMER_DISABLE_PWM (TCCR5A &= ~(_BV(COM5A1)))
#define TIMER_ENABLE_INTR (TIMSK5 = _BV(OCIE5A))
#define TIMER_DISABLE_INTR (TIMSK5 = 0)
#define TIMER_INTR_NAME TIMER5_COMPA_vect
Посмотрел несколько картинок с распиновкой Меги например тут:
http://www.rinkydinkelectronics.com/pm_arduino.php
Обозначений типа COM5A1 нигде не нашел.
Кто нибудь может объяснить что делате код (TCCR5A |= _BV(COM5A1)) и (TCCR5A &= ~(_BV(COM5A1)))?
Нафейхуя дефайн делаешь? Оно появляется, когда ты плата на 2560 выбираешь.
Не нашел в коде где она объявляется. Пробовал и с объявлением и нет. Не работает никак :(
Спс, теперь буду знать.
Её и не будет в коде, этот дефайн компилятор выставляет.
Вот похоже где пин определяется (29 строка). Что за переменная CORE_OC5A_PIN (26 строка)? В коде не вижу, где она объявляется.
Если определено CORE_OC5A_PIN, то TIMER_PWM_PIN принимается CORE_OC5A_PIN
иначе
Если плата Mega1280 или Mega2560, то TIMER_PWM_PIN принимается 46.
иначе ошибка "Please add OC5A pin number here"
Вот как-то так оно работает. Если CORE_OC5A_PIN определено, то дальше не проверяем.
Да это я понял. Не понял что такое CORE_OC5A_PIN. По всей видимости такая же переменная как и __AVR_ATmega2560__ обозначающая какой то контролер.
Блин. Нифига не понятно. Пошел курить ШИМ.
Выяснил что без экрана библиотека на 46 пине работает.