PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Для новичков (http://pccar.ru/forumdisplay.php?f=9)
-   -   Дисплей климатроника от BMW E90 (http://pccar.ru/showthread.php?t=20939)

Murkur 12.07.2014 10:26

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

Вложение 36558

Хочу её ипользовать для управления климатом в другой машине на базе Ардуино. Кнопки и светодиоды - это всё понятно, а может кто-то подскажет, как запустить однострочный дисплей на этой панели? ЖК-дисплей, как я понял, имеет несколько фиксированных символов и пиксельные маски для отображения температуры.
Драйвер дисплея - PCF8576CT. Его характеристики тут.

Вложение 36559

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

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

swao 12.07.2014 15:20

Цитата:

Сообщение от Murkur (Сообщение 301981)
Драйвер дисплея - PCF8576CT.
Подскажите, как именно управлять данным дисплеем через Ардуино. Или без необходимых библиотек не получится?

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

s.m. 12.07.2014 15:34

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

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

Murkur 12.07.2014 18:10

Цитата:

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

К работающему устройству подключиться нет возможности. Спасибо за информацию.

Murkur 12.07.2014 19:16

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

s.m. 12.07.2014 20:06

Цитата:

Сообщение от Murkur (Сообщение 301995)
Я новичок в этом деле. Можете подсказать, какие контакты драйвера к каким контактам Ардуино нужно подключить?

Как все запущено...
Эта микруха I2C, соответственно, питание 5В и шину I2С и нужно подключать к Ардуине.
I2C у массовых Ардуин одна, поэтому там и нечего думать - SDA -> SDA, SCL -> SCL

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

Murkur 12.07.2014 20:18

Цитата:

Сообщение от s.m. (Сообщение 301996)
Как все запущено...

Говорю-же, что начинающий :)
Спасибо за ответ.

Murkur 13.07.2014 11:30

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

#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

Цитата:

Сообщение от s.m. (Сообщение 302040)
Отсканируйте устройства с помощью скрипта
http://playground.arduino.cc/Main/I2cScanner

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

s.m. 14.07.2014 19:04

Цитата:

Сообщение от Murkur (Сообщение 302120)
Отсканировал... Таки адрес 0х38.
Как же, всё-таки, сформировать правильную команду, чтобы на дисплее хоть что-то засветилось?

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

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

Murkur 14.07.2014 21:59

Цитата:

Сообщение от s.m. (Сообщение 302126)
читать страницы 9,16,17,18,19 и особенно 23,24,25

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

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

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

s.m. 15.07.2014 01:31

Цитата:

Сообщение от Murkur (Сообщение 302145)
ОК, спасибо. Эти страницы уже по несколько раз перечитывал, но, видно, не дано понять и времени не хватает.

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

Поймите правильно. Это все равно, что лечить по телефону.
Не видя фоток дорожек понять что-то сложно.
Это была нетривиальная задача даже для меня, а я уже лет 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

Цитата:

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

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

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

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

s.m. 15.07.2014 02:10

Цитата:

Сообщение от Murkur (Сообщение 302182)
Да я всё понял и никак не хотел обидеть :)
Пробую разобраться. Немного пишу на 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

Цитата:

Сообщение от s.m. (Сообщение 302181)
То есть Ваша задача методом тыка меняя

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

Цитата:

Сообщение от Alex_St (Сообщение 302315)
Глупый вопрос - а данный девайс представляет собой только дисплей/кнопочки/крутилки, или мозги климата тоже там?

Да, мозги тоже есть на плате - MC9S12DG256CPV.

Alex_St 16.07.2014 12:54

А драйвера сервомашинок?

Murkur 16.07.2014 13:15

Вложений: 1
Есть ещё TH 3145.4 VDO 54204073. Не знаю, что это.

Вложение 36569


Часовой пояс GMT +4, время: 15:52.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot