Реализованное управление магнитолой Kenwood KDC-X5000BT резистивными кнопками.
Съемная панель подключена с использованием слота AGP и видеокарты AGP двумя кабелями витой пары. Полевой транзистор (CEB603) выпаян из той же материнской платы, где и взят слот AGP.
Исходник по отправке команд взят из темы по протоколу NEC.
Мной добавлена обработка кнопок и собственно сами команды.
Огромная сложность составляет найти полный набор команд для управления магнитолой. Официалы делают вид что не понимают , а потом вежливо отказывают.
При подборе команд помогла информация по пульту дистанционного управления Kenwood RC-547
Мной был опробован перебор всех команд, но дойдя до  регистра D  я остановился.

D9 -  полный ресет (до заводских установок)
D8 - вызывает зависание
DC - запрос на ввод серийного номера (дальше я не стал экспериментировать)

Код:
                                    'Передача NEC команд (эмуляция пульта). ИК диод на ноге PORTD.6 напрямую (без ключа).
                                     'Кнопка на PIND.0 на массу - собственно эмуляция пульта. Байты адреса и команды заданы переменными стационарно.

$regfile = "m328pdef.dat"                                   '
$crystal = 16000000                                         '
$hwstack = 32
$swstack = 24
$framesize = 24
$baud = 19200

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim Adc_value As Word
Dim Adc_value_old As Word
Dim Adc_value_offset As Word
Dim Ad_value As Single
'-------------------------------------------------------------------------------
'       Конфигурация портов
'-------------------------------------------------------------------------------                                                 '
Set Ddrd.6                                                  ' Настройка пина PORTD.6 на выход
Set Ddrb.5                                                  ' Настройка пина PORTB.5 на выход
'Reset Ddrd.0                                                ' Настройка пина PORTD.0 на вход
'Portd.0 = 1

Led Alias Portb.5                                           ' Светодиод индикации
'Button Alias Pind.0                                         ' Кнопка - режим передачи данных NEC

'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
' Конфигурация таймеров
'-------------------------------------------------------------------------------
Tccr0a.wgm01 = 1                                            ' Задаем режим ШИМ  CTC на TIMER0
'Tccr0a.com0a0 = 1                                           ' Подключение выхода ШИМ на PORTD.6
Tccr0b.cs00 = 1                                             ' Запуск таймера с   Prescale = 1

Ocr0a = 209                                                 ' Настройка частоты ШИМ F = 160000/2*Prescale*(1+Ocr0a)  = 38095 Гц


Tccr2a.wgm21 = 1                                            ' Задаем режим ШИМ  CTC на TIMER2
Tccr2b.cs21 = 1                                             ' Запуск таймера с   Prescale = 8

Ocr2a = 225                                                 ' Настройка частоты прерываний от TIMER2 F=16000000/Prescale*Ocr2a = 8888,88 Гц  = 112,5 мкс

Config Timer1 = Timer , Prescale = 256                      ' Настройка таймера1 на переполнение каждые Т= Prescale * 65536/F = 64*65536/16000000= 0.262144 сек     Т= Prescale * 65536/F = 8*65536/16000000= 0.033 сек
'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
' Настройка прерываний
'-------------------------------------------------------------------------------
Timsk2.ocie2a = 1                                           ' Разрешаем прерывание по совпадению Compare Match A для TIMER2

Enable Timer1                                               ' Разрешаем прерывание по переполнению TIMER1
Start Timer1                                                ' Запуск TIMER1
Enable Interrupts                                           ' Разрешаем прерывания
On Compare2a Time_counter_nec                               ' Прерывания по совпадению для TIMER2. Для отсчета временных интервалов NEC протокола
On Timer1 Timer1_int                                        ' ПП обработки прерываний от TIMER1
'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
' Опеределение переменных
'-------------------------------------------------------------------------------
Const Preset_110ms = 977                                    ' Предустановка счетчика на 110 мс
Const Preset_40ms = 360                                     ' Предустановка счетчика на 40 мс    для повтора
Const Preset_9ms = 80                                       ' Предустановка счетчика на 9 мс
Const Preset_4_5ms = 40                                     ' Предустановка счетчика на 4,5 мс
Const Preset_2_25ms = 20                                    ' Предустановка счетчика на 2,25 мс
Const Preset_1_6875ms = 15                                  ' Предустановка счетчика на 1,6875 мс
Const Preset_562_5us = 5                                    ' Предустановка счетчика на 562,5 мкс

