Рейтинг
37.52
голосов: 39
avatar

AVR

О блоге

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

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

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

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

Читатели (269)

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

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

Кольцевой буфер

AVR
Пусть здесь полежит, а то вдруг с моим репозиторием что случится… А тут, глядишь, кому и сгодится.
Код для обслуживания кольцевых буферов, маленький и шустрый.
Собственно так: в секции данных надо поместить массивчик, где будет храниться сам буфер, произвольного размера, до 255 байт. Глубина буфера задаётся константой RBSIZE, и массив получается на три байта больше размером. В первом байте лежит глубина заполнения, то есть сколько данных сейчас в буфере. При укладке байта — увеличивается, при выгрузке — уменьшается; если ноль — буфер пуст. Второй и третий байты — служебные, указатели загрузки и выгрузки. Для инита буфера надо эти три байта обнулить.
А дальше всё стандартно — процедурой PutToBuf укладываем в буфер содержимое r16, процедурой GetFromBuf — достаём. Если буфер переполнен — очередной байт туда не ляжет, если пуст — содержимое r16 не изменится.
Портит xl,xh,r17, загрузка/выгрузка занимает по 29 тактов. Локальных меток не имеет, так что можно легко тиражировать в любом количестве экземпляров внутри программы.


; В секции данных:
;.equ RBSIZE=11
; ringbuf:	.byte RBSIZE+3
; Конструкция кольцевого буфера: 
;+0 - глубина заполнения
;+1 - указатель укладки
;+2 - указатель выгрузки
;+3... - данные
; Использованные регистры: xh,xl,r16,r17
; укладка в буфер. 29 тактов
PutToBuf:	ldi	xh,high(ringbuf+3) ;загрузка базы буфера
		ldi	xl,low (ringbuf+3)
		lds	r17,ringbuf+0	;load rbdept
		cpi	r17,RBSIZE        ; проверка на переполнение
		brcc	pc+16
		inc	r17
		sts	ringbuf+0,r17    ;store rbdept
		lds	r17,ringbuf+1 	;load rbputptr
		add	xl,r17            ; складываем указатель с базой
		brcc	pc+2
		inc	xh
		st	x,r16            ; помещаем байт в буфер
		inc	r17               ; приращение указателя укладки
		cpi	r17,RBSIZE        ; закольцовка, если достигнута граница
		brcs	PC+2
		clr	r17
		sts	ringbuf+1,r17	;store rbputptr
		ret

; выгрузка из буфера. 29 тактов
GetFromBuf:	ldi	xh,high(ringbuf+3)
		ldi	xl,low (ringbuf+3)
		lds	r17,ringbuf+0	;load rbdept
		tst	r17            ; проверка наличия данных
		breq	pc+16
		dec	r17
		sts	ringbuf+0,r17	;store rbdept
		lds	r17,ringbuf+2	;rbgetptr
		add	xl,r17
		brcc	pc+2
		inc	xh
		inc	r17
		cpi	r17,RBSIZE
		brcs	PC+2
		clr	r17
		sts	ringbuf+2,r17	;rbgetptr
		ld	r16,x
		ret

Простая макетная плата ATmega16 ATmega32 DIP

AVR
Развёл простенькую макетку. Тупо все ноги МК вывел на пятачки, кондёры по питанию повесил, кварц, и разъём для программирования. Остальное цепляется к пятакам по вкусу. Так как у меня в разных проектах всё по разному, вешать кнопки/светодиоды на жёстко заданные выводы нет смысла.


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

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

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


Читать дальше
  • +8
  • 15 сентября 2014, 20:45
  • Zlodey
  • 4

Расширения Atmel Studio 6

AVR

Сегодня речь пойдет о некоторых расширениях (extensions) бесплатной IDE от Atmel. Как можно понять из названия, extension — это плагин, расширяющий возможности редактирования или отладки кода. Устанавливать их можно как из самой Atmel Studio (далее по тексту — AS), так и вручную скачивая файлы расширений со своеобразного «app-store» — Atmel Gallery. И в том, и другом случае потребуется регистрация на сайте.
Подкатом инструкция в картинках.

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

Обзор программатора AVRISP-MKII

AVR
Попался ко мне в руки вот такой клон программатор AVRISP-MKII вот отсюда.



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

AVRASM: Пример использования "Диспетчера задач RTOS 2.0" (установка и настройка)

AVR
Для демонстрации основных возможностей и особенностей «Диспетчера задач RTOS 2.0» был собран демонстрационный макет, на основе «Универсальной макетной платы для МК в DIP-корпусе». В качестве прикладной задачи: мигаем светодиодами, в разных режимах…


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

AVRASM: Диспетчер задач RTOS 2.0 (псевдо кооперативная ОС)

AVR
Отрефакторил код «Диспетчера задач RTOS» (псевдо кооперативной ОС), оптимизировал и универсализировал, добавил новые фичи, декларировал чёткое API, и опубликовал на GitHub… Фактически, весь код был переписан сызнова, по прототипу DI HALTа.

Operating system placement


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

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

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

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

AVRASM: Библиотека Подпрограмм общего назначения "GENPROCLIB.INC"

AVR
Библиотека «Подпрограмм общего назначения» содержит самые необходимые процедуры, нужные практически в каждом проекте: для Записи/Чтения памяти EEPROM; для Временной Задержки; и др.


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

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

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

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