Минитерминал 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
Просмотров: 11713 | Комментарии: 23 | Теги: uart, схемы | Рейтинг: 5.0/7
Всего комментариев: 23
23 vakulyuk   (Вчера 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"

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 сообщения.

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)
Неплохо было бы прицепить клавиатуру от ПК.

2 exersizze   (15.01.2014 12:52)
Привычка наверно, да и логичней делать так. А Getadc(14) меряет опорку? надо будет попробовать.

Спам+2  
1 mvn77   (15.01.2014 09:45)
Часто замечал что напряжение меряют заводя на ножку АЦП, напряжение батареи, в вашем случае используя W = Getadc(0), а почему не используете Getadc(14)? Вроде удобней и ничего паять не надо, на своих схемам проверял, вроде работает....