Arduino на Atmega8515 (и на Atmega8535) передаём и принимаем данные IR (инфракрасный сигнал)

Сделал Arduino на Atmega8515, которую выпаял из старого механизма, подключил к ней кварц 6 МГц (можно любой другой, просто этот был под рукой) и залил в неё Скретч на приём и передачу IR сигнала с пульта – всё заработало!

Также я сделал Arduino на Atmega8535 и тоже с внешним кварцем на 6 МГц.

Как сделать Arduino на Atmega8515 читайте здесь – “микроник.рус/7016/”
Как сделать Arduino на Atmega8535 читайте здесь – “микроник.рус/6961/”
Про “IR (инфракрасный сигнал): Читаем данные с пульта и передаём их” – читайте здесь – “микроник.рус/8046/”

Мне попалась Atmega8515 в корпусе TQFP44:

Приём сигнала IR не вызвал проблем и сразу заработал на pin 11 Ардуино (ножка PD3 на Atmega8515), а вот с отправкой – сразу не получилось – в Arduino Nano я подключал IR светодиод к ножке pin3 Ардуино, что соответствует ножке PB3 – но сигнал не отправлялся.

Пришлось читать информацию по библиотеке “github.com/Arduino-IRremote/Arduino-IRremote”

Нашёл вот такую табличку:

Здесь видно, что для отправки в Atmega8515 используется pin13 (ножка PD5 на Atmega8515) – в итоге она и заработала!

А также ссылка на файл: “Код таймера и выбор таймера находится в private/IRTimer.hpp. Здесь можно настроить выбранный таймер.”

В файле IRTimer.hpp как раз и нашёл подтверждение:


...
/***************************************
 * CPU's with MajorCore
 ***************************************/
#elif defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__)
#  if !defined(IR_USE_AVR_TIMER1) && !defined(IR_USE_AVR_TIMER3)
#define IR_USE_AVR_TIMER1     // send pin = pin 13
//#define IR_USE_AVR_TIMER3   // send pin = pin 12 - ATmega162 only
#  endif

...

// MightyCore, MegaCore, MajorCore
#    elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__) \
|| defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) \
|| defined(__AVR_ATmega324P__) || defined(__AVR_ATmega324A__) \
|| defined(__AVR_ATmega324PA__) || defined(__AVR_ATmega164A__) \
|| defined(__AVR_ATmega164P__) || defined(__AVR_ATmega32__) \
|| defined(__AVR_ATmega16__) || defined(__AVR_ATmega8535__) \
|| defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) \
|| defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) \
|| defined(__AVR_ATmega8515__) || defined(__AVR_ATmega162__)
#define IR_SEND_PIN  13

Тоже ссылка на pin13!

Код скретча отправки IR сигнала был следующий:

#include <IRremote.h>
IRsend irsend; 
void setup()
{
}
void loop() 
{
     irsend.sendNEC(0xFFA25D, 32);
     delay(3000);
}

Читал его с помощью Arduino Nano – в Серийном мониторе (Serial Monitor) приходит код FFA25D

Схема подключения IR светодиода на передачу сигнала:

А вот как выглядит мой MajorCore Arduino на Atmega 8515 с кварцем на 6 МГц:

Примечание:
Для Atmega8535 всё аналогично – для отправки используем pin13 (или PD5 на Atmega8535), схема подключения инфракрасного светодиода:

Добавить комментарий