Главная » Статьи » Проекты

Минитерминал V.3.0

 Тема такого устройства как минитерминал, поднималась на этом сайте уже пару раз: первая версия, вторая версия. И за время использования второй версии, устройство показало себя отличным помощником при отладке во многих проектах. Единственное чего иногда не хватало, это возможности отправлять в отлаживаемое устройство своих команд. Поэтому разобравшись с работой большого цветного дисплея на контроллере ILI9325, решил сделать новую версию минитерминала на нём. К тому-же на этом дисплее уже есть сенсорная панель, благодаря которой можно организовать все управление, а также набор текста, не прибегая к подключению внешней клавиатуры.

 У меня уже лежала распаянная под дисплей плата с микроконтроллером ATMega128a, ее я и использовал в качестве  основы для устройства. Так как дисплей соединен с контроллером напрямую, схема предусматривает питание не более 3,3 вольта, если выше - есть вероятность что дисплей выйдет из строя.  Сначала я хотел применить в качестве источника питания связку из двух батареек R20, у них очень большая емкость и они долго держат нужное напряжение. Но когда стал примеряться, выходило слишком громоздко. Поэтому был откопан, купленный несколько лет назад, модуль преобразователя на LM2577.  А источником послужила Li-Ion батарея емкостью 2500мА/ч. Получилась очень годная связка, способная отдавать стабильные 3,3 вольта во всём рабочем диапазоне напряжений аккумулятора. Для подзарядки использован модуль на микросхеме TP4056.  Его я давно применяю и он хорошо зарекомендовал себя, плюс очень низкая цена такого решения.

 

 Чтобы иметь возможность подключать минитерминал к пятивольтовым устройствам не боясь спалить дисплей, порты UART развязаны через модуль согласования уровней. Я применил готовый, как раз имелся в наличии на 4 канала. Его можно собрать самому, схема элементарная. Кстати, почему нужно 4 канала? Дело в том что у ATMega128 целых два аппаратных UART интерфейса, и я подумал что неплохо бы использовать оба и сделать двухканальный терминал.

 На  разъемы, помимо Rx / Tx выведено питание, на случай если нужно будет запитать отлаживаемое устройство напряжением 3,3 вольта. В разрыв цепи запаян диод Шоттки, если вдруг по ошибке от испытуемого устройства в схему пойдет напряжение выше 3,3 вольт.

   

 На плату также добавлен пьезодинамик для озвучивания действий и двухцветные светодиоды с ОК (общим катодом)  для индикации работы. У меня это все напаяно поверх, но в конце можно будет скачать доработанную печатную плату.

 В конечном виде схема выглядит так

 

 

 

 Вариант корпуса для устройства, напечатанный на 3d принтере. Все элементы схемы и крышка корпуса будут фиксироваться на термоклей. Это самый простой вариант, но не самый технологичный для сборки/разборки. Поэтому надо бы доработать и добавить крепежные узлы. 

   

 

 А пока крепится все так: сначала фиксируется дисплей, затем кнопка включения и модуль зарядки, потом все остальное.

   

 

 При программировании микроконтроллера необходимо запрограммировать фьюзы на работу от внешнего высокочастотного кварца, отключить совместимость с ATMega103 и отключить JTAG

 В Khazama-AVR фьюзы выглядят так

 

 

 После сборки и прошивки микроконтроллера особых настроек не требуется, нужно только с помощью подстроечного резистора R4 подогнать отображаемое на экране напряжение к реальному значению на аккумуляторе. Для этого рекомендую сперва выставить подстроечник в среднее положение и только после этого подавать питание, чтобы после включения на вход АЦП шло менее 3,3 вольта (опять же для того чтобы обезопасить дисплей). 

 Из настроек терминал имеет изменяемую частоту работы UART интерфейса, формат отображения принятых данных (ASCII и HEX) и их вид (DISP и LAST).

 Чтобы было понятно, остановлюсь на последнем параметре: в обычном режиме DISP (Displacement) идет отображение всех последних принятых данных, и при заполнении экрана идет смещение, таким образом на экране помещается 22 строки. Очистка и перерисовка, при каждом новом приеме данных, занимает относительно много время и чтобы увеличить возможную скорость приема, введен режим LAST. В этом режиме на экране выводится только последний принятый пакет данных. В общем, что получили то и вывели.

 При нажатии на кнопку CLEAR, происходит очистка дисплея. INFO - информация о версии прошивки и контактная информация. Кнопка STOP, как не трудно догадаться, останавливает прием данных (полезно когда данные идут сплошным потоком и нужно остановиться и разглядеть).

 При первом включении скорость работы UART по умолчанию стоит 1200 бод. Её можно поменять на значения 2400, 4800, 9600, 19200, 38400, 57600 и 115200 бод. Скорость сохраняется в энергонезависимой памяти и при следующем включении терминал будет работать на последней выбранной скорости. 

 Для набора текста использована клавиатура описанная чуть ранее, для того чтобы открыть клавиатуру нужно нажать на прямоугольник внизу экрана, в нем же будет отображаться последний набранный текст. Клавиатура позволяет напечатать любой текст в латинской раскладке, а также большинство дополнительных символов

   

 Как я уже писал, в схеме я предусмотрел одновременную  работу двух UART интерфейсов. Но в прошивке пока реализован только один канал - на аппаратном UART0. Второй - UART1, оставил как задел на будущее. Поэтому набранный текст улетает в Tx0.

 Было упомянуто, что в режиме DISP на экран помещается 22 строки принятых данных, ограничение по длине принимаемого и отправляемого пакета составляет 30 символов. А если перевести отображение данных в HEX формат, тогда ограничение по длине пакета составит 10 символов. Ограничение обусловлено оставшимся на экране местом. Для простых задач, которые возложены на это устройство, этого должно хватить.

 Ну и для примера достал не задействованную плату с распаянным GSM-модулем SIM900D, которая давно уже у меня лежит.  Два запроса о версии прошивки модуля, первый в ASCII формате, второй с отображением данных в HEX формате:

 

