13.11.2012, 23:37 | #11 |
Member
Регистрация: 09.10.2012
Сообщений: 32
Вес репутации: 0 |
|
13.11.2012, 23:59 | #12 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Прикольно. На главный экран мобилы похож
|
14.11.2012, 03:33 | #13 | |
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1605 |
Цитата:
Проект интересен особенно в аппаратном плане. Я никогда не подключал дисплеи к ардуино. Меня интересуют вопросы как на него выводить и рисовать свои символы? Опишите подробнее как вы это делали, если конечно это не тайна. Я вижу только картинки, а как это реализовано не описано |
|
14.11.2012, 11:48 | #14 | |
Member
Регистрация: 09.10.2012
Сообщений: 32
Вес репутации: 0 |
Цитата:
Я могу в данный момент нарисовать схему, показать код но это все в некрасивом виде ... Код собирал по всему интернету мусора вагон + урна... Уже преступил к переписываю всего проекта в веде классов и библиотек, чтобы читателям этой стати было легче использовать мои наработки в дальнейшем. Как подключить дисплей, какие библиотеки использовать и как рисовать свои картинки символы постараюсь описать в следующей теме. |
|
14.11.2012, 12:18 | #15 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Вот еще один вариант использования дисплея от мобильного телефона с Arduino
|
14.11.2012, 12:36 | #16 | |
Junior Member
Регистрация: 01.11.2012
Сообщений: 28
Вес репутации: 0 |
Цитата:
|
|
15.11.2012, 00:14 | #17 |
Member
Регистрация: 09.10.2012
Сообщений: 32
Вес репутации: 0 |
Товарищи помогите...
Взялся я переписывать весь код скетча подключение LCD в библиотеки и столкнулся вот с чем .... Зашиваю контроллер без библиотек все гуд ... экран показывает то что мне надо ... Переписываю с библиотекой ... не хочет работает хоть убей ... Код тот же. Проверка кода ничего не дала. В чем проблема? Код подключения экрана без библиотек: Код:
#include "font.h" uint8_t spiMosi = 9; uint8_t spiSclk = 10; uint8_t SSlcd = 8; void LCD_init(void) { LCD_write_byte(0xE2, 0); // Reset cmd, see datasheet delay(1); // Wait 1 ms for reset LCD_write_byte(0xA4, 0); // Power saver off LCD_write_byte(0x2F, 0); // Power control set: Booster : ON Voltage regulator : ON Voltage follower : ON LCD_write_byte(0xAF, 0); // LCD display on LCD_write_byte(0xB0, 0); // Page address set } void LCD_home(void) { LCD_write_byte(0xB0, 0); // Page address set LCD_write_byte(0x10, 0); // Sets the DDRAM column address - upper 3-bit LCD_write_byte(0x00, 0); // lower 4-bit } void LCD_clear(void) { LCD_home(); for(int i=0;i<16*6*9;i++) LCD_write_byte(0,1); } void LCD_write_byte(byte data, byte cmd){ digitalWrite(SSlcd, LOW); SPI_SendBit(cmd); for(int i=0;i<8;i++){ SPI_SendBit(data&0x80); data<<=1; } digitalWrite(SSlcd, HIGH); } void LCD_write(unsigned char c) { unsigned char line; unsigned char ch; if((c>=32)&&(c<=126)) c -= 32; else if((c>=192)&&(c<=255)) c -= 97; else return; unsigned char *f = (unsigned char*)&(font66_8[c]); for(line=0;line<6;line++){ ch = *f++; //if (LCD_inverse) ch ^=0xFF; LCD_write_byte(ch, 1); } } void LCD_write(String s) { for (byte i=0; i<s.length(); i++) LCD_write(s[i]); } void LCD_write(char *buf, byte len) { for (byte i=0; i<len; i++) LCD_write(buf[i]); } void LCD_setRow(uint8_t row) { LCD_write_byte(0xB0 | (row & 0x0F), 0); // Page address set } void LCD_setCol(uint8_t col) { LCD_write_byte(0x10 | (col>>4), 0); // Sets the DDRAM column address - upper 3-bit LCD_write_byte(0x00 | (col & 0x0F), 0); // lower 4-bit } void LCD_setPos(uint8_t row, uint8_t col) { LCD_setRow(row); LCD_setCol(col*6); } void SPI_SendBit(byte Bit) { digitalWrite(spiMosi, Bit); delayMicroseconds(1); digitalWrite(spiSclk, HIGH); delayMicroseconds(1); digitalWrite(spiSclk, LOW); } ///////////////////////////////////////////// Main Code ///////////////////////////////////////// void setup() { pinMode(spiMosi,OUTPUT); pinMode(spiSclk,OUTPUT); pinMode(SSlcd,OUTPUT); //Serial.begin(115200); LCD_init(); LCD_clear(); LCD_home(); LCD_setPos(0,0); LCD_write("WILLI"); } void loop() { } Код:
#ifndef LCD1280_h #define LCD1280_h #include "Arduino.h" #include <inttypes.h> class LCD1280 { public: LCD1280(uint8_t cspin, uint8_t mosipin, uint8_t sclkpin, uint8_t ledpin); // init void init(); void clear(); void home(); void setRow(uint8_t row); void setCol(uint8_t col); void setPos(uint8_t row, uint8_t col); void reverse(unsigned char inv); void display(unsigned char c); void display(char *buf, byte len); void display(String s); bool inverse; int font_size; private: void writeByte(byte low_data, byte high_data); void spiBit(byte Bit); uint8_t m_cspin; uint8_t m_ledpin; uint8_t m_mosipin; uint8_t m_sclkpin; }; #endif Код:
#include "LCD1280.h" #include <stdio.h> #include <string.h> #include <inttypes.h> #include "Arduino.h" #include "font.h" LCD1280::LCD1280(uint8_t cspin, uint8_t mosipin, uint8_t sclkpin, uint8_t ledpin) { m_cspin=cspin; m_mosipin=mosipin; m_sclkpin=sclkpin; m_ledpin=ledpin; inverse=false; font_size=6; //default pinMode(m_cspin, OUTPUT); pinMode(m_mosipin, OUTPUT); pinMode(m_sclkpin, OUTPUT); //digitalWrite(m_cspin, HIGH); //pinMode(m_ledpin, OUTPUT); //digitalWrite(m_ledpin, HIGH); } void LCD1280::init() { //digitalWrite(m_cspin, HIGH); writeByte(0xE2, 0); // Reset delay(1); writeByte(0xA4, 0); // Power saver off writeByte(0x2F, 0); // Power control set writeByte(0xAF, 0); // LCD display on writeByte(0xB0, 0); // Page address set //clear(); //setPos(0,0); } void LCD1280::clear() { home(); for(int i=0; i<16*6*9; i++) writeByte(0, 1); } void LCD1280::home() { writeByte(0xB0, 0); // Page address set writeByte(0x10, 0); // Sets the DDRAM column address - upper 3-bit writeByte(0x00, 0); // lower 4-bit } void LCD1280::setRow(uint8_t row) { writeByte(0xB0 | (row & 0x0F), 0); // Page address set } void LCD1280::setCol(uint8_t col) { writeByte(0x10 | (col>>4), 0); // Sets the DDRAM column address - upper 3-bit writeByte(0x00 | (col & 0x0F), 0); // lower 4-bit } void LCD1280::setPos(uint8_t row, uint8_t col) { setRow(row); setCol(col); } void LCD1280::display(unsigned char c) { unsigned char line; unsigned char ch; if((c>=32)&&(c<=126)){ c -= 32; }else if((c>=192)&&(c<=255)){ c -= 97; } unsigned char *f = (unsigned char*)&(font6_8[c]); for(line=0;line<6;line++) { ch = *f++; if (inverse) ch ^=0xFF; writeByte(ch, 1); } } void LCD1280::display(String s) { for (byte i=0; i<s.length(); i++) { display(s[i]); } } void LCD1280::display(char *buf, byte len) { for (byte i=0; i<len; i++) { display(buf[i]); } } void LCD1280::reverse(unsigned char inv) { if(inv) writeByte(0xA7, 0); // reverse display else writeByte(0xA6, 0); // normal display } void LCD1280::writeByte(byte low_data, byte high_data) { digitalWrite(m_cspin, LOW); spiBit(low_data); for(int i=0;i<8;i++){ spiBit(high_data&0x80); high_data<<=1; } digitalWrite(m_cspin, HIGH); } void LCD1280::spiBit(byte Bit) { digitalWrite(m_mosipin, Bit); delayMicroseconds(1); digitalWrite(m_sclkpin, HIGH); delayMicroseconds(1); digitalWrite(m_sclkpin, LOW); } Код:
#include <LCD1280.h> LCD1280 WILLI_LCD(8, 9, 10, 9); void setup() { //Serial.begin(57600); WILLI_LCD.init(); WILLI_LCD.clear(); WILLI_LCD.home(); WILLI_LCD.setPos(0,0); WILLI_LCD.display("WILLI"); } void loop() { delay(2000); } willi.zip |
15.11.2012, 00:51 | #18 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Какая ошибка выскакивает?
|
15.11.2012, 12:23 | #19 |
Member
Регистрация: 09.10.2012
Сообщений: 32
Вес репутации: 0 |
Нет ошибки.
Компилируется и зашивается без проблем. Вот только скетч с библиотеками не хочет работать с экраном... правильнее экран не хочет работать с командами что отправил контроллер. Пробовал эмуляцию в Proteus. Кажется скетч с библиотеками имеет задержки по отправки команд больше. Хотя код команд инсталляции экрана тот же... Неужели подводит среда разработки Arduino. Не хорошо.... |
15.11.2012, 12:33 | #20 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Попробуй ArduinoIDE 0023
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|