Автомагнитола+Ардуино+Планшет

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Здравствуйте, уважаемые!

Возможно я создал тему не в том разделе (модераторы, поправьте), поскольку проект не реализован.

Суть проекта:

Поставить планшет, как управляющий и отображающий орган автомагнитолы (в идеале - любой). Как контроллер выступает ардуино.

Исходя из того, что магнитолы под андроид стоят порядочно, при том, что обычные автомагнитолы и китайские планшеты стоят понятных денег, хотелось их совмстить. Тем более, что в андроид магнитолах большИе деньги берутся за усилительный тракт, приемники, корпус и т.д.

Исходная информация:

Львиная доля магнитол (за все не скажу - просто нет информации) построена по следующему принципу - Основной блок магнитолы, содержащий ЦП, усилитель, тюнер, CD и т.д. соединяется с HID (орган отображения и управления) с помощью IC2 подобного интерфейса. Отдельными контактами проходят обычно: кнопка включения, энкодер, подсветка.

Идея:

Перехватить сигналы управления и отображаемой информации от основного блока ардуинкой и передать на планшет по USB. Управление с планшета по USB передавать через ардуинку на центральный блок (ЦБ). Отключать или не отключать дисплей магнитолы, пока не ясно. Хотя между ним и ЦБ идет бешеный обмен информацией, что может помешать корректному управлению.

Что сделано:

1. Раскурочена магнитола от CAMRY v40. Определена микросхема, управляющая дисплеем (NEC mPD16432B). Скачан ее даташит.

2. Ардуинка подключена к дисплею и написан скетч. Дисплей прекрасно управляется и выводит информацию.

3. К ардуинке подключены ЦБ с дисплеем в режиме считывания информации. Написан скетч.

Что не получилось:

А ничего - информация, считываемая ардуинкой, полный бред.

Изначально я считывал информацию стандартными digitalRead(), но скорости считывания не хватало. Перешел на PIND, сократил операции по максимуму, практически чистый си. Все равно бред...

Вопросы:

1. Актуальное время синхроимпульсов (по документации) 400нс. Где - то на границе возможностей ардуинки. Или я ошибаюсь?

2. Если ардуинка не тянет, то что посоветуете. Хотелось бы что-то с компиляторами си и библиотеками. На ассемблере такой проект не потяну.

Не привожу скетчи - они со злостью кучу раз переписывались не комментируясь, стыдно малость.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Нашел программу управления дисплеем. Кривенькая и кое-что отключено.

//Программа управления микросхемой nec d16432b

/* 
#define rst_pin 3 //Пин ресет выход нормально High
#define stb_pin 4 //Пин передачи данных High - передача данных, Low нет
#define data_pin 5 //Пин данных вход/выход
#define sck_pin 6 //Пин синхро данных выход
#define key_pin 7 //Пин запроса клавиш вход
#define lcdoff_pin 8 //Пин выключения LCD нормально High
*/
byte dat[8];
byte i;
byte datLCD;
char Abc;
byte Babc;
void setup() {
  // put your setup code here, to run once:
/*  D3_Out; 
  D4_Out;
  D6_Out;  
  D8_Out;
  D7_In;
  D5_Out; //Пока на выход
  D3_Hihg; //Подтягиваем ресет
  D8_Hihg; //Подтягиваем выключение LCD
  D6_Hihg; //строб начинаем с HIGT
  D4_Low; //Передачи нет
  */
  Serial.begin(9600);
 for (int j=0; j<=7; j++) {
  dat[j]=j*10;
}  
  datLCD=B11111111;
}
void loop() {
  // put your main code here, to run repeatedly:

  //Инициализация LCD
Abc= '!';
Babc=(byte)Abc;
Serial.println(Babc);
 for (int j=0; j<=190; j++) {
Serial.println(Abc++);
 }
writeComandByte(B00000111,dat,8);
datLCD |=(1<<3);
writeComandByte(B00000111,&datLCD,1);
datLCD &=~(1<<3);
writeComandByte(B00000111,&datLCD,1);
datLCD |=(1<<3);
writeComandByte(B00000111,&datLCD,1);

/*  writeByte(05); //Команда(1)  Display setting command 1/15 duty, master, internal drive
  writeByte(0311); //Команда(2)Status command LCD off, LED off, key scan operation
  writeByte(0100); //Команда(3) Data setting command Display data RAM, increment
  D4_Hihg; //Передача включена
  writeManyByte(0200); //Команда(4) Address setting command Display data RAM: 0H
  dat = 0x22;
  for (i=0x0; i<=0x18; i++){
    writeManyByte(dat++); //Пишем какие-то данные на дисплей
  }
  D4_Low; //Передача выключена
  delay_us(1); //Пауза
  D4_Hihg; //Передача включена
  writeManyByte(0101); //Команда(5)Data setting command Character display RAM, increment
  dat = 0xFF;
    for (i=0x0; i<=0x7; i++){
   writeManyByte(dat); //Включаем все спецсимволы
  }
  D4_Low; //Передача выключена
  delay_us(1) ; //Пауза
  D4_Hihg; //Передача включена
  writeManyByte(0103); //Команда(6)Data setting command
  writeManyByte(0xF); //Включаем все светодиоды
  D4_Low; //Передача выключена
  delay_us(1) ; //Пауза
  writeByte(0316);//Команда(7)Status command LCD on, LED on, key scan operation
  delay_ms(1000) 
  */
} 

//Подпрограмма передачи байта с включением 
void writeComandByte(byte cmd, byte data[], int8_t n){
 
//  D4_Hihg; //Передача включена
    writeByte(cmd);

  for(int8_t i = 0; i < n; i++) {
   writeByte(data[i]);
  }
//  D4_Low; //Передача выключена
//  delay_us(1) ; //Пауза
}
  
void writeByte(byte data){
 
  Serial.println(data, BIN);
  }

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Суть проекта. Если Вы надеетесь сэкономить, то Вас ждет разочарование: проект либо обойдется значительно дороже, чем аналогичный покупной, либо будет существенно проигрывать серийному изделию по характеристикам (качеству).

2. Идея. Автомагнитолы обычно проектируются так, чтобы не сильно отвлекать водителя от процесса управления ТС. Судя по описанию, Ваш проект существенно отличается по этому параметру. Либо Вы не сможете пользоваться изделием, либо очень скоро попадете в аварию.

3. Вопросы. Не зная, что именно Вы хотите сделать, "тянет/не тянет" определить невозможно. В конце концов, Ардуино - устройство для управления внешними аппаратными устройствами. Все, что не тянет программно, следует делать аппаратно и управлять им с помощью Ардуинки.

4. Исходник. И что, это правда работает?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Соглашусь с предыдущим аратором, выполнение такова проэкта будет стоить раза в 3-5 дороже готовой автомагнитолы с ведроидом. 

Но если сам будешь делать - флаг в руки и барабан на шею. Через год-два может что и получится. 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Ну первые, как положено, троли :)

Не разбираясь в теме - сразу обг... охаять.

1. Значительно дороже это почему? Софт дорогой :)? Или ардуинка? А удобство от софта зависит ИМХО.

2. Магнитолы проектируют люди и самые удобные решения никто не мешает использовать.

3. Вы тут, ИМХО, не компетентны. Не стоило комментировать.

4. Работает.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Ну я понял:

1. Дорогое USB-UART вместо 100 рублей за пучек стало 120!