![]() |
|
|
|
|
#1 | |
|
Senior Member
Регистрация: 16.09.2012
Адрес: Irkutsk
Сообщений: 555
Вес репутации: 1606 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
, главное просто. Правда не понял как вы определили 100%, видимо подсчитали заранее эти переносы ![]() Проект интересен особенно в аппаратном плане. Я никогда не подключал дисплеи к ардуино. Меня интересуют вопросы как на него выводить и рисовать свои символы? Опишите подробнее как вы это делали, если конечно это не тайна. Я вижу только картинки, а как это реализовано не описано
|
|
|
|
|
|
|
#2 | |
|
Member
Регистрация: 09.10.2012
Сообщений: 32
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
Я могу в данный момент нарисовать схему, показать код но это все в некрасивом виде ... Код собирал по всему интернету мусора вагон + урна... Уже преступил к переписываю всего проекта в веде классов и библиотек, чтобы читателям этой стати было легче использовать мои наработки в дальнейшем. Как подключить дисплей, какие библиотеки использовать и как рисовать свои картинки символы постараюсь описать в следующей теме. |
|
|
|
|
|
|
#3 |
|
Member
Регистрация: 09.10.2012
Сообщений: 32
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
|
|
|
|
|
#4 | |
|
Junior Member
Регистрация: 01.11.2012
Сообщений: 28
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Цитата:
|
|
|
|
|
|
|
#5 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Прикольно. На главный экран мобилы похож
|
|
|
|
|
|
#6 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Вот еще один вариант использования дисплея от мобильного телефона с Arduino
|
|
|
|
|
|
#7 |
|
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 |
|
|
|
|
|
#8 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Какая ошибка выскакивает?
|
|
|
|
|
|
#9 |
|
Member
Регистрация: 09.10.2012
Сообщений: 32
Вес репутации: 0 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Нет ошибки.
Компилируется и зашивается без проблем. Вот только скетч с библиотеками не хочет работать с экраном... правильнее экран не хочет работать с командами что отправил контроллер. Пробовал эмуляцию в Proteus. Кажется скетч с библиотеками имеет задержки по отправки команд больше. Хотя код команд инсталляции экрана тот же... Неужели подводит среда разработки Arduino. Не хорошо.... |
|
|
|
|
|
#10 |
|
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Попробуй ArduinoIDE 0023
|
|
|
|
![]() |
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|