EugenArt

описание протокола IP-BUS фирмы pioneer

2 сообщения в этой теме

EugenArt    0

Всем доброго времени суток!

в поиске не смог найти инфо, поэтому создал тему, не ругайте, если ошибся с веткой.

Идея следующая, есть автомагнитола deh-3600MP c выходом Ip-bus.Хочу подружить магнитофон с мп3 плеером (есть от фм-трансмиттера, завтра куплю платку отдельного мп3). Сразу подчеркну, что хочу управление плеером (треки, теги, пауза и т.д) с головного устройства.

предполагаю схему так:  ip-bus - avr - mp3 player.

алгоритм avr-mp3 несложен и открыт, а вот описание протокола ip-bus нигде нет, форум витат.спб уже изучил, есть кусок кода работы авр и ip-bus, но не очень понятно, может подскажете набор команд ip-bus или что происходит по событию нажатию кнопки вперед/назад.

Заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
mr_smit    23
В 27.08.2017 в 15:31, EugenArt сказал:

а вот описание протокола ip-bus нигде нет

И не будет.

Я недавно интересовался темой. Даже собрал сниффер шины на STM32 (между Pioneer 88 и CD чейнджером). Но поскольку это просто интерес, то пока времени на продолжение не нахожу.

Эта шина на основе IEBUS. Фирма NEC в одном из своих datasheet дала спецификацию на этот протокол. Т.е. теперь выделить данные на шине не проблема, проблема понять что за информация там передается. Тут только сидеть и анализировать. А это долго и муторно. Поэтому пока мне лень этим заниматься.

скрин.jpg

datasheet.pdf