Dim Count_110ms As Word                                     ' Cчетчик на 110 мс
Dim Count_40ms As Word                                      ' Cчетчик на 40 мс
Dim Count_9ms As Byte                                       ' Cчетчик на 9 мс
Dim Count_4_5ms As Byte                                     ' Cчетчик на 4,5 мс
Dim Count_2_25ms As Byte                                    ' Cчетчик на 2,25 мс
Dim Count_1_6875ms As Byte                                  ' Cчетчик на 1,6875 мс
Dim Count_562_5us As Byte                                   ' Cчетчик на 562,5 мкс

Dim Flag_110ms As Bit                                       ' Флаг запуска отрезка времени 110 мс
Dim Flag_40ms As Bit                                        ' Флаг запуска отрезка времени 40 мс
Dim Flag_9ms As Bit                                         ' Флаг запуска отрезка времени 9 мс
Dim Flag_4_5ms As Bit                                       ' Флаг запуска отрезка времени 4,5 мс
Dim Flag_2_25ms As Bit                                      ' Флаг запуска отрезка времени 2,25 мс
Dim Flag_1_6875ms As Bit                                    ' Флаг запуска отрезка времени 1,6875 мс
Dim Flag_562_5us As Bit                                     ' Флаг запуска отрезка времени 562,5 мкс

Dim Nec_bit_send As Byte                                    ' Кол-во отправленных бит
Dim Send_byte As Byte                                       ' Отправляемый байт
Dim Start_send_flag As Bit                                  ' Команда на отправку данных NEC
Dim Nec_repeat_flag As Bit                                  ' Флаг повтора передачи данных

Dim Address(2) As Byte                                      ' Адресс NEC устройства
Dim Command(2) As Byte                                      ' Команда NEC устройства

Dim Code As Integer
Dim Tmp_value As Long

Dim Count As Long
Dim Comand_case As Byte
Dim Pow_on As Integer
Dim Phone_up As Integer
Dim Phone_down As Integer
Dim Mute As Integer
Dim Menu As Integer
Dim Mode_ As Integer
Dim Back As Integer
Dim Forward As Integer
Dim Vol_up As Integer
Dim Vol_down As Integer

Dim Pow_on_plus As Integer
Dim Phone_up_plus As Integer
Dim Phone_down_plus As Integer
Dim Mute_plus As Integer
Dim Menu_plus As Integer
Dim Mode_plus As Integer
Dim Back_plus As Integer
Dim Forward_plus As Integer
Dim Vol_up_plus As Integer
Dim Vol_down_plus As Integer


Dim Pow_on_minus As Integer
Dim Phone_up_minus As Integer
Dim Phone_down_minus As Integer
Dim Mute_minus As Integer
Dim Menu_minus As Integer
Dim Mode_minus As Integer
Dim Back_minus As Integer
Dim Forward_minus As Integer
Dim Vol_up_minus As Integer
Dim Vol_down_minus As Integer


Dim Cnt_code0 As Long
Dim Adc_val(10) As Integer
Dim Adc_value_plus As Integer
Dim Adc_value_minus As Integer
Dim Cnt_code(11) As Long

Dim Cnt_code1 As Long
Dim Cnt_code2 As Long
Dim Cnt_code3 As Long
Dim Cnt_code4 As Long
Dim Cnt_code5 As Long
Dim Cnt_code6 As Long
Dim Cnt_code7 As Long
Dim Cnt_code8 As Long
Dim Cnt_code9 As Long
Dim Cnt_code10 As Long



