Вход

Просмотр полной версии : Дисплей климатроника от BMW E90


Murkur
12.07.2014, 10:26
Всем привет.
Имеется панель климатроника от BMW E90 (тот, что на рисунке ниже, где температуру показывает)

36558

Хочу её ипользовать для управления климатом в другой машине на базе Ардуино. Кнопки и светодиоды - это всё понятно, а может кто-то подскажет, как запустить однострочный дисплей на этой панели? ЖК-дисплей, как я понял, имеет несколько фиксированных символов и пиксельные маски для отображения температуры.
Драйвер дисплея - PCF8576CT. Его характеристики тут (http://pdf1.alldatasheet.com/datasheet-pdf/view/18217/PHILIPS/PCF8576CT.html).

36559

Подскажите, как именно управлять данным дисплеем через Ардуино. Или без необходимых библиотек не получится?
В принципе, думаю, что можно определить, какие контакты с самого дисплея и на какие ножки контроллера подключены, чтобы определить маску.

P.S. Подходящего однострочного дисплея не смог найти. Есть двухстрочный 1602, но плата не влезет в корпус, а резать там нет возможности.

swao
12.07.2014, 15:20
Драйвер дисплея - PCF8576CT.
Подскажите, как именно управлять данным дисплеем через Ардуино. Или без необходимых библиотек не получится?


http://pccar.ru/showthread.php?t=19162

s.m.
12.07.2014, 15:34
угу, я раскурил саму микруху, но так как дисплей другой, то параметры инициализации и какой бит какой сегмент зажигает - это уже сами будете разбираться - это не сложно, в даташите на микруху есть вся инфа.

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

Murkur
12.07.2014, 18:10
чтобы понять правильную строку инициализации - очень рекомендую подключить сниффер i2c к работающему блоку и записать обмен, чтобы выяснить, с каким набором данных идет инициализация, без этого ловить нечего с этой микрухой.
К работающему устройству подключиться нет возможности. Спасибо за информацию.

Murkur
12.07.2014, 19:16
Я новичок в этом деле. Можете подсказать, какие контакты драйвера к каким контактам Ардуино нужно подключить?

s.m.
12.07.2014, 20:06
Я новичок в этом деле. Можете подсказать, какие контакты драйвера к каким контактам Ардуино нужно подключить?

Как все запущено...
Эта микруха I2C (http://en.wikipedia.org/wiki/I%C2%B2C), соответственно, питание 5В и шину I2С и нужно подключать к Ардуине.
I2C у массовых Ардуин одна, поэтому там и нечего думать - SDA -> SDA, SCL -> SCL

Ардуина будет мастером на шине, микруха слейвом.
Конкретный адрес микрухи на шине лучше просканировать сканером I2C (в моей ветке было про это), так как по-моему есть несколько вариантов адресов.

Murkur
12.07.2014, 20:18
Как все запущено...
Говорю-же, что начинающий :)
Спасибо за ответ.

Murkur
13.07.2014, 11:30
А как можно определить адрес слэйва, если нет возможности подключиться к работающей панели?
Запустил такой код:

#include <Wire.h>
#define ADDR 0x38 //адрес устройства
void setup()
{
Serial.begin(115200);//скорость обмена с компом
Wire.begin(ADDR); //определим как ведомый с указанным адресом
Wire.onReceive(receive_handler); //ждем данных от мастера, функция возвращает int число байт данных
}

void loop() {}

void receive_handler(int numbytes)
{
for (int i=0;i<numbytes;i++) //читаем весь пакет
{
Serial.print(Wire.read(), HEX); // принимаем значение и передаем компьютеру
}
Serial.println(' '); //перенос строки

}


В мониторе выдаёт код: C880F06000000000000000000000

Значит у меня тоже адрес 0x38?

s.m.
13.07.2014, 20:53
Отсканируйте устройства с помощью скрипта
http://playground.arduino.cc/Main/I2cScanner

Murkur
14.07.2014, 18:37
Отсканируйте устройства с помощью скрипта
http://playground.arduino.cc/Main/I2cScanner
Отсканировал... Таки адрес 0х38.
Как же, всё-таки, сформировать правильную команду, чтобы на дисплее хоть что-то засветилось?

s.m.
14.07.2014, 19:04
Отсканировал... Таки адрес 0х38.
Как же, всё-таки, сформировать правильную команду, чтобы на дисплее хоть что-то засветилось?

читать страницы 9,16,17,18,19 и особенно 23,24,25

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

Murkur
14.07.2014, 21:59
читать страницы 9,16,17,18,19 и особенно 23,24,25

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

Ладно, буду искать того, кто разбирается.

s.m.
15.07.2014, 01:31
ОК, спасибо. Эти страницы уже по несколько раз перечитывал, но, видно, не дано понять и времени не хватает.

Ладно, буду искать того, кто разбирается.

Поймите правильно. Это все равно, что лечить по телефону.
Не видя фоток дорожек понять что-то сложно.
Это была нетривиальная задача даже для меня, а я уже лет 30 этим занимаюсь.
Чтобы браться за такие вещи нужен навык общения с подобным железом.
На самом то деле почти все уже сделано, в документе расписан порядок байтов в посылке, которую микруха жрет. Это скрипт уже делает. Вам всего лишь надо поиграться с начальным набором байт, которые правильно конфигурят микруху для работы с вашим конкретным индикатором.
Так как тоже однострочный у Вас, конфигурация не должна сильно отличаться.
Микруха довольно тупая, она просто отображает то, что ей скажут.

в моем скрипте Вам надо поиграться с вот этим

buffer[0] = 0xE0;
buffer[1] = 0xCB;
buffer[2] = 0xF0;

на странице 23 есть формат команды по байтам

Мы отправляем сами только Command и Display Data, первый байт отправляет библиотека Wire в Ардуине

вот Command и есть

buffer[0] = 0xE0;
buffer[1] = 0xCB;
buffer[2] = 0xF0;

назначение каждого байта в Command расписано на странице 24 и 25

Вам надо поиграться со значениями битов B, M1, M0, так как они зависят от конкретного LCD, который подключен к микрухе.

Мы всегда посылаем пакеты данных по 17 байт - первых 3 байта - конфигурация, остальные - данные.

То есть Ваша задача методом тыка меняя

buffer[0] = 0xE0;
buffer[1] = 0xCB;
buffer[2] = 0xF0;

заставить показывать хоть что-то, дальше пойдет легче.

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

buffer[0] = B11100000;
buffer[1] = B11001011;
buffer[2] = B11110000;

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

Murkur
15.07.2014, 01:38
Поймите правильно. Это все равно, что лечить по телефону.
Не видя фоток дорожек понять что-то сложно.
Это была нетривиальная задача даже для меня, а я уже лет 30 этим занимаюсь.
Чтобы браться за такие вещи нужен навык общения с подобным железом.
На самом то деле почти все уже сделано, в документе расписан порядок байтов в посылке, которую микруха жрет. Это скрипт уже делает. Вам всего лишь надо поиграться с начальным набором байт, которые правильно конфигурят микруху для работы с вашим конкретным индикатором.
Так как тоже однострочный у Вас, конфигурация не должна сильно отличаться.
Микруха довольно тупая, она просто отображает то, что ей скажут.

в моем скрипте Вам надо поиграться с вот этим

buffer[0] = 0xE0;
buffer[1] = 0xCB;
buffer[2] = 0xF0;

Да я всё понял и никак не хотел обидеть :)
Пробую разобраться. Немного пишу на PHP, но с этим ещё не сталкивался.
Итак спасибо за помощь.

