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

Минитерминал v.2.0



 Мной очень часто при настройке новоиспеченного устройства используется интерфейс UART. Удобно отослать данные в терминал и посмотреть, что же там происходит внутри отлаживаемого девайса. Но не всегда бывает удобно тянуть провода к компьютеру через отдельный преобразователь на FT232RL, поэтому зародилась идея собрать автономный миниатюрный терминал для приема данных и отображения их на LCD дисплее. 

Собственно зародилась эта идея давно, еще прошлым летом. Но к моменту готовности устройства и подготовки к публикации схемы, на дружественном нам ресурсе появилось схожее устройство http://bascom.at.ua/publ/avtonomnyj_mini_terminal/1-1-0-101 (походу и вправду существует некое биоинформационное поле, раз такие идеи приходят одновременно разным людям 8)) )
В общем, я решил не выкладывать тогда собственное творение и заняться доработкой своего терминала. В итоге появилась вторая, более крутая версия девайса, о котором пойдет сегодня речь.


 
 
 В качестве индикатора сразу был выбран недорогой дисплей от Nokia 3310, он прост в использовании и его можно купить в виде готового модуля, удобного для встраивания. При выборе микроконтроллера думал между Atmega8 и Atmega168. Сделал выбор в пользу последнего, по выводам они полностью совместимы но запас памяти в 16кб лишним не будет, тем более разница цены всего 20 рублей.
 
 
 схема устройства (кликабельно):
 
 


 У устройства помимо микроконтроллера и дисплея имеется 3 кнопки: кнопка сброса, кнопка  включения/выключения подсветки дисплея и кнопка для просмотра состояния. Более подробно об этих кнопках будет написано позже. Подсветка дисплея изображена условно в виде светодиода LED3.
 Так же есть системный светодиод LED2, он служит для индикации при получении пакета данных.


 Микроконтроллер работает от внешнего кварца с частотой 11059200 Гц, поэтому при прошивке микроконтроллера не забудьте выставить соответствующие фьюзы.
 
 
 Помимо всего прочего в схеме используется АЦП: для питания устройства я использовал литий-ионный аккумулятор. И для того чтобы знать уровень заряда аккумулятора, напряжение с него снимается через резисторный делитель R9-R10. Подстроечник RREF необходим для более точной подстройки напряжения выводимого на дисплее. В питании АЦП стоит стандартный фильтр на керамическом конденсаторе и дросселе C1-L1 как советует даташит.
 
Плата разведена на двухстороннем текстолите, получилось довольно компактно в то же время при изготовлении платы и пайки проблем не возникает






"Тарелка" в верхней части платы это пьезодинамик, под него на плате специально место не выводил. Просто случайно попался мне на глаза и решил его применить. Припаял прямо на проводках, жесткость проводков МГТФ-0,6 хватило для надежной его фиксации. Подключается напрямую к PortC.2 (на схеме не показано). Динамик озвучивает момент включения и навигацию по настройкам. В общем, с ним веселей.






С обратной стороны небольшое количество дорожек, никаких компонентов. И аккумулятор, он у меня 1в1 по размерам платы. Поэтому после склеивания платы с аккумулятором термоклеем получилось довольно-таки практично


 

Для того чтобы "посадить" дисплей ниже к основной плате, я проделал следующий финт по переделке разъема PBS
 
   

Контактные площадки под дисплеем - это контакты для программирования.



 
 
Чем заряжать Li-Ion аккумулятор?
 
 В качестве контроллера заряда для литий-ионного аккумулятора я выбрал недорогой MCP73831T со встроенным индикатором окончания зарядки.
 Красным обведена схема отвечающая за подзарядки аккумулятора (на схеме она обведена пунктиром). Поэтому если при повторении не планируется использование аккумулятора, эту часть схемы можно не собирать.
 

 
 
 В даташите на MCP73831Tесть график, показывающий зависимость зарядного тока от резистора R3
 
 
 При сопротивлении резистора 2кОм MCP73831T работает на максимальном токе и начинает поджариваться - надо предусматривать отвод тепла. Не стал рисковать и уменьшил ток заряда до ~180мА, впаяв резистор на 5,1кОм.


Светодиод LED1 горит в процессе зарядки, при окончании - гаснет.
 