Dim Pow_on_btn_short As Bit
Dim Phone_up_btn_short As Bit
Dim Phone_down_btn_short As Bit
Dim Mute_btn_short As Bit
Dim Menu_btn_short As Bit
Dim Mode_btn_short As Bit
Dim Back_btn_short As Bit
Dim Forward_btn_short As Bit
Dim Vol_up_btn_short As Bit
Dim Vol_down_btn_short As Bit



Dim Pow_on_btn_long As Bit
Dim Phone_up_btn_long As Bit
Dim Phone_down_btn_long As Bit
Dim Mute_btn_long As Bit
Dim Menu_btn_long As Bit
Dim Mode_btn_long As Bit
Dim Back_btn_long As Bit
Dim Forward_btn_long As Bit
Dim Vol_up_btn_long As Bit
Dim Vol_down_btn_long As Bit

Dim Commmnd_done As Byte
Dim Command_btn As Byte
Dim Ust_btn_short As Integer
Dim Ust_btn As Integer
Dim I As Integer

'-------------------------------------------------------------------------------

'-------------------------------------------------------------------------------
' Опеределение подпрограмм
'-------------------------------------------------------------------------------
Declare Sub Nec_send_command(nec_add0 As Byte , Nec_add1 As Byte , Nec_cmd0 As Byte , Nec_cmd1 As Byte)
Declare Sub Nec_send_repeat()
'-------------------------------------------------------------------------------


Address(1) = &HB9                                           ' direct byte of address адрес магнитолы кенвуд
Address(2) = Not Address(1)                                 'indirect byte of address
Ust_btn = 50                                                ' Значение счетчика соответствующее срабатыванию кнопки без дребезга
Ust_btn_short = 1500                                        ' Значение счетчика соответствующее короткому нажатию
Count = 0
Commmnd_done = 0
Command_btn = 255
Adc_value_offset = 25
Print "Prog v1.0 Address(1) =" ; Address(1)

Pow_on = 826                                                'Питание
Phone_up = 895                                              ' Поднять Трубку
Phone_down = 927                                            'Положить Трубку
Mute = 508                                                  'Выключить Звук
Menu = 649                                                  'Меню
Mode_ = 736                                                 ' Моде
Back = 578                                                  'Наза
Forward = 395                                               'Вперед
Vol_up = 245                                                'Звук Меньше
Vol_down = 106                                              'Звук Больше

Adc_val(1) = 826                                            'Питание
Adc_val(2) = 895                                            ' Поднять Трубку
Adc_val(3) = 927                                            'Положить Трубку
Adc_val(4) = 508                                            'Выключить Звук
Adc_val(5) = 649                                            'Меню
Adc_val(6) = 736                                            ' Моде
Adc_val(7) = 578                                            'Наза
Adc_val(8) = 395                                            'Вперед
Adc_val(9) = 245                                            'Звук Меньше
Adc_val(10) = 106                                           'Звук Больше





Do
  Adc_value = Getadc(0)


    '(
   №№№№№№№№№№№№№№№№№№№№№№№ Обработка Длительности Нажатия Кнопок №№№№№№№№№№№№№№№№№№№№№№№№ Начало №
   при нажатии кнопки считаем сколько циклов эта кнопка была нажата. Если прошло немного времени то короткое нажатие иначе длинное.

