Спаривание SiLabs и Arduino
- Войдите на сайт для отправки комментариев
Ср, 08/05/2013 - 11:11
Доброго времени суток. Передо мной стоит задача: вывести информацию через SiLabs C8051F300 на LCD через I2C (Arduino LCM1602). С SiLabs я достаточно хорошо знаком, а вот с Arduino не очень. Т.к. стандартные библиотеки, естественно, не подойдут, я хочу понять, какую именно инфу передают функции из оных. Покопавшись в библиотеках, я так и не смог разобрать, как эта штука инициализируется. Может есть у кого опыт или советом кто добрым поможет?
PS в google слать не надо, уже ходивши. Заранее спасибо.
Немного дополню. На данный момент сей "гаджет" выглядит так:
Позднее (надеюсь что вывод все-таки будет работать) планирую на шину повесить гидрометр и барометр, в МК уже строен тепловой датчик. В итоге должна будет получится небольшая метеостанция, с инфой о температуре, давлении и влажности. Сами функции протокола i2c уже написаны (в основном через SFR регистры),через CrossBar шина выведена на нужные пины, осталось разобраться с расширителем на LCD. Выбор протокола I2C неслучаен, у моей платы имеется всего 2 выхода с одного порта, и то раньше там были светодиоды =)
Посмотрите, с какой библиотекой работает данный дисплей (беглое гугление дает LiquidCrystal_I2C), качайте ее и смотрите, как реализованы функции.
Тут на форуме обсуждалось в теме http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit, да и вообще - похожих тем на форуме около десятка...
Да рыскал уже, но толи я ослеп,то ли лыжи не едут. К примеру - процесс инициализации:
Какие команды он отправляет, в какой последовательности и т.д так и не нашел. Я то понимаю, что если этот LCD подклюить к другому Arduino с этими библиотеками, проблем бы не было. Но ведь наверняка на других МК его можно заставить работать. Ну я надеюсь)
Мне пока непонятно - почему и откуда у Вас выплыл "другой ардуино"? И что в конечном итоге у Вас не работает? i2cscanner видит это устройство на шине?
ему нужен перечень команд для этого экрана, чтобы он мог написать свою либу под силабс. я правильно понял?
Ок, напишу еще раз, мне не лень. "другой ардуино" ниоткуда не выплывал - его нет. Я имел ввиду контроллер производства Arduino, т.к. с ними библиотеки LiquidCrystal_I2C будут работать. То, с чем работаю я, описано выше. Даже с рисунком. Про i2cscanner и говорить нечего, он не только устройство не увидит, но и саму шину тоже, как вы наверное понимаете. А понять я пытаюсь, какие команды в hex передаются на устройство.
Да, Александр, именно так.
Да рыскал уже, но толи я ослеп,то ли лыжи не едут. К примеру - процесс инициализации:
......
- и больше ничего.
Команды:
Инициализация:
void LiquidCrystal_I2C::init(){ init_priv(); }ниже следующая же функция:
void LiquidCrystal_I2C::init_priv() { Wire.begin(); _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; begin(_cols, _rows); }еще ниже функция:
void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { if (lines > 1) { _displayfunction |= LCD_2LINE; } _numlines = lines; // for some 1 line displays you can select a 10 pixel high font if ((dotsize != 0) && (lines == 1)) { _displayfunction |= LCD_5x10DOTS; } // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! // according to datasheet, we need at least 40ms after power rises above 2.7V // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 delayMicroseconds(50000); // Now we pull both RS and R/W low to begin commands expanderWrite(_backlightval); // reset expanderand turn backlight off (Bit 8 =1) delay(1000); //put the LCD into 4 bit mode // this is according to the hitachi HD44780 datasheet // figure 24, pg 46 // we start in 8bit mode, try to set 4 bit mode write4bits(0x03); delayMicroseconds(4500); // wait min 4.1ms // second try write4bits(0x03); delayMicroseconds(4500); // wait min 4.1ms // third go! write4bits(0x03); delayMicroseconds(150); // finally, set to 4-bit interface write4bits(0x02); // set # lines, font size, etc. command(LCD_FUNCTIONSET | _displayfunction); // turn the display on with no cursor or blinking default _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; display(); // clear it off clear(); // Initialize to default text direction (for roman languages) _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; // set the entry mode command(LCD_ENTRYMODESET | _displaymode); home(); }Вот и вся инициализация.
та не Макс, это не перечнь команд. Это константы, которые подставляются при вызове функций, которые в wire. А в силабсах крапаль по другому TWI работает, точнее его там нет, есть чистый I2C, и эта хрень там работать не будет, без тупой отладки всех этих команд и переписи с нуля. может я не прав, но думаю, если бы я такое просил, допустим на lpc, то мне точно бы не помогло.
Мне показалось что на фото дуина Micro, а там какой-то свой контроллер, но сути немняет - разбираетесь как настраивается I2C и дальше по аналогии эти же команды дисплея отправляете. А TWI и I2С - это совершенно одинаковые протоколы/интерфейсы, просто называются по разному.
я конкретно в вопрос не въезжал, но если там родные команды hd44780, и просто по адресу 0x27 их записывать то да, это меняет дело. я просто предположил что там свой перечень команд, на которые нет документации, а просто пример скетча.
Извиняюсь, что не заходил некоторое время, праздники. Да, действительно , вот этой то строки я не заметил:
_displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
Теперь я понял как оно работает. Едиственное, я поначалу забыл о подгрузочных резисторах, т.е. i2c расширитель даже не отсылал ack. Сейчас пайку закончил, на днях вернусь к коду. В любом случае, когда закончу, отпишусь в этой ветке, для тех, кому это может пригодиться. Всем огромное спасибо за отклики!
P.S. Два одтягивающих резистора(3.6кОМ) от +5V к линиям SDA и SCL:
Все никак не могу до конца отладить работу этого LCD. Во первых - при выводе в цикле банального счечика дисплей мерцает каждый шаг. Но это еще ладно, в последнее время, вместо чего-либо на экране видны полторы строки, т.е первая и 3 верхних пикселя второй. При этом работа идет, т.е. он периодически мерцает, как при выводе. Сталкивался с таким кто-нибудь, что сделать можно? Заранее спасибо.