Изменено пользователем mr_smit
  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: Atreides
      Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
    • Автор: Максим Окатов
       
      Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию MinU() в которой инициализирует таймер для задержки(ждем отпустит пользователь кнопку или нет) если кнопка не отпущена то уменьшаем скважность ШИМ.
      проблема в выделенной красным строчке! когда count больше 3 уменьшаем скважность, но в отладчике AVR studio, Proteus и в железе не робит.
      Перепрыгивает действие в {} так будь-то условие не выполнено...
      #define F_CPU 1000000L
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <util/delay.h>
      unsigned char count = 0;
      unsigned char a=5,s=3,b=0;
          //===================================Насройка таймера====================
      void Timer_ini(void){
         TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10);
         TCNT1 = 65535-976;
         TIMSK |= (1<<TOIE1);
         count = 0;
        }
          //===========================настройка шим===========================
      void PWM_ini(void){
         ASSR=0x00;
         TCCR2=0b01101110; //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ
         OCR2=200;
      }
      //===============
      void MinU(){
          unsigned char i=0;
          Timer_ini();
          while (!(PINB&0b00000010)){
              if(count>2){        //Если таймер считал более двух раз
                _delay_ms(100); // ждем 100 мс
                OCR2--; // Уменьшаем скважность
                i=1;        // были в плавном уменьшении
            }
            
         }
         if (i!=1) // если не были в плавном уменьшении
         {
             OCR2=OCR2-50;
             i=0;
         }
      }
              //=======================================================
      int main(void)
          {
             
              // Настраиваем порт D на выход
              DDRB = 0b00001000;
              PWM_ini();
              //Timer_ini();
              sei();
              
              
              while(1)
              {
                  b=a-s;
                  if (!(PINB&0b00000010))
                  {
                      MinU();
                  }/*
                  //if (!(PINB&0b00000100))
                  //{
                      //PlsU();
                  //}*/
              }
              return 0;
          }
          
          ISR (TIMER1_OVF_vect)
          {
              count++;
              TCNT1 = 65535-976;
                  }
       
       
       
    • Автор: Serg_Mang
      Можно ли залить в arduino прошивку, предназначенную для чистого AVR?
    • Автор: Дмитрий Мартынов
      Здравствуйте!
      Пишу программу на C++ для управления LCD (HD44780) по I2C через модуль расширения портов ввода/вывода PCF8574AT.
      void LCD_I2C::readBF() { transmitByte(0b00001110); //transmits E, RW set to HIGH and RS, set to LOW _delay_ms(5); transmitByte(0b00001010); //transmits E, RS set to LOW and RW set to HIGH _delay_ms(5); initRestart(); transmitAddrRW(0b01111111); //sends PCF8574AT address + SLA+R do { receiveDataAck(); PORTA = storage; } while((storage & (1 << BF)) != 0); //wait until BF is 0 initRestart(); transmitAddrRW(0b01111110); } Метод void transmitByte(uint8_t data) после инициализации состояния "Старт" и отправки адреса устройства + SLA+W отправляет байт данных по TWI с ожиданием бита подтверждения (команды работают верно, проверял по регистру статуса TWI - 0x08, 0x10 и 0x24).
      Метод void transmitAddrRW(uint8_t address) отправляет соответственно SLA+W/R + адрес устройства (команда работает также верно). Нареканий к работе TWI у меня нет, т.к. недавно с его помощью успешно запустил часы DS1307 с интеграцией LCD.
      После передачи запроса на чтение флага занятости инициализируется состояние "ПОВСТАРТ", отправляется адрес устройства + SLA+R, далее идет цикл - запрос байта данных (состояние выводов PCF8574AT) с отправкой бита подтверждения uint8_t receiveDataAck() (команды работают также верно, возвращает storage = TWDR) и вывод storage на порт А микроконтроллера (там установлены светодиоды).
      Чтение регистра данных TWDR после принятия байта данных (receiveDataAck()) дает следующий результат - 0b00000010 - установлен только бит RW микросхемы. Таким образом, флаг занятости BF = DB7 = 7й бит оказывается сразу же сброшенным, происходит мгновенный выход из цикла - контроллер дисплея не успевает скушать информацию, и инициализация не выполняется (неудачную инициализацию определяю по отсутствию курсора). Ожидалось, что флаг занятости будет установлен в единицу и произойдет несколько итераций перед выходом из цикла.
      При замене метода ожидания сброса флага занятости BF на программную задержку в 250 мс везде, где это требует datasheet - инициализация происходит успешно (появляется курсор, как и должно быть).

      Вопрос: что можно сделать, чтобы вместо _delay_ms(250) использовать readBF(), т.к. этот путь мне кажется более верным (уж очень не хочется использовать задержку .__.)? Возможно, проблема в микросхеме, которая неверно выдает информацию при чтении? (Имеется вторая микросхема, она вообще не работает:D)

      З.Ы. На фото виден результат чтения флага BF и Adress Counter - установлен только бит RW.  



      З.Ы.Ы Кому интересно - вот функция main(). Повторюсь - проблема только в методе readBF():
      void LCD_I2C::init() { setBitRate(20000); initStart(); transmitAddrRW(0b01111110); //send PCF8574AT address + SLA+W _delay_ms(60); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(20); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(5); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(5); sendInstruction(0b00100000); //function set 4-bit operation readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00100000); //function set 4-bit operation, 2 lines, 5x8 dots sendInstruction(0b10000000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display off, cursor off, blinking off sendInstruction(0b10000000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display clear sendInstruction(0b00010000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //entry mode set increment, display shift off sendInstruction(0b01100000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display on, cursor off, blinking off sendInstruction(0b11100000); readBF();/ }  
    • Гость Сергей
      Автор: Гость Сергей
      здравствуйте. ребята помогите разобраться  с программой 
      задача программы мигать светодиодами и менять тетрады при внешнем прерывании
      всё хорошо только одно но! если по шагово смотреть процесс в avr studio 4 то доходя до команды call её  не получается активировать. То есть в подпрограмму не получается зайти, после этой команды переходит к следующей команде. ЗАГРУЖАЮ В Мк atmega16A программа не работает
      подскажите пожалуйста в чём косяк  что я не правильно делаю
      .include"m16def.inc"
      .ORG 0x0000          // адрес прерывания по сбросу
           JMP start       // переход на метку start
      .ORG 0x0024          // адрес прерывания INT2
           JMP int_2       // переход на обработчик прерывания INT2
      .ORG 0x002A          // адрес начала программы
      start:
      //**** инициализация стека ****
           LDI R16, 0x04   ;// загрузка в R16 числа 0x04
           OUT SPH, R16    ;// пересылка числа 0x04 из R16 в регистр SPH
           LDI R16, 0x5F   ;// загрузка в R16 числа 0x5F
           OUT SPL, R16    ;// пересылка числа 0x5F из R16 в регистр SPL
      //**** инициализация прерывания ****
           LDI R16, 0b00100000
           OUT GICR, R16   ;// разрешение прерывания INT2
           LDI R16, 0b00000000
           OUT MCUCSR, R16 ;// прерывание по спадающему фронту сигнала ("H->L")
      //**** инициализация порта С ****
           SER R16         ;// установка всех бит регистра R16 в "1"
           OUT DDRC, R16   ;// инициализация порта C (работает как выход)
      //**** загрузка R16 и R17 ****
           LDI R16, 0b11110000  ;// значение 0xF0
           LDI R17, 0b11100111  ;// значение 0xE7
      SEI             ;// установка флага глобального прерывания
      m1:                  ;// метка начала цикла основной программы
           OUT PORTC, R16  ;// вывод на светодиоды содержимого R16
           CALL wait       ;// вызов подпрограммы задержки
           OUT PORTC, R17  ;// вывод на светодиоды содержимого R17
           CALL wait       ;// вызов подпрограммы задержки
           RJMP m1         ;// переход на метку m1
      //**** подпрограмма задержки на 800 мкс (при f=1 МГц) ****
      wait:                ;// метка по которой вызывается подпрограмма
           PUSH R17        ;// сохранение [R17] в стеке
           LDI R17, 200    ;// загрузка в R17 константы задержки (200 циклов)
      w1:                  ;// метка цикла задержки на 800 машинных тактов
           NOP             ;// пустая команда (добавляет 1 такт в цикл задержки)
           DEC R17         ;// декрементирование R17 (уменьшение на 1)
           BRNE w1         ;// если не обнулился R17, продолжать цикл
           POP R17         ;// восстановление содержимого R17 из стека
           RET             ;// выход из подпрограммы задержки
      //**** обработчик прерывания INT_2 ****
      int_2:
           SWAP R16        // поменять тетрады R16 местами
         RETI            // выход из подпрограммы обработчика прерывания
  • Сообщения

    • Можешь тупо взять АС с активным усилителем (пластиковые АС для ПК), но тебе это не поможет, те нужно в школу в 8 класс.
    • В общем поигрался. Убрал С3 вообще- молчит. Посмотрел клипп 20 к- сильно козявит. Поставил 100 пФ-нормально. Пока оставлю так. Частота среза за 30 к.  По входу поставил 2К/220 пФ= 360 кГц. Увеличиваем частоту- лезет выброс. Ну его.
    • Товарищи. подарите мне пожалуйста на день рождения (сегодня) кусочек канифоли. В пределах 100р. посылку оплачу.
    • Настрой боевой на самом деле)) Вот интересный момент пока не нахожу обьяснения. Пытаюсь передавать отладочную информацию по USB STM32F103C8T6 народный. Функция CDC_Transmit_FS отсутствует в документации почему то. Если я  запускаю ее в цикле то она работает. Создаю отдельный .h .c файлы для функций. В нем пишу функцию которая принимает строку из UART посимвольно и по формату &AXXX\0 Начало и конец пакета,название переменной и значение.  Вот как так можно было сделать функцию приема в которой я должен знать длину сообщения... от куда я могу ее знать?)) что там тот же GSM модуль скажет?) Долго думал но так и не понял зачем это сделали. Но фиг с ним можно символы принимать складывать и т.д это мы умеем.   В общем имею функцию void HAL_UART_RxCpltCallback(UART_HandleTypeDef * UartHandle)  По вашим  же рекомендациям стал принимать в ней. Все работает спасибо за наводку. В ней же отправляю в USB данные для отладки. sprintf(str_tx, "Valve = %s\n", valve);
      CDC_Transmit_FS((uint8_t*)str_tx, strlen(str_tx)); Все отправляет нормально. Но дальше строку мне надо разобрать по этому я делаю функцию paser_uart2(char* valve) в которую передаю свою строку. Разбираю строку, все норм. Но при попытке отправит хоть что то в USB ни чего не отправляется. Удалю весь код из функции отставляю просто отправку строки char test[] = "Test";
      CDC_Transmit_FS((uint8_t*)test, strlen(test)); И тишина отправляет только из колбэка, что выходит за рамки моего понимания))
    • pips когда ты наконец найдёшь свою петлю,  через землю USB и через джек на 3,5, а вот как тебе её удастся побороть это другой разговор. Ты же решил создать себе трудности ? Вот теперь и борись с ними.
    • @Pont 007  за слова "Твоя задача не делать земляных петель это для тебя первостепенно" спасибо.  Но схема выше мне ничего внятного не дала зачем мне usb-цап, если речь идет немножко о другом оУНЧ на ОУ. А на этом ЦАПЕ PCM2704DB, питалово сразу в микросхему идет.
    • Пишим, не стесняемся задавать вопросы. Торг всегда уместен. Ценнег 3000руб.