')
   Code = 0
   For I = 1 To 10

      Adc_value_plus = Adc_val(i) + Adc_value_offset        'задаем область срабатывания
      Adc_value_minus = Adc_val(i) - Adc_value_offset       'задаем область срабатывания

      If Adc_value > Adc_value_minus Then                   'если напряжение в нужной области (нажата определенная кнопка)
         If Adc_value < Adc_value_plus Then                 'если напряжение в нужной области' (нажата определенная кнопка)

            Cnt_code(i) = Cnt_code(i) + 1                   ' считаем сколько циклов(времени) была нажата кнопка
            Code = I                                        ' указатель что кнопка была нажата

         End If
      End If

   Next







    If Code = 0 Then                                        'если кнопка не была нажата , то считаем сколько циклов(времени) прошло
       Cnt_code0 = Cnt_code0 + 1
    Else
        Cnt_code0 = 0                                       ' если нажата какая нибудь кнопка то сброс счетчика не нажатия
    End If

 If Cnt_code0 > 50 Then                                     ' прошло несколько циклов после отпускания кнопки (так исключается дребезг)
   Commmnd_done = 0
  For I = 1 To 10


                          If Cnt_code(i) > Ust_btn And Cnt_code(i) <= Ust_btn_short Then       ' Если счетчик имеет небольшое значение значтит Нажатие Было Кратковременным
                           Command_btn = 255                ' сброс всех команд  перед выбором команды
                           'Print "short Adc_value=" ; Adc_value ; Chr(13)       'debug
                           'Print "step1 Cnt_code" ; I ; "=" ; Cnt_code(i) ; Chr(13)       'debug

                           Select Case I
              Case 1 :

              Case 2 : Command_btn = &H92                   '  0x92                 'Phone                              Поднять Трубку кратковременное Phone up (2)

              Case 3 :

              Case 4 : Command_btn = &H16                   '  0x16 (без повторов)  'ATT              включить /выключить звук          кратковременное Mute  (4)

              Case 5 : Command_btn = &H17                   ' нажатие кнопки энкодера

              Case 6 : Command_btn = &H13                   '  0x13 (без повторов)  'SRC              Источник (радио блютуз ЮСБ и.т.д) кратковременное Mode  (6)

              Case 7 : Command_btn = &H0A                   '  0x0A                 'Left                                                кратковременное вперед (8)

              Case 8 : Command_btn = &H0B                   '  0x0B                 'Right                                               кратковременное Назад  (7)


              Case 9 : Command_btn = &H15                   '  0x15                  'VolumeDn         звук меньше                       кратковременное Vol- (9)

              Case 10 : Command_btn = &H14                  '  0x14                  'VolumeUp         звук больше                       кратковременное Vol+ (10)


                           End Select
                           If Command_btn <> 255 Then       'если команда выбрана
                                 Print "Command_btn  " ; I ; "short = " ; Command_btn ; Chr(13)       'debug
                           End If

                          End If

                          Cnt_code(i) = 0



  Next
  Cnt_code0 = 0
 End If



 If Code > 0 Then                                           ' кнопки все еще нажаты
  For I = 1 To 10
         If Cnt_code(i) > Ust_btn_short Then
             Command_btn = 255                              ' сброс всех команд  перед выбором команды
           If Commmnd_done = 0 Then                         'проверка на повторное выполнение команды
             Select Case I
      Case 1 : Command_btn = 131
               Commmnd_done = 1
      Case 2:

      Case 3:

      Case 4:

      Case 5 :
                Commmnd_done = 1                            ' подтверждение выполнения (для исключения повтора команды при долгом нажатии)
      Case 6 : Command_btn = &H0E                           ' 0x0E (без повторов)   'Play/Pause                                           ддлинное      Mode  (6++)
                Commmnd_done = 1                            ' подтверждение выполнения (для исключения повтора команды при долгом нажатии)

      Case 7 : Command_btn = &H0C                           '  0x0C                 'Down                                                длинное Назад       (7++)
               Commmnd_done = 1                             ' подтверждение выполнения (для исключения повтора команды при долгом нажатии)
      Case 8 : Command_btn = &H0D                           '  0x0D                 'Up                                                  ддлинное вперед      (8++)
               Commmnd_done = 1
      Case 9:                                               ' подтверждение выполнения (для исключения повтора команды при долгом нажатии)
               Command_btn = &H15                           '  0x15                  'VolumeDn         звук меньше                       кратковременное Vol- (9)

               Commmnd_done = 1                             ' подтверждение выполнения (для исключения повтора команды при долгом нажатии)
      Case 10:
               Command_btn = &H14                           '  0x14                  'VolumeUp         звук больше                       кратковременное Vol+ (10)
               Commmnd_done = 1                             ' подтверждение выполнения (для исключения повтора команды при долгом нажатии)

             End Select
            End If
            'Print "long Adc_value=" ; Adc_value ; Chr(13)   'debug
            'Print "Cnt_code" ; I ; "=" ; Cnt_code(i) ; Chr(13)       'debug
          End If
  Next

 End If

  If Code > 0 Then                                          'ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ установка флагов для срабатывания повторной команды
      For I = 1 To 10
          Tmp_value = Ust_btn_short + Ust_btn_short
           If Cnt_code(i) > Tmp_value Then
               Cnt_code(i) = Ust_btn_short + 1
               Commmnd_done = 0
           End If
      Next
                                                              'ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ установка флагов для срабатывания повторной команды
 End If