И еще немного общения с этим модулем, на другой скорости:

 

 В общем, девайс получился удобным и очень полезным. Рекомендую к повторению. Если что-то упустил оставляйте свои вопросы в комментариях.

 

Печатная плата (DipTrace)

Схема (DipTrace)

Исходники и прошивка

Модель корпуса

 

Ссылки на детали, использованные в проекте:

Дисплей

Преобразователь напряжения

Модуль конвертера уровней

Модуль заряда Li-Ion батареи

 

 

Категория: Проекты | Добавлено: 18.07.2016
Просмотров: 2908 | Комментарии: 27 | Теги: uart, Miniterminal | Рейтинг: 5.0/8
Всего комментариев: 27
+1   Спам
27 ya-zp   (08.09.2016 23:50)
Чтобы не засорять тему отписался в "обратную связь"

0  
26 exersizze   (08.09.2016 20:56)
Отлично, так и думал что в согласовании уровней дело. Больше здесь не работать нечему) Надо тоже свой LM2577  глянуть, скорей всего картина будет та же.
Пожелание учту, реализовать не сложно. Только пока не могу придумать, для чего такое может пригодится?

25 ya-zp   (08.09.2016 11:52)
Докладываю: спасибо за подсказки, все заработало! Причин несколько, на согласование уровней ставил б/у полевики, что и сыграло злую шутку: у двух из четырех при вкл. питания уровни заваливались. И второе, попался модуль lm2577 с дефектом, выдает он при замере мультиметром 3.3в как положено, но как тыкал осциллографом чуть не поседел: проскакивали с завидной регулярностью "иголочки" амплитудой до 7в! Но все выжило. Прошил напоследок хексом автора и все заработало! Еще раз огромное спс!
Как предложение: можно ли реализовать в устройстве функцию отправить в порт то что было принято последним (типа копи-паст :-)) А то не очень удобно и быстро прлучается настучать "сообщение" в три строки длиною

0  
24 exersizze   (05.09.2016 12:07)
>>>при подключении терминала к любому источнику сигнала на дисплее терминала вместо напряжения батареи высвечивается уровень напряжения источника сигнала
Плюсовые выводы терминала и подключаемого устройства соединяли? Для отсечки перенапряжения как раз и стоит диод Шоттки D1. А вообще для передачи сигнала, достаточно соединять землю и сигнальные выводы.
Тогда еще следует попробовать пока убрать схему согласования, и подать сигнал напрямую к ножкам микроконтроллера. Но не забывайте что подключаемое в этом случае устройство должно работать на напряжении не выше 3,3 в

23 ya-zp   (03.09.2016 07:28)
Согласование делал, вариант платы автора без изменений, программу компилировал сам из исходников автора ( хекс из архива не пошел, шил последним баскомом, 2.0.7.5 версия). Заметил еше одну странность: при подключении терминала к любому источнику сигнала на дисплее терминала вместо напряжения батареи высвечивается уровень напряжения источника сигнала. Сегодня попробую погрузить плату в спирт и перепрошить.

