Простейшая асмолиба для работы со светодиодной матрицей P10

Понадобилось сделать большие автономные часы (ага, давно часов не делал). Купил данную матицу. Скажу сразу, не подошла, ибо потребление просто конское, 2.5А при 5В. Но простенькая либа для вывода циферок (500 байт, из них 160 на знакогенератор) на 8051 асме была за вечер все же написана.


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

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

Сложить и приумножить

Дискламер: Тут будет описано несколько боянистых боянов. Поэтому, если вы решите что боян, можно не читать, скажете что я разрешил. А на случай если кто-то не знает, пусть это лежит здесь.

В противополжность персонажам известного анекдота, сегодня мы не станем отнимать и делить. Напротив, мы будем умножать и складывать, чтобы получить в результате всем известное уравнение прямой y=kx+b.

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

Dowlib update

DOWLIB обновлён.
Bugfix: устранено бесконечное ожидание в Ex_DowRst при коротком замыкании шины. Теперь возвращает CY (нет отклика устройства на сброс)
Bugfix: вызов Ex_DowSkipRom ошибочно возвращал CY. поправлено.
Новая версия в аттаче.

Easy_I2C AVR ASM практикум PCF8591 & DS1307

AVR
PCF8591 это микросхема в которой 4 АЦП и 1 ЦАП на скорости до 100кГц по i2c
Вот я добрался до неё. Она, как мне казалось, не самая простая микросхема однако сложного в ней по сути ничего нет.

Читать дальше
  • +1
  • 02 февраля 2014, 22:14
  • deses
  • 1

Easy_I2C AVR ASM практикум PCF8574 и немного мыслей о жк дисплеях + I2C-GPIO

AVR
Отредактировано 23.12.2013
PCF8574 это 8-битный расширитель ввода – вывода. Другими словами у нас появляется еще 8 ног

Читать дальше
  • +1
  • 19 декабря 2013, 12:57
  • deses
  • 1

Обработка mRTOS напильником

AVR
Вместо вступления.
Это мой первый топик (не здесь а вообще, в этих ваших интернетах). Прощу сильно не пинать. Далее немного нытья.
Здравствуйте, меня зовут Евгений и я алко начинающий микроконтроллерщик. В моей чисто любительской практике с микроконтроллерами еще пару лет назад (тогда я трогал только AVR) не было какой то особой активности. Надо написать какую то простую программку — написал суперлуп и готово. Надо поморгать светодиодиками — запилил стандартный delay(). Положение усугублялось тем что я, как начинающий микроконтроллерщик, не мог не наткнуться на CodeVision AVR и не залипнуть на нем. Ведь там все что хочешь и сразу. Деление программы на отдельные файлы не практиковал — валил все переменные, функции и объявления в одну кучу говкода. Так продолжалось до тех пор пока мне не пришлось писать программу с изобилием задержек и таймаутов. Далее все о чем предупреждал товарищ DI HALT в статьях об архитектуре программ, прочитанных позже. Программные уродцы, полная невозможность модернизации и поддержки, тормоза, зависания, паранойя, депрессия, плохой стулсон. Далее я взял за правило всегда писать по правилам даже простые программы.

Читать дальше
  • +5
  • 16 ноября 2013, 01:33
  • XOR
  • 1

uRTOS в режиме кооперативной ОС

uRTOS

В предыдущей статье была рассмотрена работа ОС uRTOS в вытесняющем режиме. С тех пор кое-что в системе изменилось, исходник был тщательно перелопачен, перекомпонован, дополнен комментариями. Также в ОС была добавлена возможность работы в кооперативном режиме. Остановимся на этом чуток подробнее.

Читать дальше
  • +12
  • 13 апреля 2013, 01:03
  • uRTOS
  • 1

Реализация кольцевого буфера на ассемблере AVR

AVR
Для очередного эксперимента понадобился мне такой вот буфер. Что это такое, можно почитать в Википедии, а также здесь, поэтому углубляться не буду.
Оговорки:
  1. я не профессиональный программист и наверное им не стану, поэтому возможно, что нижеприведенное потребует оптимизации/переработки;
  2. на Сях и прочих высокоуровневых языках не пишу — не умею;
  3. долго искать готовое решение на ассемблере не стал, а изобретать колесо вроде как и не запрещено (хоть иногда и глупо), зато интересно.
Ниже будет краткое описание того, что я наделал.

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