Например TDA7294

Форум РадиоКот • Просмотр темы - Прием команд с ик-пультов.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт янв 02, 2026 19:52:43

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 15:30:08 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 47
Зарегистрирован: Вс мар 01, 2009 19:47:16
Сообщений: 1046
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
Прошу разжевать правильный метод приема команд с ик-пультов для использования в поделках с контроллерами avr. Интересует как правильно захватывать посылку и определять начало и конец.

_________________
Не важно чем все начнется. Важно чем кончится!


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 16:15:39 
Друг Кота
Аватар пользователя

Карма: 116
Рейтинг сообщений: 4511
Зарегистрирован: Пт мар 30, 2012 05:17:29
Сообщений: 16104
Откуда: Екатеринбург
Рейтинг сообщения: 0
Сначала посмотреть осциллографом, что там делается. Причём в двух вариантах: при первом нажатии и при удержании нажатой кнопки, иногда сигналы отличаются. Можно сделать это, открыв пульт и наблюдая сигнал прямо на излучающем диоде. Если есть TSOP с подходящей несущей частотой, можно смотреть сигнал на его выходе, тогда и пульт вскрывать не придётся. Потом, зная картинку (а она бывает всякой, не обязательно стандартной для пультов), можно реализовать приём.

_________________
И хрюкотали зелюки,
Как мюмзики в мове.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 16:44:39 
Друг Кота

Карма: -1
Рейтинг сообщений: 86
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8896
Откуда: .ru
Рейтинг сообщения: 0
https://www.radiokot.ru/forum/viewtopic ... &start=175
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 17:03:57 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 47
Зарегистрирован: Вс мар 01, 2009 19:47:16
Сообщений: 1046
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
Роман, это конечно все хорошо и интересно, но, если честно нихрена непонятно. Берем прерывание - окей, что в нем то делать надо? Их за время приема посылок приедет будь здоров. Я процедуру просил описать - сам не доезжаю мозгами. Есть ли пример кода на C, только без библиотек.

Добавлено after 3 minutes 48 seconds:
Mickbell, да задача то простая, взять обычный NECовский пульт и научиться работать с ним. Используя Ардуиновские библиотеки это труда не составляет абсолютно, но бездумное потребление чужого кода, это путь не туда.

_________________
Не важно чем все начнется. Важно чем кончится!


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 17:19:35 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
я могу найти готовое решение, которое делал когда-то для ST, подглядывая у чужого для PIC, если надо...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 17:25:43 
Друг Кота

Карма: -1
Рейтинг сообщений: 86
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8896
Откуда: .ru
Рейтинг сообщения: 0
ну там же выше подробно...
:roll:
1. протокол NEC
Вложение:
NEC (1).jpg [89.09 KiB]
Скачиваний: 27

2. берём два таймера и одно прерывание в AVR:
-када прилетают импульсы с TSOP - срабатывает прерывание (прерывание по изменению уровня).
-первый таймер (таймер_1) записывает длительность между прерываниями.
-второй таймер (таймер_0) определяет окончания посылки.

подробнее...
-изначало МК находятся в режиме SLEEP...
-при обнаружении пакета МК просыпается и переходит в режим приёма... и запускается (таймер_0).
-при каждом изменении уровня вызывается прерывание (прерывание по изменению уровня), измеряется длительность между прерываниями (с помощью таймер_1) и обнуляется таймер (таймер_0).
данные таймера (таймер_1) записываются в массив (68 байт)... для последующей обработки.
Вложение:
время пробуждения.jpg [147.76 KiB]
Скачиваний: 22

-по окончанию пакета вызывается прерывание таймера (таймер_0).
Вложение:
обработка пакета.jpg [156.94 KiB]
Скачиваний: 25

-обрабатываем полученные данные из массива (68 байт).
//TSOP:
//4*8*2 = 64 бит + 4 преамбула = 68 байт
Вложение:
NEC.jpg [81.75 KiB]
Скачиваний: 19

после обработки массива (68 байт) на выходе имеем 4 байта данных: 00 FF 01 FE

всё просто))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 17:28:00 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
не надо два таймера, достаточно одного.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 17:42:34 
Друг Кота

Карма: -1
Рейтинг сообщений: 86
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8896
Откуда: .ru
Рейтинг сообщения: 0
для Прием команд с ик-пультов достаточно одного таймера... например (таймер_1).

но мне нужно два таймера... потому что у меня универсальный приёмник... кроме Прием команд с ик-пультов мой приёмник принимает и другие пакеты... по локальной сети умного дома))

два таймера (16 битный - таймер_1) и (8 битный - таймер_0) позволяют более гибко настраивать разные режимы работы моего приёмника и т.д. и т.п.
я не делаю что-то одно)) я делаю всё универсальным))
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 17:48:28 
Друг Кота

Карма: 67
Рейтинг сообщений: 1964
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 1
И в этом случае достаточного одного таймера. Но ТС вроде не спрашивал про возможность приёма данных из локальной сети Вашего дома, или я ошибаюсь?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 18:45:05 
Друг Кота

Карма: -1
Рейтинг сообщений: 86
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8896
Откуда: .ru
Рейтинг сообщения: 0
о чем спрашивал ТС... нам расскажет сам ТС )) ТС говорить умеет...
сурдопереводчик нам не нужен))
Вложение:
)).jpg [36.19 KiB]
Скачиваний: 34

