LCD 128x64 и MEGA2560. Зажгём?
- Войдите на сайт для отправки комментариев
Пнд, 15/04/2013 - 22:02
Здравия желаю. Есть приблуда ЖКИ графический 128х64. Есть Arduina MEGA 2560. Пытаюсь вдохнуть жизнь в сее нано чудо (я про жки). Банальное "привеД мир" не могу зажечь. То библиотеку не читает, то с подключением не всё понятно. Вот по нижеприведённому скетчу куда подключать? Как я понял надо самому прописать в коде подключение?
/* HelloWorld.pde GLCD Example m2tklib = Mini Interative Interface Toolkit Library Copyright (C) 2011 olikraus@gmail.com This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <glcd.h> // inform Arduino IDE that we will use GLCD library #include "M2tk.h" #include "utility/m2ghglcd.h" M2_LABEL(hello_world_label, "f1", "Hello World"); M2tk m2(&hello_world_label, NULL, NULL, m2_gh_glcd_bf); void setup() { } void loop() { m2.draw(); delay(500); }
В будущем это должен получится термометр с цифрами на весь экран. Будет не лишним если кто то забежит вперёд и даст ссылку как это воплотить.
Есть приблуда ЖКИ графический 128х64. Есть Arduina MEGA 2560. Пытаюсь вдохнуть жизнь в сее нано чудо (я про жки). Банальное "привеД мир" не могу зажечь. То библиотеку не читает, то с подключением не всё понятно.
Прежде, чем пытаться подключать обсуждаемую приблуду, необходимо выяснить, на базе какого драйвера она построена. То ли это KS0108, то ли ST7920, то ли совсем третий камень.
А вот выяснив этот вопрос, можно заняться поиском нужной библиотеки. И никак не раньше. Ибо эти дисплейчики очень различаются и по систтеме команд, и по организации графической памяти, и по инициализационным последовательностям...
Это всё-таки KS0108. Об этом я узнал вот отсюда http://www.kosmodrom.com.ua/pdf/WG12864A.pdf. Посоветуйте тогда библиотеку.
http://playground.arduino.cc/Code/GLCDks0108
Ну, и просто в инете полно инфы об этом экране - вроде, как не проблема.
https://www.google.com/search?hl=ru&q=arduino+KS0108
Хмм.... пройденый этап.....
Посмотрите, сюда писал:http://robocraft.ru/blog/892.html
И есть на том же робокрафте обобщающая статья: http://robocraft.ru/blog/arduino/909.html
Скачал библиотеку glcd поместил куда надо, туда же запхнул русские слова, графику и т.п.
Подключил ЖКИ так:
ЖКИ - Arduini Mega2560
D/I - A3
R/W - A2
E - A4
DB0 ... DB3 - D8 ... D11 соответственно
DB4 ... DB7 - D4 ... D7 соответственно
CS1 - A1
CS2 - A0
RST - RESET
из сэмплов скетчей в той же лайброритеки загружается, но только балуюсь контрастностью, больше ничего. Несколько раз проверял подключение, подправил конфигурашку в файле ks0108_Arduino (на фото ниже) папки config. А при загрузке скетча WG12864B (на фото) вобще виснет. Что не так делаю?
В конфигурационном файле получается, что ЖКИ подключен к pin 0, 1(USART0_RX, USART0_TX) - так и должно быть?
Нет, должны быть к аналоговым. Разве так?
по свей видимости я в конфигурашке не всё выставил, хотя подключил как в описании по ссылкам.
Нет, должны быть к аналоговым. Разве так?
по свей видимости я в конфигурашке не всё выставил, хотя подключил как в описании по ссылкам.
Я просто смотрю по файлу конфигурации подключения ЖКИ - некие контакты подключены к pin Ардуино 0, 1, но ведь эти пины(RX, TX) заняты для заливки скетча по ком-порту?
Если втуда ещё и ЖКИ подключить, то скетч не зальётся.
Или библиотека может определять, где у Ардуино цифровые, а где аналоговые ноги и понимает, что pins 0, 1 - это номера аналоговых ног?
Если не трудно, вот по ссылке, посмотрите к каким пинам на дуине подключить ЖКИ. А то руки блин, опускаются: http://robocraft.ru/files/GLCD/glcd-20111205.zip
Смотрите - в файлеге arduino-1.0.4\hardware\arduino\variants\mega\pins_arduino.h есть распиновка вашего камня
из которой следует, что аналоговые пины 0, 1, 2, 3, 4 для подключения в соответсвии с картинкой http://robocraft.ru/files/GLCD/2B.jpghttp://robocraft.ru/files/GLCD/2B.jpg - это пины ардуино под номерами 54, 55, 56, 57, 58 соответственно.
т.е. для начала просто заменить 0, 1, 2, 3, 4 на 54, 55, 56, 57, 58 в файле конфигурации, но подключать к аналоговым 0, 1, 2, 3, 4 на плате(не знаю зачем они наплодили сущностей с номерами всега) и просмотреть остальные на отсутсвие конфликтов... может какие шилды у вас подключены или на самой плате ардуино чего к этим контактам подключено.
Не вчитываясь в тему: обычно аналоговые пины обозначаются как A0, A1 и т.п. Это более наглядно, нежели 54, 55 и т.п., хотя в данном случае 54, 55 более корректно, потому что используются они как цифровые пины.
Поменял конфогурацию пинов в файле ks0108_Arduino, не помогло. Поменял потом в ks0108_Mega и в ks0108_Manual_Config, вот тут всё свершилось. Мир приветствует, демки работают, а тот хитросделанный скетч так и не заливается и виснет, но это уже совсем другая история. Ребята спасибо, узнал много нового.
Парни, помогите убрать из показаний термометра сотые доли. На символьном печатал туда пустой символ. На графическом не прокатит.
Посмотрите опытным глазом почему выводится графика (фото 1) из строчки кода 090 (без неё воще не выводит графику) если вроде как должно выводить (фото 2) как в строчке 083.
P.S. Вопрос как убрать сотые доли из показаний ещё актуален
Вернулся я к истокам. Подключил к Atmega16,
Подправил номера пинов в вышеупомянутых файлах (на всякий слусай во всех трёх, ks0108_Arduino, ks0108_Mega, ks0108_Manual_Config)
Следуя инструкциям kisoft - a (за что огромное спасибо, весь нэт перекопал и нашёл тут) http://arduino.ru/forum/proekty/arduinoide-i-atmega16-korrektiruem-yadro... ,
загрузил скетч в Atmega16. Выдало ошибки:
\Atmel\arduino-1.0.4\libraries\glcd\/include/glcd_io.h:36,
\Atmel\arduino-1.0.4\libraries\glcd\glcd_Device.cpp:28:
\Atmel\arduino-1.0.4\libraries\glcd/include/arduino_io.h:67:2: error: #error "Arduino pin mapping not defined for this board"
Залез в последний файлик, вместо Atmega8, подправил на 16. И увеличил диапозон пинов от 13 до 15:
Скетч загрузился в атмегу 16 благополучно без ошибок но на фото 1 всё видно, точнее ничего.
Проверил подключение, всё верно. Подключил вот так;
Ребята, финальный забег. Я в тупике, не знаю куда дальше, хоть намекните что то.
Я не уверен, что вся эта халабуда взлетит на частоте 1 мегагерц - у меня уже на 12 были проблемы с библиотекой LiquidCrystal.
Подозреваю, что с библиотекой на этот ЖК дела обстоят не лучше при работе на низких частотах МК.
Да мне хоть что то зажеть, с осцелятором потом решать буду.
и LiquidCrystal мне тут не нужна
Да мне хоть что то зажеть, с осцелятором потом решать буду.
и LiquidCrystalмне тут не нужна
Я и не предлагаю вам LiquidCrystal - я говорю, что может не заработать на частоте 1 мегагерц.
Тогда понял. Возвращаюсь к осцелятору. А пока буду презнателен если поможете с предидущими двумя вопросами, как убрать из показаний сотые доли (чень мешает) и какая ошибка в коде что выводит только одно графическое изображение.
Я не программист, но кусок для рисования медицинского градусника сделал бы так:
зы
Субъективно - как-то уныло это всё: шикарный графический LCD, на который можно вывести информативную и читаемую шкалу и рисунок градусника, снова всматриваетмся "где эта грёбаная рисочка со ртутью!".
зызы
перевод сотых в десятичные - формула: прибавить к модулю числа 0.05, умножить число на 10, выделить целую часть, разделить на 10... я не программист - пусть оне напишут.
зызы
перевод сотых в десятичные - формула: прибавить к модулю числа 0.05, умножить число на 10, выделить целую часть, разделить на 10... я не программист - пусть оне напишут.
А может просто использовать integer, а не float?
Здеся
float
tc = (
float
)raw / 16.0;
Я "крутился" около этой "&&" но так и не подошёл, спасибо. По поводу медецинского градусника, ну вот так захотелось, отобнажение на цифровом термометре аналогово )). Шаг 5 градусов, позже планирую уменьшить до одного, но это уже если запущу на меге16. Да и нарисовать можно и другое, так что ещё "бэта" версия будет. Но чтоб вывести показания ещё одного датчика нужно избавиться от сотых. Я так понял из устного изложения формулы при значениях сотых кратных 0,05 и выше, данные будут округляться до 0,1, это так и надо, попробую поколдовать.
Если кто подскажет немного, замечательно будет.
Здеся
float
tc = (
float
)raw / 16.0;
Я бы не заморачивался, внутри программы работал бы с данными, которые выдаёт датчик, а индикацию вывел бы в целых единицах, если так уж раздражает чехарда с сотыми - всё-равно датчик врёт на более чем полградуса.
int t = tc
так это... вот короче
GLCD.print(float, digits);
digits - кол-во символов после точки.
Я не в курсе, как нынче в школе учат - ну, типа, если 0,04, то 0, а если 0,05, то 0,1.
Есть ещё и банквское округление, что бы не накручивали миллионы на мелких транзакциях.
так это... вот короче
GLCD.print(float, digits);
digits - кол-во символов после точки.
Совсем другое дело - подозревал, что должно это дело быть формализовано в языке.
Согласен с тем, что лучше колбаситься у уже полученными показаниями с датчика.
Как применить?
Согласен с тем, что лучше колбаситься у уже полученными показаниями с датчика.
Как применить?
а что? не хочет?
вот строка
сделайте
Да, подучилось, всё гениальное просто))). Спасибо.
Хотелось бы понять что это значит: (tc, 1)?
Да, подучилось, всё гениальное просто))). Спасибо.
Хотелось бы понять что это значит: (tc, 1)?
я же выше писал, это количество разрядов после точки.
Вы писали
но я digits никуда не вставлял.
но я digits никуда не вставлял.
окей! )
))), вот и я говорю, работает, а как не понятно.
А если задачу усложнить!?
Целые числа писать одним шрифтом, а десятые доли другим?
с флоат это немного геморойно.
лучше тогда действительно делайте тип int и от него пляшите. Тем более, что деление на 16 (которое у вас в коде) заменяется простым сдвигом вправо на 4-ре разряда.
Каким макаром "digits" после "float," вобще определяется? почему диджитс, а не флаг какой нибудь?
Каким макаром "digits" после "float," вобще определяется? почему диджитс, а не флаг какой нибудь?
quote="__Alexander"]GLCD.print(число с плавающей запятой, количество знаков после запятой)
Как количество знаков после запятой определяется? - вы же сами сказали "показывать один знак"
(tc, 1)
Каким макаром "digits" после "float," вобще определяется? почему диджитс, а не флаг какой нибудь?
та блин, digits это просто описание аргумента функции. Вы его нигде не дефайнили, а просто указали явно, в виде числа!
Хотите, сделайте по дефайну.
#define digits 1
GLCD.print(tc, digits);
и будет тоже самое.
Прошил фьюзы под внешний осцелятор, Мега16 умер, ну или потерен, как описывалось. Осцелятор установлен (16,000) . Попробовал загрузить скетч, выдаёт такое:
Перед прошивкой фьюзов, проверил всё 5 раз, сразу прицепил осцелятор. После прошивки USB программатор уже прочитать его не смог. Говорит, не нашёл.
Ну вот как никогда совет нужен.
P.S. Фьюзы сконфигурировал "1000" по даташиту это от 8.0 до 12.0 мГц.
Теперь мега ждёт, когда вы к ноге XTAL1 внешний осциллятор(генератор) подключите.
Внешний осциллятор != Ext Crystal Rezonator
Попробуйте взять сигнал тактирования с ноги XTAL2 Ардуино, т.е. XTAL2(Ардуино) -> XTAL1(мега16)
Это рассказ ниочём - для полного понимания произошедшего нужно давать фьюзы в полном HEX формате.
пример:
high byte = 0xc9
Теперь мега ждёт, когда вы к ноге XTAL1 внешний осциллятор(генератор) подключите.
Я прошивал с уже подключенным, т.к. при гонфиге под внутренний, внешний на пинах не мешает, а если наоборот, может случится то, что случилось.
С этим что делать?
Вот это попробую, но, как я понял, для подобной операции необходима соответствующая установка фьюзов меги16, хотя хуже не сделаю, попробую.
пример:
high byte = 0xc9
Вот "примерно так" и можно накуралесить что МК-шку выкинуть можно будет, если открывается понятный интерфейс, читает фьюзы, их-же можно подправить и прошить, так чем это плохо, а в командной строке пропустил запятую и плюёшь в монитор "что тебе надо ещё". Вы написали пример, а где я узнаю каким какой бит есть или должен быть, и догадываюсь, что в командной строке вышеуказанного будет мало.
Так уже почти можно выбросить...
Я так понял, вы и половины того, что я написал не поняли:
- вы выставили фьюзы для внешнего генератора, а нужно было для внешнего кварца.
- теперь для смены фьюзов нужно МК завести от внешнего генератора.
- сигнал внешнего генератора берите от Ардуино, нога XTAL2 и шейте фьюзы нужные, предварительно всюда публикуйте в понятном людям виде(HEX).
Главное - фьюзы какие выставили, не кусок из даташита, а в HEX-формате, что бы оценить полностью степень надругательства над чипом
Берёте из моего примера циферки и вбиваете в понятную вам программу, где видите что вам желается.
Вот проделал подобное для attiny2313, считал, вроде как получается от внутреннего на 8,0 мГц
Установил, вроде как от внутреннего на 1,0мГц. И толже потерял
ПИПЕЦ. Прошил фьюзы.
P.S. Куда тут циферки вставлять. Это единственная прога, которая увидела програматор
Зайдите сюда http://radioshemi.ucoz.ru/FUSI/calc.html?part=ATtiny2313 и выставьте в разделе
Биты конфигурации для PonyProg
фьюзы аналогично тому, как вы выставили, затем посмотрите в раздел
Конфигурация
увидите, что не все комбинации фьюзов являются правильными и имеющими хоть какой-то смысл.
зы
Что делать? - больше так не делать.
Для программатора usbasp существует прекрасный консольный софт avrdude для программирования - пользуйтесь им.
Для визуализации и расшифровки фьюзов просто найдите понятный вам и вразумитеьный калькулятор фьюзов.
Если так ж хочется пользоваться оболочкой для avrdude - найдите со встроенным калькулятором фьюзов.
То, чем вы пользуетесь - вам не помогает.
Так что, всё, залочил два контройлера?
Обажаю такие проги, которые при запуске на долю секунды показывают что то в командной строке и...... а дальше???...
Я ж говорю что "USBASP_AVRDUDE_PROG" единственное что вобще запустилось и увидело программатор.
Сегодня купил Atmega32 на 16-й всё равно всё бы не влезло, но жаль его. А этот теперь боюсь трогать. Посмотрел по ссылке, такую же конфигурацию SUT и CKSEL выставлял.
Вобщем парни вы правы, если нет мозгов плять, то и нехрен туда лезть. Пошёл я на гараже ворота красить и ещё надо ремкомплект на рулевую рейку поставить, а то как масло нагреется, туговат руль. Это на пару дней под машиной, может остыну, успокоюсь и продолжу или выкину этот храм и буду дальше рерюшки с транзисторами паять.
Если указать avrdude вместо фьзов случайные числа, то он прошьёт ближайшее по значению нечто правильное - можно, таки попробовать затактировать МК от внешнего генератора.
Если вы не умеете пользоваться компьютером, то при чём здесь "такие проги"?
запускайте консоль из папки так, что бы не мелькало.
Видимо, и не нужны никому эти приблуды поверх дудэ, поэтому и нет их нормальных, которые есть только запутывают пользователя.
Повторюсь - в калькуляторе фьюзов(полно в инете и я вам дал) генерите фьюзы, и вбиваете в командную строку. При таком подходе ошибки исключены.
Если бы такую, то всё бы работало.
CKSEL записал перед загрузкой в свой Atmel блокнот, это 1000. SUT не помню, т.к. не трогал но....
при любом раскладе вот как. (Поздно додумался скрин сделать). Осцелятор, как я уже писал, поставил ещё до рошивки, только на 16,000, думаю попробовать на 12,000, это как последняя надежда.
А с тинькой действительно ложанулся, выставил 0001, такой комбинации вобще нет при любых SUT.
Дуду так и не запускается, сделал как сказали. А есть проги чтоб заливать скетч не через дуньку, а сразу через пограматор USBasp?
тиняк ещё несколько штук есть, заводская установка на внутренний 8 мГц, но при работе частота падает, вот и хотел оставить на внутреннем на 4 мГц , сейчас ещё один на казнь поведу.
О...о....о...о, так я мегу 16 под внешний (не осцелятор) источник поставил?
А если в МК нельзя выставить SUT (Atmega32A) , прога имеет только Atmega32, в котором вытавляются эти фьюзы, попробовать прошить можно?(Atmega32A)
Последний вопрос снимается, можно. П Р О В Е Р Е Н Н О.))) Прошил под внутренний на 8.0
при любом раскладе вот как. (Поздно додумался скрин сделать).
При каком раскладе?
Прекращайте ерундой заниматься - я вам пояснил с самого начало, что нужно делать.
Повторю ещё раз - фьюзы писать напамять вкуда угодно в HEX-формате, что бы можно было и самому посмотреть и людям показать, скриншоты непонятно чего - мне лично не понятны и не нужны, т.к. и так ясно, что в результате фьюзы прошиты были неправильно.
Я вам показал способ запуска CMD из папки с дудой - введите в открывшемся окне avrdude.
Откуда я знаю, если вы сами не помните, фьюзы.