0  
22 exersizze   (02.09.2016 23:05)
ya-zp, часть схемы со согласованием уровней делали?

21 ya-zp   (02.09.2016 20:01)
Эхо слышится нормально, один к одному без искажений

0  
20 exersizze   (02.09.2016 19:36)
На экране должны будут выводиться отправленные сообщения.

19 forter   (02.09.2016 15:10)
А если замкнуть Tx и Rx между собой и посылать/принимать на сам минитерминал, что происходит?

18 ya-zp   (02.09.2016 13:16)
Привет всем
Маленький воппос по конструкции: собрал минитерминал, все заработало, но, при приеме сигналов на экране отображаются лишь иероглифы. Скорость менял. Ранее пользовался младшей версией терминала взятого тут же :-), за что автору огромное спасибо! Комп и старый терминал показывают нормально (кодировка ascii), a v3.0 только набор нечитаемых символов. Ошибок в монтаже нет. Подскажите, куда копнуть. Плз.

+1   Спам
17 forter   (04.08.2016 21:24)
To exersizze!
А так работает стирание первого символа набранной строки:
.........................
If Sss > 1 Then
Ssx = Sss - 1
Text = Left(text , Ssx)
Dim Text_1 As String * 31
Text_1 = Text + " "
Else
Text = "" '
End If
........................
Очистка оставшегося символа в поле набора символов происходит в строке 1703.
If Text = "" Then
Restore Color8x8
Lcd_text_color " " , 3 , 7 , Black , White 'на случай если строка окажется пустой
End If
При нажатии в поле набора текста очистка ВСЕЙ набранной строки работает прекрасно.
Спасибо!

16 forter   (04.08.2016 12:01)
To exersize!
Сам компилировал с учетом изменения типа переменной F как word.
Попробую проверить несколько вариантов.

0  
15 exersizze   (04.08.2016 10:59)
Не, пустая строка это пустая строка, там пробела нет. Там содержится спецсимвол, типа перевода каретки и конца строки, сейчас нет возможеости посмотреть точно.
Можно и так как вы написали, но странно что такой глюк, так как эту клавиатуру уже успели некоторые попробовать и проблем небыло. Прошивку сами компилировали или взяли готовую из архива?

14 forter   (04.08.2016 09:45)
Пустая строка - это пробел, он тоже имеет длину и код ASCII.
Может быть так?
....................
Ssx = Sss - 1 - в случае последнего символа Ssx=0
If Ssx <>0 then
Text = Left(text , Ssx)
Dim Text_1 As String * 31
Text_1 = Text + " "
Else
Text1=" "
End If
Restore Color8x8
Lcd_text_color Text_1 , 3 , 7 , Black , White
..............................

0  
13 exersizze   (04.08.2016 09:11)
Может, он в этом случае возвратит пустую строку.

12 forter   (04.08.2016 08:30)
To exersize! Спасибо за ответ!

If Y > 168 And Y < 199 Then 'стирание символа
If X > 273 And X < 311 Then
If Sss > 0 Then - если Sss - длина строки, то последний левый символ будет давать строку длиной Sss=1
Ssx = Sss - 1 - в случае последнего символа Ssx=0
Text = Left(text , Ssx)- Может ли оператор Left вернуть значение нулевого по порядку символа? Наверное - нет!Мне кажется счет начинается с Единицы!
Dim Text_1 As String * 31
Text_1 = Text + " "
Restore Color8x8
Lcd_text_color Text_1 , 3 , 7 , Black , White
End If
Pulseout Portg , 0 , 50000
End If
End If

0  
11 exersizze   (03.08.2016 21:22)
"Забить" в смысле стереть первый символ не получается? Посимвольное стирание организовано начиная со строки 1664 и дальше.

А если удалить всю строку целиком, нажав на вводимый текст, первый символ тоже остается?

10 forter   (03.08.2016 10:47)
To exersize!
Почему-то не могу "забить" первый символ в строке. Т.е., например, набрал в строке АТ, клавишей "<<" забиваю Т, а символ А не забивается. В теле программы как-то не могу найти где это происходит. Прошу подсказать как можно исправить этот недостаток?

0  
9 RD3AVJ   (01.08.2016 15:12)
Малина переехала в подольск и трудится как FRN сервер репитера. Синтез пашет вовсю, пока собираю усилок на китайской "шоколадке". Как будет готово - поделюсь))) Твой минитерминал у меня тестит платы управления, штука незаменимая, вывешивает на экран сбойные ситуёвины и вообще помогает! так что спасибо тебе огроменное!

