Электронный термометр на 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МГц. Вот так выглядела отладочная модель:




Читать дальше

SI7021 и asm

AVR
Всем добра!
Долго у меня руки не доходили закончить этот проект. Много видел всяких библиотек, но проект задумывался на asm, был отложен на год или два. И вот руки дошли его закончить.
Работать на asm c этим датчиком никаких сложностей нет. Всё, что не поддерживается набором команд AVR, было отброшено за ненадобностью.
В итоге, что получилось, можно посмотреть в приложенных файлах. Я не делал перевод температуры в BCD, т.к. в моём проекте это не требуется.
Ну и несколько коротеньких функций в качестве бонуса:

Такое я использовал в программах МЕНЮ или если что-то уже получаешь в ASCII

                Ld       temp,Y		;* Берем  цифру в BCD 
                subi	temp,(-0x67)    ;* Переводим в HEX, сразу добавляем (1)
                brhc    ADD_6	  	;* Проверяем младшую тетраду на ноль
Sub_66:
                subi     temp,0x66      ;* И обратно в BCD
ADD_6:
                subi	temp,-6         ;- Если в младшей тетраде (0) добавл. (6)
                rjmp    Sub_66

Это функция поиска кнопки, при использовании ADC

KNOB:
		cbi	Flags,fl_Key_CODE  ;= Сбрасываем флаг кода, что-то там ADC насчитало
		ldi	temp1,0x20	   ;= Загружаем регистр для сдвига (1) (0010 0000)
		ldwi	Z,TAB_KEY*2	   ;= и он же счетчик обработанных  кнопок
NEW_KEY_VALUE:
		lpm	temp,Z+	           ;= извлекаем максимально возможный код кнопки из таблицы.
                ldi	count,3		   ;= На это число, в итоге, уменьшим код , чтобы определить кнопку т.к. значение может отличаться         
                (+/-) 1 от табличного.
CheckTabADC:		
		cp	CODE_KEY,temp	   ;= Сравниваем полученное с данными в таблице
		breq	EXIT_KNOB	   ;+ Равны - уходим 
		dec	temp		   ;= Вычитаем из полученного кода (1) 
		dec	count		   ;= Соответственно и уменьшаем счётчик возможностей
		brne	CheckTabADC	   ;= И снова проверяем. ;= Достанем следующий код кнопки , для проверки с полученным, при этом передвинув
		lsr	temp1		   ;= флажок , указывающий какой код кнопки мы будем обрабатывать ;= В итоге temp1 всегда ==0x01, что соответствует коду 0xFF - не нажата.
;| 0x02 - SW5, 0x04 - SW4,0x08 - SW3, 0x10 - SW2, 0x20 - SW1
		brne	NEW_KEY_VALUE
;		nop	;= а сюда все равно не попадём никогда , так что похрен;= что тут можно понаписать
EXIT_KNOB:
		mov	Flags_KEY,temp1	    ;= Переносим в регистр флагов
		ret

AtMega1284p/644p и W5500 Ethernet

AVR

Множество тестовых примеров использующих ATMEGA 1284p/644p и Ethernet контроллер W5500.

Собственно выкладываю ссылку на «распатроненный» мной Ethernet-стек для дешевого Ethernet контроллера на Wiznet 5500 SPI: m1284p_wiz5500
Основано на примерах для W5500 EVB (LCP13xx + W5500). Не Arduino С-код, довольно серьезно модифицировано(по причинам различий в архитектуре процессоров ARM и AtMega, a также немалого количества багов в коде приложений для W5500 EVB). Собиралось при помощи Eclipse Kepler с плагином AVR-Eclipse и тулчейном avr-gcc 4.9.2 (посредством самописного Makefile, думаю тоже соберется при желании).


Читать дальше

attiny817 twi manual

AVR

Как работать с TWI новых тинь?


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

Читать дальше

Машина времени для крошек.

AVR
При программировании микроконтроллеров часто требуется отслеживать временные промежутки. Даже банальное «помигать светодиодом» требует учета времени погашенного состояния и времени светимости.

В Си есть функция delay_ms(X), которая выполняет пустой цикл X ms, то есть по сути вешает проц на X*fcpu/1000 тактов, так как ничего иного в это время он делать не может.

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

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

Пройдя все эти стадии, я наконец-то дорос до понимания, что «что-то тут не так». Нарисовалась необходимость диспетчеризации задач по таймеру.
Прочитав AVR. Учебный Курс. Архитектура Программ Часть 2 в очередной раз убедился, что изобрел велосипед… ну и пусть, это просто еще один вариант решения.


Читать дальше
  • +2
  • 24 января 2018, 13:02
  • iva
  • 1

Среднечастотный частотомер на AVR. Часть 3, + милливольтметр.

  Это продолжение предыдущих частей "Часть1, динамическая индикация" и "Часть2, статическая индикация".
  В первой части я посетовал, что в ATmega8A при занятой памяти менее 10% почти не осталось свободных ножек. Во второй части я эту проблему решил с помощью внешнего контроллера дисплея. Осталось придумать, куда использовать освободившиеся ножки и неиспользованную память.
  Для измерительного генератора эти ресурсы могут быть применены при осовременивании схемы. Например замены переменного резистора настройки на инкрементальный энкодер, замены механических переключателей на управление реле или бесконтактными ключами и т.д. Это все индивидуально для каждой схемы. Но как правило измерительный генератор имеет регулируемый по напряжению выход. Контролировать уровень напряжения на нем также желательно. А у нас как раз остались незадействованными 6 каналов ADC (для PDIP, в корпусе TQFP их 8). Поэтому введем в программу второй канал измерения, измерять будем напряжение на входе ADC.


Читать дальше

Среднечастотный частотомер на AVR. Часть 2, статическая индикация.

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


Читать дальше

Операция "пучеглазка". (RGB LED Matrix Panels Test)

Доброго времени суток.


В данной заметке речь пойдёт о светодиодных панелях, используемых в рекламных вывесках и архитектурных ТВ экранах.
Вот примерно таких:


Самые распространённые варианты 16*32 пикселя 16*64, 32*32, 32*64. Есть ещё куча промежуточных вариантов. Также они отличаются размером диодов яркостью и исполнением корпуса.

Панели 256mm*128mm 64*32pixels с пикселем 4мм на диодах SMD2121 и ярокстью 1200CD/M2 стоят от 700р за панель и примерно 300р доставка до третьих стран(2018г).


Читать дальше

Среднечастотный частотомер на AVR. Часть 1, динамическая индикация.

  Давно хотелось иметь функциональный генератор с приличными характеристиками и не фантастической сложностью. Поэтому на Ali был прикуплен чип XR-2206, поиском по инету найдена схема генератора — XR-2206 5Hz to 300kHz Function Generator. Конструкция достаточно хорошо проработана и описана.
  Собственно к схеме генератора претензий нет, некоторые вещи я бы сделал по другому, но это потом в процессе изготовления. Мне сразу не понравилась цифровая шкала генератора (там же, страница 2). Его программа представляет сборку из скетчей Arduino, я их не понимаю и не горю желанием изучать. Да и применение ATmega328 мне показалось неоправданно жирным. Короче решил спроектировать свою цифровую шкалу на ATmega8A. Результат представляю вашему вниманию, код написан на ассемблере AVR в среде AVR Studio 4.19.


Читать дальше