Перейти к содержанию

Написать Скетч Эмулятора Балласта Проектора На Ардуино


martinways

Рекомендуемые сообщения

Возникла необходимость замены родной лампы и балласта проектора Epson на мощный LED. Общение балласта и материнки происходит по 3-м оптронам (по сути двум). Это уже второй по счету проектор, который я взламываю. Аппаратная часть эмулятора реализована при помощи ардуино про мини, к ней подключены 2 оптрона. При работе с родным балластом я записал идущие данные лог анализатором и составляена таблица запросов материнки и ответов балласта. В первом проекторе протокол был довольно простой, мне достаточно было изменить чужой скетч подставив свои данные и все работает идеально. А вот во втором проекторе, более высокого класса уже протокол более сложный, запросы и ответы идут группами, например

Мать:4D 0D

Балласт: 4D 47 59 0D

Мать: 4C 33 46 0D

Балласт: 41 0D

Так вот в старый скетч я уже не мог вписать это дело, так как не знаю принципов его создания в таких случаях и синтаксиса. Обращаюсь к Вам за помощью, кто и за сколько денег сможет написать для меня скетч по моим данным.

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

Определена частота 9600 EVEN

Мать:4D 0D

Балласт: 4D 47 59 0D

Мать:53 0D

Балласт: 53 30 45 0D

Мать: 51 0D

Балласт: 51 32 0D

Мать: 4C 33 46 0D

Балласт: 41 0D

Мать: 51 0D

Балласт: 51 32 0D

Мать: 54 0D

Балласт: 54 31 46 0D

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

Ну и потом идет такое

Мать: 4C 32 46 0D

Балласт: 41 0D

Мать: 44 0D

Балласт: 44 32 45 0D

Ну и снова каждую секунду чередуются

Мать: 51 0D

Балласт: 51 32 0D

Мать: 54 0D

Балласт: 54 32 33 0D

Изменено пользователем martinways
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Вот как пример скетча эмулятора прошлого проектора

int data;
void setup() {
Serial.begin(4800, SERIAL_8E1);
}
void loop() {
}
void serialEvent() {
data = Serial.read();
if (data == 0)
Serial.write(data);
if (data == 0xF2)
Serial.write(0x04);
if (data == 0xF4)
Serial.write(0xFF);
if (data == 0x40)
Serial.write(0x40);
if (data == 0x32)
Serial.write(0x32);
if (data == 0x84)
Serial.write(0x02);
if (data == 0x83)
Serial.write(0x64);
if (data == 0x81)
Serial.write(0x17);
}

И вот другой с переключением режимов

int data;
int StatusLamp;
#define  INIT1  1
#define  INIT2  2
#define  WORK1  3
#define  WORK2  4
void setup() {
 StatusLamp = INIT1;
 Serial.begin(4800, SERIAL_8E1);
}
void loop() {
}

void func_unique_request( int data )
{
switch ( data )
{
 case 0xF2:  Serial.write(0x04); break;
 default:   Serial.write(0xdata); break;
}
}
void func_INIT1( int data )
{
switch ( data )
{
 case 0x00:  Serial.write(0x00); break;
 case 0xF2:  Serial.write(0x04); break;
 case 0xF4:  Serial.write(0xFF); break;
 case 0x40:  Serial.write(0x40); break;
 case 0x32:  Serial.write(0x32); break;
 case 0x84:  Serial.write(0x02); break;
 case 0x83:  Serial.write(0x64); break;
 case 0x81:  Serial.write(0x17); break;
 default  :  func_unique_request(data); break; 
}
// code change status lamp to step2 ( example 0x81 )
if ( data ==  0x81 )   StatusLamp = INIT2;
}

void func_INIT2( int data )
{
switch ( data )
{
 case 0x81:  Serial.write(0x97); break;
 case 0x84:  Serial.write(0x04); break;
 case 0x83:  Serial.write(0x64); break;
 default  :  func_unique_request(data); break;  
}
// code change status lamp to stepX ( example 0x81 )
if ( data ==  0x83 )   StatusLamp = WORK1;
}

void func_WORK1( int data )
{
switch ( data )
{
 case 0x81:  Serial.write(0x98); break;
 case 0x92:  Serial.write(0x1B); break;
 default  : func_unique_request(data); break;
}
// code change status lamp to stepX ( example 0x81 )
if ( data ==  0x81 )   StatusLamp = WORK2;
}

void func_WORK2( int data )
{
switch ( data )
{
 case 0x81:  Serial.write(0x97); break;
 case 0x92:  Serial.write(0x1B); break;
 default  : func_unique_request(data); 
}
if ( data ==  0x81 )   StatusLamp = WORK1;
}

void serialEvent()
{
 data = Serial.read();
switch ( StatusLamp )
{
case INIT1: func_INIT1(data); break;
case INIT2: func_INIT2(data); break;
case WORK1: func_WORK1 (data); break;
case WORK2: func_WORK2 (data); break;
}
}

Изменено пользователем martinways
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...