Рейтинг
38.98
голосов: 40
avatar

AVR

О блоге

Описание ядра и периферии контроллеров AVR. Все, что касается работы с AVR семейством.

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (271)

dcoder vvzvlad ploop hexFF foxit _YS_ Vasil Tabke XANDER marvin_yorke Ultrin WildCat hexanaft zb3k Vga Alatar t0x193n mzw Reverb tda2030

Все читатели блога

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

SD/MMC и DataFlash-SPI ридер для 5V TTL MCU

AVR
Плата для SD/MMC карт, совмещенная с NOR/DataFlash(SPI), использованная в AtMega1284p/644p и W5500 Ethernet.
Коротко о схеме:
  • Конвертер уровней TTL/LVTTL выполнен на IC HEF4050BT/CD74HC4050(предпочтительнее это)
  • SPI-Flash IC подходят: M25P08/25LC256-512-1024/25AA02E48(Microchip OUI MAC GEN)
  • CDI — детектор наличия карты. Логический «0» на выходе при вставленной SD/MMC-карте, и наоборот «1» при отсутствии карты (как правило у китайских плат с AliExpress эта линия не разведена).
  • Протестировано и используется совместно с M644_breakout_v1.2d
  • Совместима с любыми 5V-толерантными MCU: AVR MEGA/Arduino, PIC16/18, STM8 и тд…


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

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, думаю тоже соберется при желании).


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

Печатная плата под AtMega 8535/16/32/644/1284

AVR
Мой вариант печатной платы под AtMEGA 16/32/644/1284 (TQFP-44 0.8mm).
Оригинал разводился еще в древнем Eagle 5.6.0.
Было интересно, получится ли провести экспорт в KiCad 5.xx.
И да — все прошло на удивление гладко, герберы успешно сгенерированы, и приняты на производство PCBWAY.


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

Таймеры и задержки: сборник рецептов

AVR
Увидел в статье DI HALT "Простой программный таймер для конечных автоматов" некий кусок кода и решил накатать статью…

bool MainTimerIsExpired(const uint32_t Timer)                      // ???
{                                                                  // ???
   if ((TimeMs - Timer) < (1UL << 31)) return (Timer <= TimeMs);   // ???
   return false;                                                   // ???
}                                                                  // ???

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


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

attiny817 twi manual

AVR

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


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

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

Program Stick

AVR
programstick view
Для чего он нужен? PgmStik это простой и дешевый «одноразовый» программатор для AVR.

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

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

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

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

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

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

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


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

Первые впечатления от tiny817

AVR

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

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

Modbus RTU для AVR на Assembler. часть2

AVR
Ну так сказать «дембельский аккорд по АВРам» часть2. Если что то начало можно глянуть здесь



Читать дальше
  • +2
  • 16 августа 2016, 15:25
  • deses
  • 2