Ну а теперь ради чего все затевалось - автономный минитерминал. На дисплей в основном режиме выводятся данные, приходящие по UART. В нижней строчке отображается номер принятого пакета. Второй пришедший пакет выведется во второй строке, и так далее. Дойдя до пятой строки старые данные будут сдвигаться вверх, ну тут все стандартно.

 


 Подсветка включается/выключается по нажатию на среднюю кнпоку: нажали один раз - включили подсветку, нажали второй раз - выключили.

 При нажатии на крайнюю правую кнопку появится информационное окно, в котором будет уровень напряжения на аккумуляторе и выбранная скорость работы UART (baudrate). Если напряжение, выводимое на дисплей, отличается от действительного, просто крутим подстроечник RREF.

 Это информационное окошко будет отображаться пока нажата кнопка.




 

 Если, не отпуская крайней правой кнопки, нажать среднюю - появится возможность изменить скорость работы порта (по умолчанию, сразу после программирования скорость порта составляет 4800 бод) Всего доступно 5 скоростей: 4800, 9600, 19200,38400 и 115200 бод. 

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

 Что касается возможности терминала не принимать, а отправлять данные, то это не предусмотрено. На маленьком экране, да с тремя кнопками особо не развернешься, поэтому городить смысла нет. Зато эта возможность появилась в новой версии минитерминала
http://avrproject.ru/publ/miniterminal_v_3_0/1-1-0-172
 
 
 
 

Архив с исходниками и прошивкой

Схема в Proteus (можно посимулировать схему)

 

 
 
Категория: Проекты | Добавлено: 15.01.2014
Просмотров: 55744 | Комментарии: 51 | Теги: Miniterminal, uart, схемы | Рейтинг: 4.8/16
Всего комментариев: 511 2 »
51 maga_ges   (21.05.2017 16:26) [Материал]
Спасибо! попробую выставить.

50 sakatgg   (21.05.2017 02:58) [Материал]
49 maga_ges, Хорошо макетку не разобрал, снял МК, в программаторе глянул: L - 0xFF, H - 0xDA, E - 0x05, LB - 0x3F для 11059200 Гц
Atmega328P

49 maga_ges   (18.05.2017 22:01) [Материал]
Напишите какие фьюзы выставить, а то не разобрался прошил как есть терминал не заработал

48 maga_ges   (18.05.2017 21:22) [Материал]
sakatgg а Ваша прошивка на сколько МГц?

47 sakatgg   (30.04.2017 16:31) [Материал]
У кого не качает, приложил в теме FuseBit Doctor radiokot.ru/forum/viewtopic.php?p=3094126#p3094126

46 Basykad   (26.04.2017 20:36) [Материал]
sakatgg всё таки если можно скинте свой проект может пригодиться ещё для чего. Соберу и пристрою его.

45 sakatgg   (25.04.2017 20:58) [Материал]
Basykad, Подключал и к роутеру, также и к Доктору фьюзов - обрезает, ничего не увидете толком. Поэтому и жду релиза проекта "Пультоскоп на Arduino 27МГц", с Тернималом под oled SSD1306 I2C 128x64, ниже писал уже.
Под экран 5110 релиз еcть(не реклама) arduino.ru/forum/proekty/pultoskop-na-arduino-27mgts?page=57#comment-270385
Если не качает, tor используйте

44 Basykad   (24.04.2017 10:43) [Материал]
sakatgg можно файлы прошивки и схемы сбросить не могу скачать по вашим ссылкам, я так понял у Вас терминал собран на 328. Мне нужна скорость 4800 и если можно под кварц 16МГц. Хочу прикрутиь его к Доктору фьюзов, там как раз выход есть на терминал.

43 sakatgg   (21.04.2017 23:18) [Материал]
maga_ges, mediafire.com/file/rd0uzg09avp6so8/m328p_57600_11059200_NEW_PIN_VCC.rar

Для Atmega328, добавлена скорость 57600 (вместо 38400, картинки не менял), кварц 11059200
порты так: B5-RES, B4-CE, B3-DC, B2-DIN, B1-CLK и U питание индикацию поменял, как ниже писал

42 maga_ges   (13.04.2017 19:46) [Материал]
sakatgg Можешь выложить прошивку переделанную под твою печатку? Можно отправить на maga_ges@mail.ru

