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

Минитерминал 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, поэтому не придется каждый раз после включения заниматься перенастройкой. Пробовал принимать данные на всех скоростях, проблем не возникло.
 

 Что касается возможности терминала не принимать, а отправлять данные. То это не предусмотрено, ну по крайней мере пока. Так как такой необходимости я не испытывал, но если что, можно добавить режим работы и на передачу - в памяти есть еще свободных 18%
 
 
 
 

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

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

 

 
 
Категория: Проекты | Добавлено: 15.01.2014
Просмотров: 31060 | Комментарии: 32 | Теги: Miniterminal, uart, схемы | Рейтинг: 4.8/16
Всего комментариев: 321 2 »
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 и ошибок не будет.

21 vakulyuk   (28.11.2014 17:34)
Подскажите почему при компиляции выдается ошибки о совпадении имен констант "А" и "В"? Как быть?

20 sherpa   (01.11.2014 13:10)
Поясните пожалуйста! В схеме, описании м на рисунках Atmega168, а в приведенном списке Atmega128! Этот список к чему?
"Список элементов с параметрами для данного проекта: http://mypartlist.com/share/index.php?id=3&add=1"
------
Автор не несет ответственность за информацию размещенную на других сайтах. В проекте использована 168я мега.

+1   Спам
19 Le_Fleurs   (30.07.2014 22:13)
Теперь для полного счастья нужен ещё Мини Осциллограф

18 mypl   (05.04.2014 14:32)
Список элементов с параметрами для данного проекта: http://mypartlist.com/share/index.php?id=3&add=1

+1   Спам
17 bec123   (30.03.2014 09:43)
собрал ваш проэкт на ардуино уно чип атмега328 кварц16 работает прекрасно

16 Ghjuhfvvf   (16.03.2014 19:06)
Подредактировал программу автора: вывод в DEC/HEX/ASCII формате, при удержании 3 кнопки происходит переход между форматами. От построчного сдвига пришлось отказаться, каждая новая строка после очистки экрана. Пришедший из Китая модуль, по распиновке выводов не совпадал. Кому понадобится вышлю и разводку в SL6 и исходник, мог бы и здесь выложить, но не в курсе как ... Спасибо автору, интересный проект

+1   Спам
15 Valera18   (27.02.2014 19:46)
Для asd81

Дисплей Nokia 5110 это аналог Nokia 3310. В этом проекте используется дисплей Nokia 5110.

14 asd81   (27.02.2014 18:41)
подскажите, а будет ли работать с дисплеями от Nokia5110? что для этого нужно?

13 wle1036   (11.02.2014 03:03)
Hi
Can you MPU6050 Module Launch?

picture : http://playground.arduino.cc/uploads/Main/mpu-6050.jpg

data shett: http://wle.ir/up/do.php?filename=139207328939632.pdf

+1   Спам
12 mvn77   (16.01.2014 20:54)
Getadc(14) на 88их и 8х меряет напругу питания, реализовывал для контроля напряжения батареи, работает весьма нормально.....
Код выглядит так
Start Adc 'запуск АЦП
W = Getadc(14)

W = W / 4
Bat = W
Stop Adc

+1   Спам
11 sany2   (16.01.2014 00:26)
kip96 - спасибо-ценная информация!

10 AlekS   (16.01.2014 00:18)
Да,я, за автономность) когда комп занят делом а надо) Было дело с этим http://mdiy.pl/atmega-fusebit-doctor-hvpp/ 40 буковок в строке( и результат виден, что подправить надо набрать( А все в клаве удобно. А это самое главное + автономность

9 exersizze   (15.01.2014 23:49)
AlekS , спасибо.
Про клавиатуру, большой дисплей и прочее. Я думал о том чтобы использовать вот такой дисплей http://avrproject.ru/forum/9-149-2332-16-1374677855 
на таком можно развернуться на славу, и к тому же там есть сенсорная панель - можно текст набирать прямо на нем, без использования хардварной клавы.
Может когда нибудь и появится версия 3.0 smile

+1   Спам
8 kip96   (15.01.2014 23:41)
Классно вышло! ещё бы добавить выбор вывода в bin и hex. Иногда полезно.
для pchela5
про питание обсуждалось http://avrproject.ru/forum/4-101-1 с 19 сообщения.

+1   Спам
7 AlekS   (15.01.2014 22:58)
Поаккуратней в дизайне чем на bascom.at.ua, +100

6 AlekS   (15.01.2014 22:47)
Radan, здесь она избыточна, что либо писать мало место для буковок. Но если взять клаву и все устройство в нее и индикатор чуть больше в строке, символов так 30. Думаю
цены не будет устройству.

5 sany2   (15.01.2014 17:48)
Может 1.1 это внутреннее напряжение,и относительно него меряется внешнее?

4 pchela5   (15.01.2014 16:52)
Что-то я не понял про Getadc(14). Как он меряет сам себя? Поподробнее можно? По даташиту 14 канал - подключение опорного напряжения 1.1 вольта

3 radan   (15.01.2014 14:17)
Неплохо было бы прицепить клавиатуру от ПК.

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






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

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

   Нарисуй свою схему прямо сейчас!
   Изготовление печатных плат   https://easyeda.com/order
авторизация
Логин:
Пароль:
Комментарии
Сетевой диммер 220V на микроконтроллере
09.12.2016 - vakulyuk:
Спасибо) Я принцип действия понял, а вот откуда взялась именно цифра 195 не поня...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - exersizze:
pchela5, ну так это в военное, а у нас в мирное время все примерно)) Наше...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - pchela5:
> Полуволна в нашей электросети по времени длится примерно 10 мс

...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - exersizze:
Чтобы понять откуда взялась цифра 195 надо сначала въехать в принцип работы: ког...
Сетевой диммер 220V на микроконтроллере
09.12.2016 - vakulyuk:
А почему минимальный накал при 195? Насколько минимум можно занизить Wt?
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
08.12.2016 - exersizze:
yorx выдалось немного свободного времени, проверил в симуляторе. Проблема...
Логгер температуры 2.0
05.12.2016 - Evgeny6873:
Хотел повторить схему и долго ждал дисплей, два раза заказывал с Китая, пришел. ...
Когда не хватает ног. Часть 2. Сдвиговый регистр 74HC595
01.12.2016 - yorx:
Доброго времени суток, exersizze попробовал Ваш код все равно не работает как на...
Помни об усадке!
30.11.2016 - pchela5:
Автомобильные никакие не лезут?


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


Prusa i3

Prusa i3 от 12500 р.



Rostoсk

Rostock от 15000 р.