'(
   №№№№№№№№№№№№№№№№№№№№№№№ Обработка длительности нажатия кнопок    №№№№№№№№№№№№№№№№№№№№№№№№ КОНЕЦ №
')
                                             For I = 1 To 10
                                                If Cnt_code(i) > 100000 Then Cnt_code(i) = 90000       ' защита от переполнения
                                             Next

'%%%%%%%%%%%%%%%%%%%%%%%%%%%%   Передача команд          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
If Command_btn <> 255 Then
    Command(1) = Command_btn
    Command(2) = Not Command(1)
    Call Nec_send_command(address(1) , Address(2) , Command(1) , Command(2))
    Print "Command = " ; Command_btn                        'debug
    Command_btn = 255
End If


'%%%%%%%%%%%%%%%%%%%%%%%%%%%%   Передача команд          %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   КОНЕЦ %



Loop

End

'-------------------------------------------------------------------------------
' Прерывание от TIMER2 каждые 112,5 мкс
'-------------------------------------------------------------------------------
Time_counter_nec:

    If Flag_9ms = 1 Then                                    ' 9мс для начала пакета. Модуляция
        Incr Count_9ms
        If Count_9ms = Preset_9ms Then
            Count_9ms = 0
            Reset Flag_9ms
            Tccr0a.com0a0 = 0                               ' Выключение модуляции
        End If
    End If

    If Flag_4_5ms = 1 Then                                  ' Пауза 4,5 мс в начале пакета
        Incr Count_4_5ms
        If Count_4_5ms = Preset_4_5ms Then
            Count_4_5ms = 0
            Reset Flag_4_5ms
        End If
    End If

    If Flag_1_6875ms = 1 Then                               ' Пауза. лог. 1 = 2,25 мс = 562,5 мкс + 1,6875 мс
        Incr Count_1_6875ms
        If Count_1_6875ms = Preset_1_6875ms Then
            Count_1_6875ms = 0
            Reset Flag_1_6875ms
        End If
    End If

    If Flag_562_5us = 1 Then                                ' начало бита даннных и оно же равно паузе в лог. 0
        Incr Count_562_5us
        If Count_562_5us = Preset_562_5us Then
            Count_562_5us = 0
            Reset Flag_562_5us
            Tccr0a.com0a0 = 0                               ' Выключение модуляции
        End If
    End If

    If Flag_40ms = 1 Then                                   ' Пауза. 40мс для окончания пакета
        Incr Count_40ms
        If Count_40ms = Preset_40ms Then
            Count_40ms = 0
            Reset Flag_40ms
        End If
    End If

    If Flag_2_25ms = 1 Then                                 ' 2,25мс пауза
        Incr Count_2_25ms
        If Count_2_25ms = Preset_2_25ms Then
            Count_2_25ms = 0
            Reset Flag_2_25ms
        End If
    End If

    If Flag_110ms = 1 Then                                  ' Длина пакета на повторе
        Incr Count_110ms
        If Count_110ms = Preset_110ms Then
            Count_110ms = 0
            Reset Flag_110ms
        End If
    End If


Return