0  
8 exersizze   (29.07.2016 19:02)
RD3AVJ, синтезатор внедрил уже?)
Кстати, у тебя же малинка с экраном есть, можно организовать на ней. Тем более что в операционке наверно уже терминал есть готовый.

0  
7 RD3AVJ   (28.07.2016 21:22)
Уххх тыыы! А я еще второй версией терминала пользуюсь))) - практически постоянно. Супер. Надо будет трешкой озадачиться!)) Как ни странно в основном юзаю для контроля ходы выполнения программ управления синтезаторами частот для радиопередатчиков.

0  
6 exersizze   (20.07.2016 14:06)
У меня версия 2.0.7.8, и как ни странно компилирует без ошибок. Спасибо что заметили, перезадал  переменную.

5 forter   (20.07.2016 09:10)
To exersize!
У Вас в при вызове двух подпрограмм Lcd_text_color S_space , 1 , F , Black , White и Lcd_text_color A(m + 1) , 1 , F , Black , White используется переменная F, которая должна использоваться как Word (как указано в inc - файле). В начале программы эта переменная F объявляется, как Byte, поэтому при компилировании появляется ошибка "Different parametr type passed than declared [F]". После переопределения F как Word, все компилируется без ошибок. Может быть, разные версии Bascom (у меня 2.0.7.5)?

0  
4 exersizze   (19.07.2016 12:08)
На нем и печатаю, мне тоже нравится как он держит пластик. Но с ним другая проблема, если деталь большая и время печати большое, загибает края детали из-за усадки ABS. Причем загибает вместе со скотчем, тот попросту отрывается от стекла.  На этом корпусе загнуло миллиметра на 2 по краям и крышка не прилегала,  пришлось выравнивать наждачкой. Вот на этой фотке видно что стенки посередине сточены http://avrproject.ru/112/minitrminal30b/korp333.jpg
А если перевернуть модель и печатать мордой вниз, тогда ее загнет и уже никак не исправишь. Еще хочу попробовать всю модель поднять на поддержке, а саму поддержку вытянуть за пределы детали, чтобы загибы не дотягивались до нее. Короче мороки много с ABS, надо на пробу катушку PLA взять.

3 pchela5   (19.07.2016 10:48)
Синий термоскотч не пробовал использовать? Тот китайский, который шел в комплекте, я благополучно похерил при настройке принтера, но мне знакомый подогнал 3М - он работал в автосервисе и у него были остатки - вещь посильнее Фауста Гете, я тебе скажу - первый слой гладкий, как пятки у младенца ))) Но, правда, я печатаю пока кукурузой, на ABS еще не переходил.

0  
2 exersizze   (19.07.2016 10:15)
Спасибо. Печатал мордой к верху, чтобы поверхность была хорошей, а все внутри заполнил поддержкой. Шаг 0,2.

PS. Я по первому опыту экономил пластик для поддержки и печатал мордой вниз. Но первый слой обычно печатается страшный и в итоге получалась дичь на лицевой панели.  Теперь я так не делаю, лучше увеличить расход пластика в два раза, и получить в итоге гладкую поверхность.

1 pchela5   (19.07.2016 10:04)
Хорошо получилось. Только мне лично непонятен процесс изготовления корпуса :( - с какой стороны ты начинаешь печатать? Если морда последняя - то ты поддержку используешь? С каким шагом. PS Чертеж не смотрел еще.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






   EasyEDA:  бесплатный редактор схем

   ✓ Создание схем
   ✓ Возможность симуляции
   ✓ Быстрое создание печатных плат
   ✓ Интуитивно понятный интерфейс

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?
Помни об усадке!
29.11.2016 - AlekS:
Виктор, спасибо.
С заменой транса в зиму, перестройка не комельфо) Валяет...
Управляем микроконтроллером с ПК по UART
29.11.2016 - exersizze:
Михаил, для работы с инфракрасными датчиками и диодами есть команды RC5SE...
Управляем микроконтроллером с ПК по UART
29.11.2016 - Михаил:
Всем привет.
Подскажите как переменную S передать по инфракрасному каналу...
Помни об усадке!
29.11.2016 - pchela5:
> Если ленту светодиодную порезать и соединить последовательно
Только ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
29.11.2016 - exersizze:
yorx, вывод Q7 ' первой микросхемы соединен с DS второй микросхемы? С...


Лучшие цены на 3D принтеры
успей сделать себе подарок к Новому Году! ;)


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.