|  | 
|  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 Возраст: 50 Город: Москва Регион: 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 Возраст: 47 Город: Мелитополь Регион: Украина 
					Сообщений: 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) | |
| 
 |  |