'-------------------------------------------------------------------------------
' Обработка подпрограммы
'-------------------------------------------------------------------------------
Sub Nec_send_command(nec_add0 As Byte , Nec_add1 , As Byte Nec_cmd0 As Byte , Nec_cmd1 As Byte )       ' Отрпавка кода NEC

    Set Nec_repeat_flag                                     ' Сразу разрешаем повтор отправки NEC данных, пока нажата кнопка

    Set Flag_9ms                                            ' Начало отсчета 9 мс
    Tccr0a.com0a0 = 1                                       ' Включение модуляции
    Do                                                      ' Ждем окончания отрезка времени
    Loop Until Flag_9ms = 0

    Set Flag_4_5ms                                          ' Начало отсчета 4,5 мс
    Do                                                      ' Ждем окончания отрезка времени
    Loop Until Flag_4_5ms = 0

    Nec_bit_send = 0                                        ' Обнуляем кол-во отправленных бит
    Do                                                      ' Отправка бит данных
        Incr Nec_bit_send                                   ' Считаем количество бит отправленных данных
        Select Case Nec_bit_send                            ' Определение отправляемого байта
            Case 1
                Send_byte = Nec_add0
            Case 9
                Send_byte = Nec_add1
            Case 17
                Send_byte = Nec_cmd0
            Case 25
                Send_byte = Nec_cmd1
        End Select

        Set Flag_562_5us                                    ' Начало отсчета 562,5 мкс. Передача данных
        Tccr0a.com0a0 = 1                                   ' Включение модуляции
        Do
        Loop Until Flag_562_5us = 0

        If Send_byte.0 = 1 Then Set Flag_1_6875ms Else Set Flag_562_5us       ' В зависимости от значения передаваемого бита устанавливается длина паузы
        Shift Send_byte , Right                             ' Сдвиг битов вправо
        Do
        Loop Until Flag_562_5us = 0 And Flag_1_6875ms = 0   ' Ждем окончания отрезка времени
    Loop Until Nec_bit_send = 32

    Set Flag_562_5us                                        ' Начало отсчета 562,5 мкс. Обозначим окончание передачи последнего бита данных
    Tccr0a.com0a0 = 1                                       ' Включение модуляции
    Do
    Loop Until Flag_562_5us = 0

    Set Flag_40ms                                           ' Начало отсчета 40 мс   - окончание посылки для повтора
    Do                                                      ' Ждем окончания отрезка времени
    Loop Until Flag_40ms = 0
End Sub

'-------------------------------------------------------------------------------
' Обработка подпрограммы
'-------------------------------------------------------------------------------
Sub Nec_send_repeat()                                       ' Повтор отправки NEC
    Set Flag_110ms                                          ' Начало отсчета 110 мс
    Set Flag_9ms                                            ' Начало отсчета 9 мс
    Tccr0a.com0a0 = 1                                       ' Включение модуляции
    Do                                                      ' Ждем окончания отрезка времени
    Loop Until Flag_9ms = 0
    Set Flag_2_25ms                                         ' Начало отсчета 2,25 мс
    Do                                                      ' Ждем окончания отрезка времени
    Loop Until Flag_2_25ms = 0
    Set Flag_562_5us                                        ' Начало отсчета 562,5 мкс. Модуляция
    Tccr0a.com0a0 = 1                                       ' Включение модуляции
    Do
    Loop Until Flag_562_5us = 0
    Do
    Loop Until Flag_110ms = 0
End Sub


'-------------------------------------------------------------------------------
' Прерывание от TIMER1 каждые 0.262144 сек
'-------------------------------------------------------------------------------
Timer1_int:
 '   If Button = 0 Then
 '       Set Start_send_flag                                 ' Разрешаем отправки NEC данных
 '       Set Led                                             ' Индикация
 '   Else
 '       Reset Start_send_flag                               ' Останавливаем отправку NEC данных
 '       Reset Nec_repeat_flag                               ' Сбрасываем флаг повтора
 '       Reset Led                                           ' Индикация
 '   End If
 'Adc_value_old = Adc_value
 'Adc_value = Getadc(0 )
 'If Adc_value_old = 0 Then Adc_value_old = Adc_value
