о чем спрашивал ТС... нам расскажет сам ТС )) ТС говорить умеет...
сурдопереводчик нам не нужен))
Вложение:
)).jpg [36.19 KiB]
Скачиваний: 34
Добавлено after 27 minutes 58 seconds:Есть ли пример кода на C, только без библиотек.
Есть.
допустим сделаем на таймере_0:
-берём 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
всё просто))

на выходе имеем 4 байта данных: 00 FF 01 FE
где:
07h - адрес устройства (SAMSUNG).
07h - адрес устройства (SAMSUNG).
68h - адрес команды (номер кнопки).
97h - инверсия адреса команды (номер кнопки).
все кнопки уже подписаны))
Вложение:
пульт_SAMSUNG.jpg [79.5 KiB]
Скачиваний: 24