41 sakatgg   (23.03.2017 13:38) [Материал]
Нарисовал плату под DIP
mediafire.com/file/mpdxd2825em872a/Минитерминал+09.lay6
можно перемычкой выбирать питание с microusb (через LM1117) или с лития (с подзарядкой MCP73831T, выключатель), порты так разведены:
B5-RES, B4-CE, B3-DC, B2-DIN, B1-CLK
И ниже писал, какие элементы из схемы удалил.
Но делать не стал, нашел в сети развиваюшийся проект "Пультоскоп на Arduino 27МГц", в нем тоже реализован Тернимал, под oled SSD1306 I2C 128x64 (больше инфы влезает) и строки не обрезает. Обещают и передачу в порт прикрутить. Есть версия под дисплей Nokia5110.
Почитал даташит MCP73831T, там рекомеодовано выводы делать под большие полигоны, чтоб тепло лучше отводилось, учел это в печатке.

40 sakatgg   (07.03.2017 16:25) [Материал]
Прочитал комменты еще раз, сделал так:
Start Adc
W = Getadc(14)
Wsingl = W / 310
U питание показывает 3.3В (резюки R9,R10,PERF не нужны). Еще не нужен в моём случае R8 200R на Light дисплея, при включении подсветки I=5mA (при U=3.3В)
На LED2 тоже можно не ставить R5 (при U=3.3В), там будет I=27mA (порты позволяют до 40mA), если ток для экономичности :)

39 sakatgg   (06.03.2017 22:52) [Материал]
Именно в этих строках и прописал, как ниже писал, еще раз стер и прошил. при включении меню не выскакивает (т.е. значение прописано в epp), но опять на 4800 стоит :( приходиться ручками

P.S. Сейчас немного изменил, переназначил выводы дисплея под другие порты, записал, по умолчанию стало 57600 :)

P.S.2 Работают порты так: B5-RES, B4-CE, B3-DC, B2-DIN, B1-CLK, так по порядку на дисплее идут и разводку удобнее делать под DIP.
А вот кнопку с D3 переназначаю на D6 или D7 - не работает на этих портах
Не подскажите на какие порты еще можно переназначить кнопку Подсветка и Уровень Бат.?

Все таки как-то криво прописывается по умолчанию, один раз вообще стартанула с 19200 после прошивки.

0  
38 exersizze   (06.03.2017 20:30) [Материал]
Скорость по умолчанию выставляется в 3-й и 125 строках.
По питанию дисплея как повезет, у меня работает.

37 sakatgg   (06.03.2017 17:21) [Материал]
Собрал пока на макетке на 328P (кварц 11059200Гц), от 3.3В нормально работает.
Также пробовал на Arduino Pro Mini - тоже работает, но там кварц SMD.Перепайвать не стал, на 16Мг вроде работает.

http://i90.fastpic.ru/big....0c5.jpg
http://i91.fastpic.ru/big....792.jpg

Скорость 38400 заменил везде в исходнике на 57600 (на bmp в выборе осталось 38400, так понимаю картинки надо редаетировать)
Подсоединил на этой скорости к роутеру, выводит часть текста, так понимаю выше 15 символов просто отсекает.
Если построчно выводиться не более 15 символов, то все пучком.

В 3 строке сделал
$baud = 57600
В 125 строке сделал
Baud_1 = 57600
Но чет после прошивки всё равно стоит на 4800 по умолчание, где еще надо изменить?

Если питание от лития, где U достигает до 4.2В, не вредно для дисплея? Спасибо

0  
36 exersizze   (03.03.2017 09:02) [Материал]
Ага, на схеме контроллер в корпусе дип. Если переразводить под другой корпус, смотрим не на нумерацию а на названия выводов.
Архив с прошивкой http://avrproject.ru/miniterminal/m328p.zip

35 sakatgg   (03.03.2017 03:06) [Материал]
Достал кварц на 11059200 Гц, скомпирируйте пожайлусто под него на Atmega328. Bascom-AVR 1.11.9.8 скачал, буду изучать, если не трудно скомпируруйте еще раз :)
У Вас схема нарисована для Atmega168 в DIP, в реале TQFP32. У них же нумерация выводов не совпадает. Печатку наверное в lay буду делать, хотел уточнить выводы на схеме точно для DIP корпуса?

