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

AVR

О блоге

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

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

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

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

Читатели (267)

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

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

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

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



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

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

AVR
Понадобилось мне недавно разобраться с Модбасом. А точнее освоить подключение панели оператора к Меге.
Приглашаю всех желающих посмотреть мою реализацию такого решения


Читать дальше
  • +3
  • 02 августа 2016, 22:27
  • deses

Microchip купила Atmel.

AVR
Вроде как плохо, но с другой стороны обещают продолжать выпуск контроллеров, к тому же с LifeTime у Микрочипа всё хорошо.
Документ
Письмо

Мультимастер на USI

AVR
Это логическое продолжение предыдущей статьи «USI в двухпроводном режиме».
В этой статье пойдет рассказ о построении системы связи нескольких микроконтроллеров в составе одного устройства, на основе аппаратного модуля USI. Описаны «грабли» и «подводные камни» USI, а так же пути их обхода, на основе реального кода.
Все это реализовано и отлажено на двух микроконтроллерах ATtiny44A, один из которых работал на 8МГц, а другой на 1МГц. Размер кода 408 байт (204 слова).

Читать дальше
  • +2
  • 21 марта 2016, 12:30
  • iva

Новость

AVR
Насколько я понял Микрочип купил Атмел.
Но производство АВР будет продолжено.
www.microchip.com/pagehandler/en-us/aboutus/acquisitions/atmel-acquisition.html

USI в двухпроводном режиме

AVR
Потребовалось мне сделать связь между микроконтроллерам, причем такую, что бы каждый мог начинать передачу по своему желанию и не мешать при этом высказываться другим, иначе это называется «режим мультимастер». Очень нужно НЕ использовать прерывания (они нужны для других функций).

Присмотревшись к коммуникационным возможностям, аппаратно реализованных в AVR, перепробовав их на зуб, остановился на USI. Вроде бы странный выбор, повсеместно его стараются обойти, ссылаясь на странности поведения, на сложности использования и прочие страшилки…
Согласен, есть такое дело, сам «нашишковал» достаточно, пока догадался разобраться со странностями непосредственно «в железе», благо цифровой осциллограф есть в наличии.

Как выяснилось, причиной «чуднОго поведения USI» является недостаточно полное описание его в документации. Нет, явных ошибок я там не нашел, просто читаю одно, понимаю другое, пишу код… и получаю: «ничего не работает» и «фигня полная».



Читать дальше
  • +5
  • 18 января 2016, 20:09
  • iva

Ещё про чарлиплексинг

AVR
По мотивам этого поста решил сделать новогоднюю моргалку для елки. В итоге написал маленькую библиотеку для работы с 12 светодиодами, может кому пригодится.

Схема:
Изображение - savepic.su — сервис хранения изображений


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

чарлиплексинг: 12 светодиодов на 4 ножки без регистрации и СМС

AVR
перепало мне задание сделать из подножного корма простенькое устройство, дающее на выходе определенную частоту, её выбирает пользователь (одну из десяти заранее заложенных) и соответственно как-то нужно показать какая частота сейчас выдаётся. Была найдена жменя светодиодов, кварц и мега48, ну и дабв не скучно было городить было принято решения придумать проблем на свою ж какое-то забавное техническое решение.
Для подключения 12 светодиодов нужно:
а) 12 ножек контроллера и 12 резисторов
б) соединить в группы по 4 лампочки катодами или анодами(в зависимости от религиозных убеждений)и потратить 7 ножек и 4 резистора
в) приколоться и соединить их как на рисунке ниже, потратив 4 ножки контроллера и 4 резистора номиналом в два раза меньше обычного(я брал по 500 ом, но должно работать и с меньшими)



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

Новая Atmel Studio 7 импортирует код из Arduino IDE в один клик

AVR
Бывшая AVR Studio теперь позволяет разработчикам Arduino быстро преобразовывать свои скетчи созданные в среде Arduino в полноценные C++ проекты, например для отладки в симуляторе или в железе (вот только JTAG отладчик обойдется минимум в сто баксов).

Поддерживаются платформы AVR и ARM, а также ардуино платы. Причем все — даже те которые вы сами сделали и добавили в Arduino IDE (но только AVR-based).

Новая студия сделана на основе Visual Studio Isolated Shell 2015, поэтому она не устанавливается в Windows XP.
После установки студия занимает на диске 888Mb, причем из них 365Mb занимают примеры кода которые можно не устанавливать (Atmel Software Framework — библиотека свободного исходного кода с 1600 примерами проектов)
Также некоторое место займет .net framework 4.6, если он еще не был установлен.

Может быть со временем на Atmel Studio перейдет большая часть продвинутых ардуинщиков?
Дебажить логику в симуляторе седьмой студии — одно удовольствие.
Ардуинщиками теперь можно быстро увидеть в какие ассемблерные инструкции превращается код и что можно оптимизировать.

Стоит заметить что функция импорта проектов Arduino IDE только односторонняя и пока что сырая, скетч состоящий из нескольких файлов импортировать пока что не умеет.
Интеграция работает начиная с 1.6.5 версии Arduino IDE. Если у вас поля выбора платы и девайса пустые — значит нужно обновить версию Arduino IDE.
Как вариант обхода этого ограничения — можно написать консольную программу, чтоб она все ino файлы склеивала в один большой ino файл, предназначенный специально для импорта в студию. Заодно эту программу можно доработать, чтобы оно потом автоматически подтягивало изменения из С++ проекта назад в ардуиновский проект. Думаю написать такую утилиту.

Ссылка для скачивания: Atmel Studio 7

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

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