:tea:

Добавлено after 27 minutes 58 seconds:
Есть ли пример кода на C, только без библиотек.

Есть.

допустим сделаем на таймере_0:
:tea:

-берём mega328p:
#include <mega328p.h> //RC - 8 МHz

-переключаем на 8 МHz:
//ATmega328:
//начальное: RC - 1 МHz: Higt D9; Ext 07; Lok 3F; Low 62
// RC - 8 МHz: Higt D9; Ext 07; Lok 3F; Low E2

-создаём массив... куда писать будем... ))
unsigned char Modem_int[]={
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //32

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //64

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //96

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //128

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //160

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //192

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //224

0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 //256
};

-добавляем флаги... всякие))
unsigned char Modem_flag_full; // Modem флаг полный

-добавляем прерывание таймера_0
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
/////////////////////////////////////////////// выкл Timer 0
TCCR0B=0x00; // выкл Timer 0
//TCCR0B=0x01; // вкл Timer 0 (8мгц /1 -делитель) =0,000.032 с
//TCCR0B=0x05; // вкл Timer 0 (8мгц /1024 -делитель) =0,032.768 с
TCNT0=0x00; // сброс счёт Timer 0
/////////////////////////////////////////////// флаги:
Modem_flag_full = 1; // вкл Modem флаг полный
///////////////////////////////////////////////
}

-добавляем счётчик...
unsigned int Modem_len; // Modem_len // int

-добавляем прерывание...
//Pin change 16-23 interrupt service routine (PD0...PD7)
interrupt [PCINT2] void pin_change_isr2(void)
{
TCCR0B=0x05; // вкл Timer 0 (8мгц /1024 -делитель) =0,032.768 с
/////////////////////////////////////////////// запись Timer 0
Modem_int[Modem_len] = TCNT0; // Timer 0 > Modem_int (0...255)
Modem_len++; // счёт Modem_len // int
if (Modem_len > 255) {
Modem_len = 255;
};
/////////////////////////////////////////////// сброс Timer 0
//TCCR0B=0x00; // выкл Timer 0
//TCCR0B=0x01; // вкл Timer 0 (8мгц /1 -делитель) =0,000.032 с
//TCCR0B=0x05; // вкл Timer 0 (8мгц /1024 -делитель) =0,032.768 с
TCNT0=0x00; // сброс счёт Timer 0
///////////////////////////////////////////////
}

-в main настраиваем пины... куда TSOP подключать будем...
void main(void)
{
/////////////////////////////////////////////// RX_TV
DDRD.1=0; // вход RX_TV
PORTD.1=1; // вход RX_TV +

-настраиваем таймер_0
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00; // режим - нормальный
TCCR0B=0x00; // выкл Timer 0
//TCCR0B=0x01; // вкл Timer 0 (8мгц /1 -делитель) =0,000.032 с
//TCCR0B=0x05; // вкл Timer 0 (8мгц /1024 -делитель) =0,032.768 с
TCNT0=0x00; // сброс счёт Timer 0
OCR0A=0x00;
OCR0B=0x00;

-разрешаем прерывание Timer 0
// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x01;

-разрешаем прерывание на пины... куда TSOP подключать будем...
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// Interrupt on any change on pins PCINT0-7: On (PB7...PB0)
// Interrupt on any change on pins PCINT8-14: On (PC6...PC0)
// Interrupt on any change on pins PCINT16-23: On (PD7...PD0)
EICRA=0x00;
EIMSK=0x00;
PCICR=0x07;
PCMSK2=0b00101010; //вкл (PD7...PD0) // TV
PCIFR=0x07;

-разрешаем глобальное прерывание
///////////////////////////////////////////////////////Global enable interrupts:
#asm("sei") // вкл Global Interrupts

-в главное цикле ждём пока установится флаг окончания приёма пакета от TSOP...

_1:
if (Modem_flag_full == 0) {
goto _1; // > _1
};
Modem_flag_full = 0; // сброс флаг RX_Modem полный

-обрабатываем массив данных...
//TSOP:
//4*8*2 = 64 бит + 4 преамбула = 68
...
...
...

-на выходе имеем 4 байта данных: 00 FF 01 FE
...

goto _1; // > _1

всё просто))
:tea:

на выходе имеем 4 байта данных: 00 FF 01 FE

где:
07h - адрес устройства (SAMSUNG).
07h - адрес устройства (SAMSUNG).
68h - адрес команды (номер кнопки).
97h - инверсия адреса команды (номер кнопки).

все кнопки уже подписаны))
Вложение:
пульт_SAMSUNG.jpg [79.5 KiB]
Скачиваний: 24

:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Прием команд с ик-пультов.
СообщениеДобавлено: Пт май 03, 2024 20:04:56 
Электрический кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 47
Зарегистрирован: Вс мар 01, 2009 19:47:16
Сообщений: 1046
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
roman.com, о, а вот так уже гораздо понятнее и приятнее. Спасибо, плагиатить не буду, а вот как пример себе пометочку сделаю. Для моих задач в коде конечно лишнего много, но сам смысл понятен. :beer:

_________________
Не важно чем все начнется. Важно чем кончится!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: ДядяВован и гости: 26


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y