0  
34 exersizze   (02.03.2017 10:24) [Материал]
Под другой камень нужно перекомпилировать, изменив в заголовке программы тип контроллера.
Компилировать только в bascome версии не выше 1.11.9.8
В архиве я вам уже скомпилировал прошивку под 328 и кварц 16МГц. Только учтите что такой кварц дает большие погрешности на частоте 115200 бод, и скорее всего на ней работать толком не будет
http://avrproject.ru/miniterminal/vers2/328_16MHz.zip

33 sakatgg   (01.03.2017 14:08) [Материал]
Если буду делать на Atmega328, прошивку ту что в архиве ставить можно? Или надо компилировать? Если компилировать, то подскажите, что изменить в исходнике для поддержки 328 и какой программой компилировать?
Или если не трудно выложите готовую и какие фьюзы, кварц на 16Мг внешний. Возможно на Arduino Uno R3 буду пробовать, тут в комментах уже делали. Спасибо.

0  
32 exersizze   (20.05.2016 22:15) [Материал]
Придется немного переделать схему питания, чтобы была возможность питание отрубать программно. Вроде сложного ничего нет, добавить один полевой транзистор и пару резисторов. Но сейчас этого устройства у меня нет (перебрался к другому владельцу) и модернизировать что-то там особо желания нет.

31 tyomanik   (20.05.2016 08:39) [Материал]
Привет! Сделал себе!С фьюзами разобрался и нарисовал свою плату, кому интересно обращайтесь. Вопрос к автору - а можно сделать так что бы он выключался например с удержанием кнопки подсветки. А то както неудобно что постояно включен.
Спасибо!

0  
30 exersizze   (07.01.2016 13:29) [Материал]
IOPA4, компилируй в версии 1.11.9.8 или более ранних, в новых версиях баскома библиотека дисплея не работает.

29 IOPA4   (05.12.2015 17:33) [Материал]
При компиляции исходника Error :369 Line :267 Duplicate label name used by const or variable [A], in File : 3310end.bas
Error: 369 Line :269 Duplicate label name used by const or variable [B], in File : 3310end.bas

28 top   (18.05.2015 09:35) [Материал]
Межстрочный пропуск заключен в символ по умолчанию (8 бит, 7 из которых отведены символу).
Межбуквенный интервал задается таким образом:

'And print a blank column for inter-character spacing
D3310column = 0
Call D3310dataout(d3310column)

Отсюда решение: Закомментировать вышеуказанные строки кода, а в 'ASCII data к каждому символу добавить шестой столбец с ноликами.
Что самое интересное, то при выводе на экран достаточно просто делать логическую инверсию (Not) каждого выводимого байта:

'Read and print each column
For D3310columnloop = 1 To 6
Read D3310column
D3310column = Not D3310column
Call D3310dataout(d3310column)
Next D3310columnloop

Вот и весь инвернсый вывод строки)

Добавлено:
Сейчас пораскинул мозгами и понял: дополнять шрифт шестым столбцом нет необходимости. Можно просто ввести флаг инверсии, а в функции Print просто его проверять:
For D3310columnloop = 1 To 5
Read D3310column
If Flg_inv = 1 then D3310column = Not D3310column
Call D3310dataout(d3310column)
Next D3310columnloop

D3310column = 0
If Flg_inv = 1 then D3310column = 255
Call D3310dataout(d3310column)

0  
27 exersizze   (18.05.2015 00:10) [Материал]
Я пробовал колдовать со стандартной библиотекой, она же умеет инвертировать экран. Пытался добиться инвертирования только на нужной строке. Не вышло. А потом думаю: "памяти же вагон, можно нарисовать как надо". На этом и остановился. Со шрифтами идея нормальная, только там вроде между символами расстояние в один пиксель останется не закрашенным.

26 top   (15.05.2015 11:22) [Материал]
Значит задача программного выделения строки еще не решена) Я в своем проекте делал перемещение указателя в виде галочки ">" перед пунктом меню. Но хочется более наглядное с выделением строки. Боюсь придется создавать инверсный шрифт и символ полностью закрашенного знакоместа чтобы программно выделять строки.

0  
25 exersizze   (15.05.2015 10:21) [Материал]
Ага

24 top   (15.05.2015 09:59) [Материал]
"Листание" списка скоростей осуществляется путем перебора картинок?

23 vakulyuk   (29.11.2014 03:34) [Материал]
Max, спасибо)

22 max   (28.11.2014 19:19) [Материал]
Нужно использовать Bascom-AVR 1.11.9.8 и ошибок не будет.

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






авторизация
Логин:
Пароль: