Меню

Attiny2313 2 датчика lcd

AVR Урок 30. Подключаем дисплей 16×2 к МК ATtiny2313

Подключаем дисплей 16×2 к МК ATtiny2313

Сегодня мы попробовать воспользоваться более простым микроконтроллером ATtiny2313 и подключить к нему символьный дисплей LCD, содержащий две строки по 16 символов.

Дисплей мы будем подключать стандартным способом 4-битным способом.

Сначала начнём, конечно, с микроконтроллера, так как с дисплеем мы уже очень хорошо знакомы из предыдущих уроков.

Откроем даташит контроллера ATtiny2313 и посмотрим его распиновку

Мы видим, что данный контроллер существует в двух видах корпусов, но так как мне в руки он попал в корпусе DIP, то будем мы рассматривать именно эту версию корпуса, да и в принципе, они и не различаются особо, кроме чем по виду, так как количество ножек одинаково – по 20.

Так как ножек 20 по сравнению с 28 ножками контроллера ATMega8, к которым мы уже на протяжении всего времени занимаемся и ещё будем заниматься, то, соответственно, и возможностей также будет меньше.

В принципе, всё, что было у ATmega8, здесь есть, единственное то, что поменьше лапок портов. Но так как задача перед нами стоит попробовать соединить его по шине SPI с другим контроллеров, то нас это удручает не сильно.

Есть ещё некоторые отличия, но они незначительны и мы с ними познакомимся по мере необходимости.

Соберём вот такую вот схемку (нажмите на картинку для увеличения изображения)

Дисплей подключен к ножкам порта D. PD1 и PD2 – к управляющим входам, а остальные к ножкам модуля дисплея D4-D7.

Проект создадим с именем TINY2313_LCD, перенесём в него всё кроме главного модуля из проекта урока 12 по подключению дисплея к Atmega8.

Конечно, некоторые вещи надо будет переделать. Для этого нужно внимательно изучить, к какой ножке что подключено. Шина E дисплея подключена к PD2, а шина RS – к PD1, поэтому внесём изменения в файл lcd.h

#define e1 PORTD |=0b00000100 // установка линии E в 1

#define e0 PORTD &=0b11111011 // установка линии E в 0

#define rs1 PORTD |=0b00000010 // установка линии RS в 1 (данные)

#define rs0 PORTD &=0b11111101 // установка линии RS в 0 (команда)

Как мы видим из выделения жирным шрифтом, не такие уж и кардинальные изменения у нас произошли.

Теперь информационные входы. Здесь у нас используются ножки PD3-PD6, то есть на 1 пункт сдвинуты по сравнению с подключением к Atmega8, поэтому исправим ещё и кое что в файле lcd.c в функии sendhalfbyte

PORTD &=0b1000111; //стираем информацию на входах DB4-DB7, остальное не трогаем

Но это ещё не всё. Мы раньше передаваемые данные сдвигали на 4, а теперь нам в связи с вышеуказанными изменениями придётся их сдвигать только на 3. Поэтому в той же функции исправим ещё и самую первую строку

Вот и все изменения. Согласитесь, не так уж они и велики! Это достигнуто тем, что мы всегда стараемся код писать универсальный и пользоваться именно макроподставновки. Если бы мы в своё время не потратили на это время, то нам пришлось бы исправлять код почти во всех функциях нашей библиотеки.

В главном модуле инициализацию порта D мы не трогаем, пусть весь встаёт в состояние выхода, как и в уроке 12.

Давайте попробуем собрать проект и посмотреть сначала результат в протеусе, так как для него я также сделал проект, который будет также находиться в приложенном архиве с проектом для Atmel Studio

У нас всё прекрасно работает! Вот как можно, оказывается быстро переделать проект для одного контроллера под другой.

Читайте также:  Мазда демио где находиться датчик давления масла

Протеус – это очень хорошо, но на настоящие детальки посмотреть всегда приятнее. Схема вся была собрана на макетной плате, так как отладочной платы для данного контроллера я не делал и не собирал. Программатор мы подключим через стандартный разъём вот такой вот

Здесь всё стандартно. Подтягивающий резистор на RESET и т.д.

Теперь, прежде чем прошивать контроллер в avrdude, нам неоходимо выбрать контроллер и считать его флеш-память

Затем зайти во вкладки FUSES и установить правильно фьюзы. Так как у нас нет кварцевого резонатора, то мы устанавливаем фьюзы именно так

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

Теперь, установив всё именно так, нажимаем кнопку «Программирование» и прошиваем фьюзы.

Затем возвращаемся на первую вкладку, выбираем проект и прошиваем его

Смотрим результат нашей работы

Таким образом, не прилагая особых усилий. мы переработали проект, предназначенный для одного контроллера линейки AVR, в проект для совсем другого контроллера, подготовив данный контроллер к следующему занятию по подключению его к контроллеру ATmega8 по шине SPI.

Программатор и дисплей можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Источник

Электронный термометр на Attiny 2313 с LCD дисплеем

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

Началось все с того, что на работе мы постоянно спорили по поводу температуры и влажности в комнате, а от этого зависело включение отопительных приборов, так как аргументировать без измерительного прибора было невозможно, я решил его собрать для лагеря «мерзляков», к которым относился и я. Сидеть зимой при температуре в помещении ниже 19 градусов было совсем не комфортно.

Звезды совпали для создания устройства выходного дня, новогодние праздники на носу, в загашнике лежит новая Attiny 2313 в DIP корпусе, DHT — 22 и 8×2 LCD 1602 дисплей. Взял я breadboard, быстро все соединил и принялся писать прошивку. Кстати для отладки я использовал LCD 16 x 2, так как у него пины расположены в один ряд и его проще соединять на монтажной плате. Я изначально хотел сделать работу от двух сенсоров внутренний — DHT22, внешний DS18B20, но памяти программ катастрофически не хватало, пришлось отказаться от идеи с внешним датчиком. В итоге написана прошивка только для работы с DHT — 22. Микроконтроллер тактируется от внутреннего осциллятора на 8МГц, но кто же запрещает внешний кварцевый резонатор? Фьюз биты по умолчанию, главное выбрать осциллятор и частоту 8МГц. Вот так выглядела отладочная модель:

Но постоянно загружать правки программы в реальное железо мне быстро надоело и я создал компьютерную модель в программе Proteus 8.

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

Печатную плату я пока не проектировал, начал сборку на распаячной плате, так как в этом проекте минимум соединений. Микропрограмма написана на языке Си в Atmel Studio 7. Исходный код и файл симуляции схемы можно найти в моем репозитории на GitHub.
Устройство собрано на скорую руку на макетной плате навесным монтажом.

Читайте также:  Датчик кислорода машина не заводится

Далее все было засунуто в корпус Z-70:

Устройство питается от внешнего блока питания-«кубика» с выходным напряжением 5В, разъем питания — mini USB.

Источник

Attiny2313 2 датчика lcd

Приветствую ! приглянулась мне идея сделать своими руками термометр
http://radiokot.ru/circuit/digital/home/26/ ну тут все разжевано и понятно, собственно вопрос, беда в чем:
— жизненно необходимо около 4х датчиков (4-5 тут уже не принципиально)
— вешать буду в машину и как бы 1 дисплей на 4 датчика не совсем безопасно, хочу сваять именно 4 датчика и каждый на свой дисплей

собственно вопрос я так понял, что реально все это собрать на микросхеме ATtiny2313, датчики вешаются параллельно, но как развести дисплеи под это дело .

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

Сверлит текстолит когтями

Зарегистрирован: Чт ноя 18, 2010 12:59:49
Сообщений: 1268
Откуда: Мурманск
Рейтинг сообщения: 0

Собрать (4-5 полных схем если не принципиально).

_________________

JLCPCB, всего $2 за прототип печатной платы! Цвет — любой!

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/cwc

Друг Кота

Карма: 49
Рейтинг сообщений: 391
Зарегистрирован: Вс июл 12, 2009 19:15:29
Сообщений: 6958
Откуда: Ижевск
Рейтинг сообщения: 0

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

да оно как то не совсем принципиально, но мы не ищем легких путей
просто если возможно посадить все на одну микруху то расточительно ставить 5, в случае поражения окончательный вариант будет выглядеть из 5 термометров, пока хочу побороться !

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

Приглашаем 9 декабря всех желающих посетить вебинар, посвященный технологии Ethernet и её новому стандарту 10BASE-T1S/L. Стандарт 802.3cg описывает передачу данных на скорости до 10 Мбит в секунду по одной витой паре. На вебинаре будут рассмотрены и другие новшества, которые недавно вошли в семейство технологий Ethernet: Synchronous Ethernet (SyncE), Precision Time Protocol (PTP), Time Sensitive Networking (TSN). Не останется в стороне и высокоскоростной 25G+ Ethernet от Microchip.

Источник

Термометр на ATTINY2313+DS18B20 доработанный

Недавно занимался сборкой компьютера с полностью пассивным охлаждением. Чтобы было удобно контролировать температуру процессора, нужно было по быстрому собрать термометр. Всяческие программы типа «Everest», «Aida», и прочие мне не подходили по одной простой причине: хотелось контролировать температуру даже при выключенном мониторе. Или даже при полностью отключенном мониторе. Было решено собрать термометр на основе цифрового датчика DS18B20, дешёвого микроконтроллера AVR, и семисегментного индикатора. Сначала я хотел повторить схему термометра по одному из вариантов, предложенных в интернете. Но после анализа схем, размещённых в интернете, я пришёл к выводу, что придётся изобретать свой «велосипед».

Конструкции, представленные в интернете, имели ряд недостатков, а именно:
* низкая скорость динамической индикации (50. 100 герц), изза которой становится некомфортно смотреть на индикатор, если быстро бросить на него взгляд, кажется что цифры «шевелятся»;
* не все конструкции адекватно измеряли весь диапазон температур (от -55 до +125), попадались например конструкции, не измеряющие температуру ниже нуля градусов, или некорректно измеряющие температуру выше 100 градусов;
* отсутствовала проверка контрольной суммы (CRC);
* общие выводы сегментов подключались к одной ножке микроконтроллера без ключевых транзисторов, ПЕРЕГРУЖАЯ ПОРТЫ МИКРОКОНТРОЛЛЕРА.

При перегрузке портов МК, яркость свечения индикатора может снизиться, а также можно пожечь ножки микроконтроллера. Несколько лет назад я собирал термометр на ATtiny2313+DS18B20 по схеме с интернета. Схема была без ключевых транзисторов. При температуре 18 градусов, цифра «1» светилась ярко, а цифра «8» светилась заметно тусклее, надеюсь всем понятно почему всё происходит именно так. Поэтому я пообещал себе в будущем не перегружать ножки МК. Вот кстати фотка того термометра, собранного по схеме из инета, думаю что в комментариях не нуждается:

Также хотелось сделать несколько доработок:
* вывести на индикатор символ градуса (десятые доли градуса мне были не так критичны);
* затактировать микроконтроллер от внешнего кварца, так как протокол «1-Wire», который использует датчик, критичен к формированию временнЫх интервалов (тайм-слотов), поэтому молиться о стабильности встроенного тактового генератора мне не хотелось;
* ввести в программу проверку контрольной суммы, при несовпадении контрольной суммы выводить на индикатор: «Crc»;
* добавить в схему диод (для защиты схемы от переполюсовки питания);
* при подаче питания в течении 1 секунды засветить все сегменты (так называемый тест сегментов).

Проект я написал в среде AVR Studio 5, функции работы с датчиком нашёл где-то в инете, а остальное переписал на свой лад, обильно снабдив комментраиями исходный код. В конце статьи есть ссылка на скачивание прошивки и исходника.

Семисегментный индикатор я использовал на 3 знакоместа, сегменты с общим анодом. Также в архиве (в конце статьи) есть прошивки под индикатор с общим катодом. Общие выводы сегментов я подключил сразу к двум выводам МК, соединённым параллельно. Таким образом, каждый общий вывод сегментного индикатора использует 2 ножки МК для повышения нагрузочной способности выводов.

Микроконтроллер я использовал ATtiny2313A (также можно использовать ATtiny2313 или ATtiny2313L), задействовал практически все свободные ножки (за исключением ножки сброса). Если собирать термометр на ATmega8, то можно соединять параллельно по 3 или по 4 ножки для повышения нагрузочной способности портов.

Прилагаю фотографии собранного термометра. Корпуса покачто нет, так как термометр будет встраиваться в корпус ПК.

Индикация.
Не подключен датчик температуры, либо короткое замыкание на линии данных:

Ошибка контрольной суммы (CRC):

Подключен датчик температуры, температура от -55 до -10 градусов:

Подключен датчик температуры, температура от -9 до -1 градуса:

Подключен датчик температуры, температура от 0 до 9 градусов:

Подключен датчик температуры, температура от 10 до 99 градусов:

Подключен датчик температуры, температура от 100 до 125 градусов:

Частота динамической индикации — несколько килогерц, благодаря чему мерцание на глаз не заметно даже при броском взгляде на индикатор.
Для желающих повторить конструкцию я скомпилировал несколько прошивок под разные кварцы: 4 МГц, 8 МГц, 10 МГц, 12 МГц, 16 МГц.
Также сделал прошивки под индикаторы с общим анодом (ОА), и с общим катодом (ОК). Все прошивки в архиве (см. ниже).

г.Вельск, Апрель 2014г.
P.S. Первоначально материал разместил тут.

UPD. Обновил прошивку. Мелкие исправления, мелкие плюшечки. Из основного — stdint типы данных, гибкая настройка ног под сегменты. Все изменения описаны в шапке исходника.
В связи с большим наплывом желающих выкинуть кварц из схемы, и не читающих зачем он в схеме нужен, отключил комментарии.

Источник

Adblock
detector