20.05.2013, 12:41 | #1 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
PCF8576 + Arduino
Привет всем.
Сломал мозг уже, пытаясь оживить панель от старой магнитолы. Подключил уже кнопки и энкодер, но аппетит приходит во время еды, поэтому хочу оживить и LCD индикатор. В панели стоит PCF8576, подключенная к 8 разрядам на 14 символов и одному на 7 символов плюс несколько значков - FM, RDS, TA. Хочу заставить на 14 символьные выводить произвольную инфу из Ардуины. Подключил к ней Teensy 2.0 ++ по I2C. За основу скетча взял код отсюда Проблема в том, что не пойму, как правильно сконфигурить инициализацию и отправить нужные коды символов. В идеале заполучить бы работающий образец кода именно под Ардуину, который выводит произвольную строку. Адрес слэйва известен - 0x38 Конфиг тоже проходит вроде вот этим Wire.send(B11001101); А вот как сконфигурить правильно BIAS, Duty и собсно, отправить данные - непонятно. Даташит читал, вроде подходят два варианта 11001101 11001110 Манипуляции с адресами и отправкой данных дают часть нужных символов, но не все, подозреваю, что все-таки сконфигурировано неправильно. Еще трабла в том, что для отправки данных требуется 12 байт, а так как Ардуины 8-битные - нужно как-то разбивать пакеты отправки данных. Пробовал сниффер I2C отсюда Подключил его к работающей магнитоле - там такой бешенный обмен по I2C, что с ним надо очень долго разбираться, кто что шлет. Может еще придется в этом разбираться. В этой магнитоле еще и тюнер и аудиопроцессор подключены к I2C. У кого есть какие мысли?
__________________
Мой проект: Citroen Xsara Android CarPC |
20.05.2013, 14:33 | #2 |
Старший Пользователь
Регистрация: 22.10.2012
Регион: 78, 98
Сообщений: 758
|
по поводу сниффера- то что по ссылке выше-шняга. с тинси он работает неправильно. я в качестве сниффера использовал из ардуиновской иде примеры, с небольшой правкой. с их помощью отснифил протокол тюнера, там тоже наркоманское управление, пачки байтов...
__________________
В работе Китайнедожып+медиацентр на андроиде |
20.05.2013, 14:38 | #3 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
можешь кинуть сюда сниффер? и на чем построен тюнер, может у меня такой же?
__________________
Мой проект: Citroen Xsara Android CarPC |
20.05.2013, 19:17 | #4 |
Старший Пользователь
Регистрация: 17.01.2009
Возраст: 49
Город: Москва
Регион: 77, 97, 99, 177
Машина: Audi A5 3.2FSI Q, Porsche 996 Turbo
Сообщений: 669
|
Я не понял, в итоге на экран вообще что-то выводится? Или не работает совсем? Проблема в конфигурации регистров PCF8576 или вообще
в настройке самого интерфейса? Сниффер i2c я в молодости делал под DOS на LPT. В принципе можно самой Ардуиной и посниффить если найти библиотеки кода slave. Если скорость слишком большая, можно в магнитоле кварц поменять на более медленный. i2c - статический протокол. |
20.05.2013, 19:48 | #5 | |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
Цитата:
Если выбираешь в MODE SELECT один режим - одно выводится, если другой режим - другое. Метода была такая - по даташиту пытался подать команду MODE SELECT Wire.send(B11001101); потом выставляю адрес Wire.send(B00100000); - это вроде адрес старшего разряда потом шлю данные Wire.send(B00100000); получаю 1 на LCD в старшем разряде. Все вроде ок. Но, меняя данные, получаю только вертикальные символы в знакоместе, типа 1 слева разряда, 1 справа разряда, -1 и 1-. Напоминаю, индикатор 15-ти разрядный. Все, только комбинации таких символов, как бы я не извращался с байтом данных. Меняя байт разряда получаю аналогичную картину на других знакоместах. Вот и не пойму, где порылась собака? Поэтому и спрашиваю, может кто-то имел дело с подобными микрухами? Чувствую, что где-то близко, но не пойму, в чем трабла. Может где-то тайминги нарушены? Может где-то напихать задержек? Или все-таки ошибка в конфиге? Пошел курить даташит до полного просветления...
__________________
Мой проект: Citroen Xsara Android CarPC |
|
24.05.2013, 20:44 | #6 |
Старший Пользователь
Регистрация: 22.10.2012
Регион: 78, 98
Сообщений: 758
|
#include <Wire.h>
#define ADDR 0x88 //адрес устройства 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.receive(), HEX); // принимаем значение и передаем компьютеру } Serial.println(' '); //перенос строки } или #include <Wire.h> void setup() { Wire.begin(0x44); // join i2c bus with address #4 Wire.onReceive(receiveEvent); // regis-ter event Serial.begin(9600); // start serial for output } void loop() { delay(100); } // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while(1 < Wire.available()) // loop through all but the last { // char c = Wire.read(); // receive byte as a character // Serial.print(c); // print the character } int x = Wire.read(); // receive byte as an integer Serial.println(x, HEX); Serial.println(x, BIN); // print the integer } в зависимости от тупости железки работает либо тот, либо тот. еще для тинси есть интересный проект: bus-ninja
__________________
В работе Китайнедожып+медиацентр на андроиде |
25.05.2013, 18:03 | #7 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
заработал первый скетч.
отснифал им HEX-коды, перевел в бинарный вид, запихнул в скетч - не палит. По-прежнему показывает чушь. Или он криво снимает или я опять туплю. надпись CODE выдает последовательность E0CBF000000A96311460A1000 E0CBF02000156CE062C1460000 перевожу в бинарный вид 11100000 11001011 11110000 00000000 00000000 00001010 10010110 00110001 11100000 11001011 11110000 00100000 00000000 00010101 01101100 11100000 первый байт всегда адрес слэйва, второй выбор режима, третий - управление миганием сегментов (всегда выключено), а дальше по идее идут сами байты данных. Так как здесь используется drive mode 1:3 и bias соответственно одна треть, то по датaшиту должна быть соответствующая адресация данных. Опять что-то не так, но что именно, не пойму. Сейчас такой скетч, он должен показывать надпись CODE PHP код:
__________________
Мой проект: Citroen Xsara Android CarPC |
25.05.2013, 19:27 | #8 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
Оказывается, что после первого же пакета возникает NACК - нет ответа от девайса...
Хм...
__________________
Мой проект: Citroen Xsara Android CarPC |
25.05.2013, 20:32 | #9 |
Гуру
Регистрация: 19.09.2009
Возраст: 46
Город: Мелитополь
Регион: Украина
Сообщений: 2,022
|
Проверь какая установлена скорость шины I2C с дуины.
|
25.05.2013, 21:06 | #10 |
Гуру
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
|
По умолчанию стоит 100 кГц, попробовал поставить 400, как здесь
http://copysol.blogspot.com/2013/01/...2c-eeprom.html перестартовал, пересобрал, перезалил - тоже самое. Но проблема была в синтаксисе, правильно вот так PHP код:
__________________
Мой проект: Citroen Xsara Android CarPC Последний раз редактировалось s.m.; 25.05.2013 в 22:49. |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|