О блоге
Описание ядра и периферии контроллеров AVR. Все, что касается работы с AVR семейством.
Администраторы (1)
Модераторы (0)
Модераторов здесь не замеченоЧитатели (272)
dcoder vvzvlad ploop hexFF foxit _YS_ Vasil Tabke XANDER marvin_yorke Ultrin WildCat hexanaft zb3k Vga Alatar t0x193n mzw Reverb tda2030Все читатели блога
SI7021 и asm
Всем добра!
Долго у меня руки не доходили закончить этот проект. Много видел всяких библиотек, но проект задумывался на asm, был отложен на год или два. И вот руки дошли его закончить.
Работать на asm c этим датчиком никаких сложностей нет. Всё, что не поддерживается набором команд AVR, было отброшено за ненадобностью.
В итоге, что получилось, можно посмотреть в приложенных файлах. Я не делал перевод температуры в BCD, т.к. в моём проекте это не требуется.
Ну и несколько коротеньких функций в качестве бонуса:
Такое я использовал в программах МЕНЮ или если что-то уже получаешь в ASCII
Это функция поиска кнопки, при использовании ADC
Долго у меня руки не доходили закончить этот проект. Много видел всяких библиотек, но проект задумывался на 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
- 0
- 22 июля 2019, 11:58
- ILYAUL
- Оставить комментарий
- 1
SD/MMC и DataFlash-SPI ридер для 5V TTL MCU
Плата для 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
Множество тестовых примеров использующих 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
Мой вариант печатной платы под AtMEGA 16/32/644/1284 (TQFP-44 0.8mm).
Оригинал разводился еще в древнем Eagle 5.6.0.
Было интересно, получится ли провести экспорт в KiCad 5.xx.
И да — все прошло на удивление гладко, герберы успешно сгенерированы, и приняты на производство PCBWAY.
Читать дальше
Оригинал разводился еще в древнем Eagle 5.6.0.
Было интересно, получится ли провести экспорт в KiCad 5.xx.
И да — все прошло на удивление гладко, герберы успешно сгенерированы, и приняты на производство PCBWAY.
Читать дальше
Таймеры и задержки: сборник рецептов
Увидел в статье DI HALT "Простой программный таймер для конечных автоматов" некий кусок кода и решил накатать статью…
Сначала писал длинно, с приколами и разжевыванием, но мне не понравилось и в итоге убрал в черновики. Решил переоформить как краткий сборник рецептов.
Читать дальше
bool MainTimerIsExpired(const uint32_t Timer) // ???
{ // ???
if ((TimeMs - Timer) < (1UL << 31)) return (Timer <= TimeMs); // ???
return false; // ???
} // ???
Сначала писал длинно, с приколами и разжевыванием, но мне не понравилось и в итоге убрал в черновики. Решил переоформить как краткий сборник рецептов.
Читать дальше
attiny817 twi manual
Как работать с TWI новых тинь?
К сожаленю, даташит на процессоры стеснительно умалчивает об этой мелочи. Немного описаны биты в регистрах, состояния интерфейса — и всё. Стартовые решения по этой теме тоже отсутствуют, в аппликешн нотах — гордо перемаркированные старые атмеловские аппноты, совершенно неподходящие к новой аппаратуре.
Наверное, в Микрочипе ждут, пока Горнист за них мануал напишет.
Читать дальше
Машина времени для крошек.
При программировании микроконтроллеров часто требуется отслеживать временные промежутки. Даже банальное «помигать светодиодом» требует учета времени погашенного состояния и времени светимости.
В Си есть функция delay_ms(X), которая выполняет пустой цикл X ms, то есть по сути вешает проц на X*fcpu/1000 тактов, так как ничего иного в это время он делать не может.
Многие прогеры, намучившись с этой функцией (или ей подобными), переходят на использование прерываний и аппаратных таймеров, но тут другая засада — их всегда мало.
Каждый выкручивается как может, например навешивает на один таймер несколько функций, использует биты счетчика как флаги, впрягает в нарты сторожевую собаку… вариаций много, но всегда новый проект означает новые выеживания, поиски решения в ограниченном пространстве.
Пройдя все эти стадии, я наконец-то дорос до понимания, что «что-то тут не так». Нарисовалась необходимость диспетчеризации задач по таймеру.
Прочитав AVR. Учебный Курс. Архитектура Программ Часть 2 в очередной раз убедился, что изобрел велосипед… ну и пусть, это просто еще один вариант решения.
Читать дальше
В Си есть функция delay_ms(X), которая выполняет пустой цикл X ms, то есть по сути вешает проц на X*fcpu/1000 тактов, так как ничего иного в это время он делать не может.
Многие прогеры, намучившись с этой функцией (или ей подобными), переходят на использование прерываний и аппаратных таймеров, но тут другая засада — их всегда мало.
Каждый выкручивается как может, например навешивает на один таймер несколько функций, использует биты счетчика как флаги, впрягает в нарты сторожевую собаку… вариаций много, но всегда новый проект означает новые выеживания, поиски решения в ограниченном пространстве.
Пройдя все эти стадии, я наконец-то дорос до понимания, что «что-то тут не так». Нарисовалась необходимость диспетчеризации задач по таймеру.
Прочитав AVR. Учебный Курс. Архитектура Программ Часть 2 в очередной раз убедился, что изобрел велосипед… ну и пусть, это просто еще один вариант решения.
Читать дальше
Первые впечатления от tiny817

А чего ещё можно было ожидать от людей, сделавших в своё время контроллер с двенадцатибитной шиной? С тех пор стало ясно всем, что они
Читать дальше
Modbus RTU для AVR на Assembler. часть2
Ну так сказать «дембельский аккорд по АВРам» часть2. Если что то начало можно глянуть здесь

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

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