s.m.
15.07.2014, 02:10
Да я всё понял и никак не хотел обидеть :)
Пробую разобраться. Немного пишу на PHP, но с этим ещё не сталкивался.
Итак спасибо за помощь.

На самом деле не все так страшно. Главное захотеть разобраться.
Микруха оказалась немного укуренная по управлению, но бывают гораздо более запущенные случаи.
ЗЫ: Я тоже писал на PHP первые лет 6-7.
Сишный код в Ардуине по синтаксису не так уж и отличается от PHP :)
А битовая арифметика и массивы почти один в один. Только с обработкой строк в Си полная засада.
Пробуйте, оно не кусается. Мне оно даже интереснее показалось, чем писать очередное мобильное приложение на работе :)

Murkur
15.07.2014, 02:20
Я правильно понял порядок команд?

buffer[0] = 0xE0; //Device Select
buffer[1] = 0xCB; //Mode Set
buffer[2] = 0xF0; //Blink

Murkur
15.07.2014, 15:26
По дорожкам определил, что задействованы 4 BACKPLANES и все 40 логических выходов PCF8576.

Murkur
16.07.2014, 03:03
То есть Ваша задача методом тыка меняя

buffer[0] = B11100000;
buffer[1] = B11001011;
buffer[2] = B11110000;



Пробовал разные комбинации команд, но пока на дисплее ничего даже не мигнуло.

В принципе, изменилось только 2 последних бита в MODE SET, так как поставил режим управления 1:4.

Может драйвер нерабочий? Можно как-то его проверить?

Alex_St
16.07.2014, 10:35
Глупый вопрос - а данный девайс представляет собой только дисплей/кнопочки/крутилки, или мозги климата тоже там?

Murkur
16.07.2014, 12:01
Глупый вопрос - а данный девайс представляет собой только дисплей/кнопочки/крутилки, или мозги климата тоже там?
Да, мозги тоже есть на плате - MC9S12DG256CPV.

Alex_St
16.07.2014, 12:54
А драйвера сервомашинок?

Murkur
16.07.2014, 13:15
Есть ещё TH 3145.4 VDO 54204073. Не знаю, что это.

36569