LCD ST7920
- Войдите на сайт для отправки комментариев
Пнд, 26/11/2012 - 14:32
Добрый день.
Пытался написать в тему LCD12864 (ST7920) на типа arduino, но там сообщение уходит в пустоту и не создается.
В краце. Купил LCD ST7920, подключил по последовательному интерфейсу согласно примера:
PIN1 = GND
PIN2 = 5V
RS(CS) = 8;
RW(SID)= 9;
EN(CLK) = 3;
PIN15 PSB = GND;
Пример находился вместе с библиотекой, взято из 13 поста темы LCD12864 (ST7920) на типа arduino
/* LCD Arduino PIN1 = GND PIN2 = 5V RS(CS) = 8; RW(SID)= 9; EN(CLK) = 3; PIN15 PSB = GND; */ #include "LCD12864RSPI.h" #include "DFrobot_bmp.h" #include "DFrobot_char.h" #define AR_SIZE( a ) sizeof( a ) / sizeof( a[0] ) unsigned char wangzhi[]=" www.DFRobot.cn ";// unsigned char en_char1[]="ST7920 LCD12864 ";// unsigned char en_char2[]="Test, Copyright ";// unsigned char en_char3[]="by DFRobot ---> ";// void setup() { LCDA.Initialise(); // INIT SCREEN delay(100); LCDA.DrawFullScreen(logo);//LOGO delay(5000); } void loop() { LCDA.CLEAR(); delay(100); LCDA.DisplayString(0,0,en_char1,16);// delay(10); LCDA.DisplayString(1,0,en_char2,16);// delay(10); LCDA.DisplayString(2,0,en_char3,16);// delay(10); LCDA.DisplayString(3,0,wangzhi,16);// delay(5000); LCDA.CLEAR(); delay(100); LCDA.DisplayString(0,0,show1,16);// delay(10); LCDA.DisplayString(1,0,show2,16);// delay(10); LCDA.DisplayString(2,0,show3,16);// delay(10); LCDA.DisplayString(3,0,wangzhi,16);//LOGO delay(5000); }
При компилировании выдает много ошибок:
C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp: In member function 'void LCD12864RSPI::delayns()': C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:28: error: 'delayMicroseconds' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp: In member function 'void LCD12864RSPI::WriteByte(int)': C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:34: error: 'HIGH' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:34: error: 'digitalWrite' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:36: error: 'MSBFIRST' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:36: error: 'shiftOut' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:37: error: 'LOW' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp: In member function 'void LCD12864RSPI::Initialise()': C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:72: error: 'OUTPUT' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:72: error: 'pinMode' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:75: error: 'LOW' was not declared in this scope C:\main\Arduino\arduino-1.0.1\libraries\LCD12864RSPI\LCD12864RSPI.cpp:75: error: 'digitalWrite' was not declared in this scope
Подскажите в чем проблема???
Скорее всего дело в несовместимости библиотеки и IDE, попробуйте скомпилировать в Arduino-1.0 или даже в Arduino-0023.
Для ST7920 есть неплохая библиотека http://code.google.com/p/u8glib/
Скорее всего дело в несовместимости библиотеки и IDE, попробуйте скомпилировать в Arduino-1.0 или даже в Arduino-0023.
Вы правы, взял этот пример и скомпилировал в Arduino-0023 и все заработало. Меня конечно, это не устраивает, поэтому начал дальше копать и наткнулся на интересную статью . Там как раз описывается библиотека u8glib, которую посоветовал buka. Жаль, что форум, я прочитал позже, чем нашел эту библиотеку.
В итоге с библиотекой u8glib все заработало и на Arduino-0101. Статья хорошая, очень хорошо поможет начинающим.
Вот простенький пример:
Я вот только одного не пойму. В статье указано, что если выводить через u8g.drawStr(xpos, ypos, “Text”),
то (дословно):
Вариант команды u8g.drawStrP позволяет разместить выводимый текст не в оперативной памяти микроконтроллера, а в области Flash-памяти. Это может быть полезно для экономии пространства в ОЗУ.
Когда компилирую программу с u8g.drawStrP, то она занимает в памяти места больше, чем с командами:
u8g.setPrintPos(xpos, ypos);
u8g.print(“Text”);
Хотя по описанию, должно быть на оборот....
Вариант команды u8g.drawStrP позволяет разместить выводимый текст не в оперативной памяти микроконтроллера, а в области Flash-памяти. Это может быть полезно для экономии пространства в ОЗУ.
Когда компилирую программу с u8g.drawStrP, то она занимает в памяти места больше, чем с командами:
u8g.setPrintPos(xpos, ypos);
u8g.print(“Text”);
Хотя по описанию, должно быть на оборот....
А вы почитайте об отличиях RAM. EEPROM и Flash-памяти (ну хотя бы здесь) - и все сразу встанет на свои места.
step962, спасибо за ссылку. Теперь все стало на свои места.
Кстати, а можно как нибудь посмотреть, сколько памяти ОЗУ израсходовано?
Ну, как-то так...
Попробовал этот код.
На экране показывает 1753
Хотя по ссылке выше, указано, что у нас всего 1024 байта ОЗУ...
пробовал вставлять код:
Показания не меняются, но стоит использовать переменную t в программе (выводить ее на экран), как сразу память уменьшается на 10 байт и становится 1743.
Так сколько же памяти у Arduino nano ATmega328???
УПС... по ссылке ATmega168... у 328 или 1кб или 2кб.
пробовал вставлять код:
Показания не меняются, но стоит использовать переменную t в программе (выводить ее на экран), как сразу память уменьшается на 10 байт и становится 1743.
Ну вот вы и познакомились с работой оптимизатора - место под не используемые в программе переменные не выделяется
Так сколько же памяти у Arduino nano ATmega328???
ATMega328 - вне зависимости от постфикса - имеет 2 КБ RAM.
подскажите пожалуйста как вывести на экран 12864В показания потенциометра,где можно найти пример
Это два независимых действия:
1. Считать значение потенциометра и сохранить в переменную (ссылки давал ТУТ)
2. Вывести значение переменной на экран (смотрите примеры, которые идут с библиотекой на экран)