Return


'Protocol NEC (Kenwood modification)
'Address  0x46B9
'
'SRC  0x13 (без повторов)
'ATT  0x16 (без повторов)
'VolumeUp 0x14
'VolumeDn 0x15
'AUD  0x17
'Play/Pause 0x0E (без повторов)
'Up  0x0D
'Down  0x0C
'Left  0x0A
'Right  0x0B
'Phone  0x92
'2-ZONE  0x82
'DIRECT/OK 0x0F (без повторов)
'1  0x01 (без повторов)
'2  0x02 (без повторов)
'3  0x03 (без повторов)
'4  0x04 (без повторов)
'5  0x05 (без повторов)
'6  0x06 (без повторов)
'7  0x07 (без повторов)
'8  0x08 (без повторов)
'9  0x09 (без повторов)
'0  0x00 (без повторов)
'R.VOL Dn 0x81
'R.VOL Up 0x80
'(

void ADC_Conv(void)
{
ADCSRA |= (1<<ADSC); //Запуск первого преобразования (холостое преобразование)
while (ADCSRA & (1 << ADSC)); //Ждать завершения преобразования
ADCSRA |= (1 << ADSC); //Запуск преобразования
while (ADCSRA & (1 << ADSC)); //Ждать завершение преобразования
adc[0] = ADCL; //Запись младшего байта
adc[1] = ADCH; //Запись старшего байта
}


(1) 826 Питание   (1)
(2) 895 Поднять Трубку
(3) 927 Положить Трубку
(4) 508 Выключить Звук
(5) 649 Меню
(6) 736 Моде
(7) 578 Назад
(8) 395 Вперед
(9) 245 Звук Меньше
(10) 106 Звук Больше
')




'Protocol NEC (Kenwood modification)
'Address  0x46B9
'
'  0x13 (без повторов)  'SRC              Источник (радио блютуз ЮСБ и.т.д) кратковременное Mode  (6)
'  0x16 (без повторов)  'ATT              включить /выключить звук          кратковременное Mute  (4)
' 0x14                  'VolumeUp         звук больше                       кратковременное Vol+ (10)
' 0x15                  'VolumeDn         звук меньше                       кратковременное Vol- (9)
'  0x17                 'AUD              кнопка энкодера
' 0x0E (без повторов)   'Play/Pause                                           ддлинное      Mode  (6++)   (без повторов)
'  0x0D                 'Up                                                  ддлинное вперед      (8++)
'  0x0C                 'Down                                                длинное Назад       (7++)
'  0x0A                 'Left                                                кратковременное вперед (8)
'  0x0B                 'Right                                               кратковременное Назад  (7)
'  0x92                 'Phone                              Поднять Трубку кратковременное Phone up (2)
' 0x0F (без повторов)   'DIRECT/OK         7????????                                   Меню  ддлинное        (5++)


'2-ZONE  0x82                          ---------

'1  0x01 (без повторов)
'2  0x02 (без повторов)
'3  0x03 (без повторов)
'4  0x04 (без повторов)
'5  0x05 (без повторов)
'6  0x06 (без повторов)
'7  0x07 (без повторов)
'8  0x08 (без повторов)
'9  0x09 (без повторов)
'0  0x00 (без повторов)
'R.VOL Dn 0x81
'R.VOL Up 0x80
' 0x83                                      выключить питание







'  0x17                 'AUD               кнопка энкодера






' 0x0F (без повторов)   'DIRECT/OK             7????????                                 Меню  ддлинное        (5++)

Вход магнитолы подключен через полевой транзистор. (Схема стандартная. Подключал напрямую с ножки меги на транзистор)
Обязательно повесьте кондер с аналогового входа на землю. Я провозился целый день , пытаясь понять что с измерениями не так (был постоянный дребезг значений), пока не поставил конденсатор.

Распиновка разъема магнитолы
http://s5.uploads.ru/t/EWhSB.jpg

Отредактировано Hex (2017-04-04 15:16:14)