Программирование мк avr в ос ubuntu

Программирование AVR в Linux. 2) Установка ПО, схема, первая программа(мигаем светодиодом)

Posted by Maxim Admin on 17 июня 2016 г. 13:16

ГОТОВО: Ваш голос учтен!

Итак, вторая часть руководства по программированию микроконтролеров AVR в Linux.

Установка ПО

Нам портебуется, как минимум, две программы – компилятор и программатор. В качестве компилятора будем использовать gcc-avr, а в качестве программатора avrdude

Чтобы установить эти програмы в ubuntu нужно выполнить:

sudo apt-get install avrdude gcc-avr Собственно, все. Идем дальше…

Схема

Схема довольно проста

У микроконторллеров AVR есть порты ввода/вывода огбозначаются они как PA, PB, PC и т.д. Порты эти восьмиразрядные, обозначение выводов порта состоит из названия порта и номера начинающегося с ноля, например PA0, PA1, …. PA7. На схеме мы подключили к первому выводу порта PB светодиод через токоограничивающий резистор.

Программа

Итак, открываем любой текстовый редактор и начинаем писать программу.

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

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

Для нашей конструкции достаточно нестабилизированого(без кварцевого резонатора) внутренего генератора, микроконтроллер уже с завода сконфигурирован для работы от внутреннего нестабилизированого генератора на частоте 1МГц.

Чтобы сообщить функции задержки о частоте МК мы в начале файла задаем константу F_CPU

Далее подключаем библиотеку для работы с портами ввода/вывода микроконтроллеров AVR и библиотеку функции задержки

1 2 #include #include

И далее начинается собственно главная функция программы, внутри тела этой функции будут нахоиться все выполняемые дейтвия Помните про то что у МК есть порты ввода/вывода? Так вот.

за каждый порт отвечает несколько восьмиразрядных регистров внутри микрокотроллера, разряды которого соответствуют номеру порта ввода/вывода. Запись в регистр производится параллельно, а значит нельзя поменять значение только на одном выводе, значения на всех выводах меняются одновременно.
Итак.

Сконфигурируем первый вывод порта PB как выход Тут все просто, мы записываем в конфигурационный регистр DDRB байт 00000001 это означает что все выводы кроме PB0 сконфигурированы как входы а PB0 как выход
Далее мы запускаем бесконечный цикл(мы же хотим чтобы светодиод мигал всегда) В котором сначала включаем светодиод записывая в регистр двоичное значение 00000001 (если нужно зажечь сведодиод на вывода PB3, например, то нужно записать значение 00001000, если одновременно на PB0 и PB3 то 00001001) Затем ждем одну секунду Далее записываем ноль И опять ждем секунду Дальше цикл повторяется
Вот собственно вся программа

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #define F_CPU 1000000L // Set CPU frequency for delay function #include #include void main() { // Set 8bit register DDRB, // for configure pin PB0 as output // Port numbers PB[X] // X = 76543210 DDRB = 0b00000001; while (1) { // PORTB – is 8 bit register // which defines the status of the outputs PORTB = 0b00000001; // Set pin PB0 to high level and other pins to low _delay_ms(1000); // Wait 1000 ms PORTB = 0b00000000; // Set pin PB0 to low level and other pins to low _delay_ms(1000); // Wait 1000 ms } }

Теперь сохраняем нашу программу в файл с расширением *.c, например attiny2313.c после чего можно приступить к компиляции Наверное у вас сразу возникает вопрос что делать если на другие выводы порта используются и менять их х состояние нельзя, т.е. как изменить состояние вывода не трогая другие выводы? Ответ: Никак, но…

Но можно переписать состояния выводов старыми значениями. Например

1 2 3 4 PORTB |= (1

Источник: https://www.trambroid.com/blog/programmirovanie-avr-v-linux-2-ustanovka-po-shema-pervaya-programmamigaem-svetodiodom/

Программирование МК AVR на языке assembler в среде Linux

Ни для кого не секрет, что микроконтроллеры семейства AVR прочно вошли в практику домашних поделок.

Кроме того, уже несколько лет наблюдается массовое (на грани эпидемии) увлечение отладочными платами типа Arduino, построенными на базе все тех же AVR.

Не буду судить, хорошо это или плохо, ибо статей на эту тему на ресурсе более чем достаточно. Хочу уберечь и моего читателя от споров на тему «что такое Arduino и хорошо это или плохо». Статья не об этом.

Рано или поздно для любого «ардуиньщика» (при условии что он хочет выйти на более высокий профессиональный уровень) наступает момент когда в рамках платформы Arduino ему становится тесно и он начинает задумываться о том а что же в действительности происходит под капотом.

И ответы на все его вопросы уже есть, например в виде замечательного курса «AVR. Учебный курс» от глубокоуважаемого DIHALT.

Если вы пользователь OS Windows, то и недостатка в инструментах разработки у вас не будет, достаточно бесплатной Atmel Studio, закрывающей все вопросы разработки ПО для МК AVR.

Хоть я и тимлид в коллективе разработчиков ПО прикладного уровня, вопросы «железа» которое в нашей конторе делается на базе AVR с недавних пор стали интересовать меня очень остро. Возникло желание хорошо разобраться во всех аспектах разработки ПО для МК.

И так как я являюсь убежденным приверженцем использования в разработке OS на базе ядра Linux, меня заинтересовал вопрос, а как там в линуксах: можно/нельзя ли писать и отлаживать ПО, зашивать его в кристалл с тем же (или примерно тем же) уровнем удобства, который нам доступен в Windows.

Тех кого тоже интересует этот вопрос, и в особенности тех, кому тема поста кажется надуманной, приглашаю под кат.

Что касается разработки на C/C++, в среде линукс с этим особых проблем и нет, в виду общей ориентированности этой системы на использование данного языка и наличия достойного набора инструментария.

Однако, тот же DIHALT, например, утверждает что программирование для МК неотделимо от знания ассемблера, в чем я с ним соглашусь, в виду логичности его тезисов, изложенных в «Учебном курсе» и собственного (пусть небольшого) опыта системной разработки под x86.

Руководствуясь тезисом, что от асма AVR нам никуда не уйти и сидим мы под линуксом, попробуем посмотреть на то, как можно писать и отлаживать программы. Я использую дистрибутив Arch Linux, поэтому в своем повествовании буду опираться на его экосистему.

1. Выбираем компилятор

Сразу скажу, что связку Atmel Studio + wine я предлагать не буду. Не люблю я wine (хоть и пользуюсь по необходимости).

Остановимся на нативных средствах, прежде всего компиляторов, обзор которых в сети и личные ковырялки дали выход на триумвират gavrasm, avra и avr-as.

Выбор произошел по двум противоречивым критериям: поддержка синтаксиса предлагаемого Atmel и возможность отладки прошивки по шагам в эмуляторе. Последнее для меня более важно, а в плоскости курса @DIHAL так прям вообще необходимо для понимания процесса работы микроконтроллера.

Общность синтаксиса с компиляторами от Atmel дает, опять таки с моей точки зрения, лишь возможность без труда адаптировать проекты Atmel Studio к работе в линуксах, что весьма сомнительное преимущество, ибо тот же avr-as существует и под Windows. Предлагаю читателю обзор перечисленной троицы.

gavrasm и avra

Поддерживают синтаксис Atmel. Первый нашелся в AUR и устанавливается командой

$ yaourt -S gavrasm

Второй так же доступен в AUR

$ yaourt -S avra

Программа вида

test.S

;—- Определяем целевое устройство .device atmega16
;—- Сегмент данных .dseg
;—- Сегмент кода .cseg .org 0x0000 ldi r16, 10
M1: inc r16 rjmp M1 ;—- Сегмент EEPROM .eseg

собирается обоими компиляторами сразу в *.hex и результат работы выглядит примерно одинаково. Чтобы не возмущать благородных донов длинными портянками, помещаю результаты компиляции под спойлеры

Выхлоп gavrasm$ gavrasm test.S
+————————————————————+
| gavrasm gerd's AVR assembler Version 3.5 (C)2015 by DG4FAC |
+————————————————————+
Compiling Source file: test.S
——-
Pass: 1
14 lines done. Pass 1 ok.
——-
Pass: 2
14 lines done. 3 words code, 0 words constants, total=3 = 0.0% No warnings!
Compilation completed, no errors. Bye, bye … $ ls -l
итого 12
-rw-rw—-+ 1 maisvendoo users 52 июл 29 15:46 test.hex
-rw-rw—-+ 1 maisvendoo users 741 июл 29 15:46 test.lst
-rw-rw—-+ 1 maisvendoo users 92 июл 29 15:46 test.S

Читайте также:  Новый контроллер для заряда батарей напряжением до 80 в от linear

Содержимое hex-файла прошивки
:020000020000FC :060000000AE00395FECFAB :00000001FF

Источник: http://www.pvsm.ru/linux/261372

Среда разработки KontrollerLab (для Linux) ATmega128

Следующее руководство описывает установку и использование среды разработки AVR для Ubuntu 9.10 операционной системы на примере ATMega128 платформы.

Установить следующее программное обеспечение:

1. Пакеты программного обеспечения для Linux

  • gcc-avr – GNU компилятор на языке Си для платформы AVR
  • avrdude – программа для загрузки hex файла в микроконтроллер
  • avr-libc – библиотека языка Си для написания кода для платформы AVR

Для инсталляции используйте строку приказа терминала:

sudo apt-get install gcc-avr avrdude avr-libc

или графическое программное обеспечение (к примеру, программное обеспечение Ubuntu или Synaptic).

2. Библиотека Домашней Лаборатории

Библиотека упрощает написание программного кода, т.к. функции низкого уровня уже написаны в ней. Для инсталляции библиотеки необходимо сохранить на компьютер файл с именем Homelab library vX.X.run с веб-сайта Домашней Лаборатории, где заместо X.X номер версии, и запустить её следующим приказом:

sudo sh homelab_library_vX.X.run

Убедитесь, что загрузка и установка библиотеки Домашней Лаборатории удалась.

3. KontrollerLab

KontrollerLab – это IDE (inglise keeles integrated development environment) или интегрированная среда разработки для написания программного обеспечения, компиляции, загрузки и т.п. Сохраните пакет программного обеспечения KontrollerLab в папку (к примеру ~/Dokumendid/AVR/KontrollerLab/) и в окне терминала запустите приказ в этой папке:

sudo dpkg -i kontrollerlab*.deb

Если у вас возникла проблема из-за отсутствия пакетов, то запустите следующий приказ, который установит недостающие пакеты:

sudo apt-get install –f

Подключите программатор к компьютеру и убедитесь, что компьютер распознает его. Написать в окне терминала команду lsusb, которая показывает список подключенных устройств USB. Имя программатора – «Future Technology Devices International, Ltd FT 232 USB-Serial (UART) IC».

Чтобы найти порт, к которому подключен программатор, проверьте /dev каталог с помощью команды cd /dev (определяет /dev как активный каталог) и dir (отображает содержимое каталога). Поскольку дело обстоит с последовательным интерфейсом USB, то обозначен как ttyUSBx, где x означает номер интерфейса. Если ранее не было подключено никаких других устройств серии USB, то его номер будет 0.

~~PB~~

Для написания AVR программы, необходимо создать новый проект, который обычно включает в себя много различных файлов: программный код (ы), файлы заголовков и компилированные программы т.д. Для того чтобы проекты корректно различались, необходимо для каждого проекта создавать новый каталог.

Для создания проекта необходимо пройти следующие этапы:

1. Открыть KontrollerLab (Rakendused → Programmeerimine → KontrollerLab) и выбрать из верхнего меню File → New → New project. Открывается окно, где нужно указать месторасположение и в графу Location вписать имя файла проекта. В приведенном примере создан отдельный каталог ../Homelab/blinkingLED/, где содержаться отдельно все файлы программы примера (мигающий LED).

2. Поскольку проект изначально пуст, то к нему необходимо добавить C-файл, куда можно было бы написать код. Выбрать меню File → New → New. Открывается окно добавления файла, где необходимо выбрать C source и назначить имя файла.

3. Настроить проект KontrollerLabi в соответствии с аппаратным обеспечением Домашней Лаборатории. Выбрать меню Project → Configure Project, из-за чего окно настройки проекта Common отображается открытым.

Назначить процессором (CPU) ATmega128, тактовой частотой – (clock) 14745600,0 Hz и задать названия создаваемых HEX и MAP файлов. При нажатии кнопки Set as default, эти конфигурации устанавливаются используемыми по умолчанию для всех новых проектов.

В связи с тем, что аппаратное обеспечение остаётся тем же самым вне зависимости от проекта, имеет смысл сделать введённые параметры параметрами по умолчанию.

Так как названия выходных файлов (HEX, MAP), создаваемых KontrollerLab, остаются теми же, стоит выбирать для них универсальное название (напр. out.hex), которое подходило бы ко всем проектам.

NB! Поскольку в программе KontrollerLab нельзя корректно добавить библиотеку на карту Linker , то необходимо настроить добавление библиотеки Домашней Лаборатории здесь, написав в конце map файла -lhomelab .

~~PB~~

Настроить установки компилятора на карте Compiler, как указано на приложенном изображении. Перед нажатием OK назначить введённые здесь параметры установками по умолчанию.

4. Настроить программатор, выбрав меню Project → Configure Programmer. На карте Choose Programmer выбрать AVRDUDE и на карте AVR DUDE указать тип программатора jtagmkI и соединительным портом, ранее найденный /dev/ttyUSBx (см. главу программаторов). Назначить и здесь соответствующие параметры установками по умолчанию.

~~PB~~

5. Установить параметры текстового редактора так, чтобы табуляция определялась 4 пропусками.

Это нужно для того, чтобы при открытии исходного файла другим текстовым редактором, он был прочитан так же как и в KontrollerLab.

В меню следует выбрать Settings → Configure Editor и слева в открывшемся окне – Editing, отметить галочкой «Insert spaces instead of tabulators», так же установить ширину табуляции – 4 пропуска.

6. Настроить открывшиеся окна в KontrollerLab по своему усмотрению и прописать какую-либо лёгкую программу для тестирования среды. В следующей главе приведён пример программы мигающего LED-а.

~~PB~~

Если среда разработки установлена и налажена в первый раз, то имеет смысл протестировать, всё ли было выполнено правильно. Самый лёгкий способ для этого – создать маленькую программу, откомпилировать её и загрузить в контроллер.

1. Присоединить программатор с платой модуля контроллера ATmega128. Проверить, что программатор подключен в правильную розетку и (JTAG) и верно (кабель направлен в сторону от платы контроллера – см. следующее изображение). После подключения программатора следует подключить источник питания (на плате контроллера должен зажечься маленький зелёный LED состояния).

2. Ввести простой код Си и скомпилировать его (compile).

#include
#include
 
int main(void)
{ // Настройка вывода PB7 выходом DDRB = 0x80;
  // Бесконечный цикл while (true) { // Инвертирование вывода PB7 PORTB ^= 0x80; hw_delay_ms(500); }
}

Панель инструментов

Убедиться, что в окне выхода появится сообщение «File compiled successfully». Если будет сообщение «Error(s) occurred: », следует проверить, чтобы при введении кода не было сделано ошибок.

3. Для загрузки кода выбрать приказ ignite. Если всё получится, то в окне выхода последней строкой KontrollerLab выдаст сообщение «Project built and uploaded successfully». Проверить, что LED состояния начал мигать с периодичностью (500 ms горит, 500 ms гаснет).

Если LED мигает, так как описано ранее, программное обеспечение установлена успешно и первая лабораторная работа выполнена. Поздравляем!

Иногда в программе AVR может потребоваться использование чисел с плавающей запятой. Для их вычисления и использования с функциями типа printf следует в настройках проекта совершить следующие изменения:

1. Открыть в меню настройки проекта Project → Configure Project и выбрать карту Linker. Отметить в секции Linker flags первую галочку (см. приложенное изображение).

2. Нажать OK и закрыть окно настроек.

Источник: http://home.roboticlab.eu/ru/examples/setup/linux

Операционная система для микроконтроллера

Что приходит на ум когда слышишь операционная система? Наверняка форточки, линукс, макось.. или что нибудь подобное. Верно, и на вопрос зачем она нужна, все уверенно ответят: послушать музыку, поиграть в игру (по интернету!), разговаривая при этом с другом по скайпу. Заодно созерцая, как мигает светодиодик, получив байт с юарта =).

А если копнуть глубже, то прослушивание музыки, пересылка данных по Интернету — это все одиночные процессы, а так как процессор у нас один, то одновременно он может выполнять только одну задачу.

Поэтому задачи выполняются поочередно небольшими «порциями», суть ОС делать это незаметно для пользователя: чтобы звук не хрипел и байтики слались и все работало одновременно.

При этом, если одна из задач «повиснет», то все остальное продолжало работать.

Читайте также:  Сетевой источник питания с высокими удельными параметрами

https://www.youtube.com/watch?v=XsfU3HoahQM

Если отбросить все лишние плюшки и оставить голую суть, то в первую очередь ОС это просто таймер, который отсчитывает равные промежутки времени, а также сам без участия пользователя переключается между задачами, выполняет какую то часть и снова переключается.

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

Управлением всего этого занимается планировщик заданий.

Есть два основных вида ОС: вытесняющая и кооперативная. В первом случае, переключение между задачами будет «жестким», т.е. если квант времени 1мс, то сначала первая задача будет выполняться ровно 1мс, затем вторая ровно 1мс и т.д. Такие оси называются реального времени (ОСРВ). У кооперативных немного попроще, процесс сам должен сказать что «я выполнился», поэтому к ОСРВ их отнести нельзя.

Впердолить вытесняющую на мелкие AVR не получится по причине небольшого количества ОЗУ. Из имеющихся вариантов кооперативок, мне приглянулась mRTOS, почитать подробности сей системы можно на сайте автора (легко гуглится). Главная причина ее использования — простота, наличие готовой версии под CAVR, для понимания общих принципов самое то.

Итак, остались главные вопросы, зачем и когда применять ось. Теоретически, все тоже самое, что вы сделаете с осью, вы можете сговнякать без нее, ибо ресурсы одни и те же. От того, что вы приладите ее к проекту, мегагерцы в космос не взлетят, железо останется тем же, следовательно ресурсы те же.

Поэтому стоит задать себе несколько вопросов: 1.Сможете ли вы распорядиться грамотно ресурсами? 2. Не предполагается ли в процессе написания прошивки изобретать такой же велосипед, подобный планировщику? 3. Насколько читаем Ваш код? Способны ли Вы через полгода-год открыть его и сходу разобраться?

4. Один ли Вы пишите или группой?

На первый вопрос дать ответ сложно, ибо все зависит от криворукости разработчика.

Со вторым все более понятно, если есть много независимых задач и планируется выполнять их через определенные промежутки времени, то лучше посмотреть в сторону ОС.

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

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

Теперь заглянем под капот. Для запуска mRTOS к проекту нужно подключить mrtos.c и заинклюдить mrtos.h. Структура кода немного отличается от привычного

#include
#include “mrtos.h”
 
//тут тело функции где мы пишем свой супер код
void task1()
{ while(1)//задачи в любой ОС построены на базе бесконечного цикла { //тут код Вашей задачи DISPATCH; //функция передачи управления планировщику };
}
 
//обработчик прерывания таймера 0
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
char ii;
#asm(“cli”)
TCNT0=0x9C;
inc_systime();
for(ii = 0; ii

Источник: http://avr-start.ru/?p=4142

Пишем на AVR ассемблере в Ubuntu: Geany + AVRA

AVRA – это ассемблер для микроконтроллеров AVR, который почти полностью совместим с Атмеловским ассемблером AVRASM32. AVRA есть для Windows, FreeBSD, macOS и Linux. Нас интересует, естественно, последнее.

Мы прикрутим сборку программ к Geany – текстовому редактору с базовыми функциями интегрированной среды разработки и будем прогать на ассемблере. 

Установка AVRA В репозитории Ubuntu есть пакет avra, но его версия – 1.2.3.

Эта версия не даст нам собрать программу без работы напильником, поскольку там есть некие директивы pragma и кое-что другое, мешающее нам. Мы ищем легкие пути, поэтому скачаем с сорсфорджа пакет с подходящей версией – 1.3.0 и установим его.

Вот по этой ссылке хостится нужный нам пакет.

Качаем оттуда avra-1.3.0.tar.bz2. далее я предположу, что он скачался в ~/Загрузки. Если это не так, измените в командах папку назначения.

Распаковываем:tar -xf ~/Загрузки/avra-1.3.0.tar.bz2Копируем папку с avra себе в хомяк:
cp -R ~/Загрузки/avra-1.3.0 ~Заходим в нее:
cd ~/avra-1.3.

0/srcДля сборки программе очень нужно, чтобы в папке src лежали файлы NEWS, README, AUTHORS и ChangeLog, которых там нет. Что ж, положим их туда. Два файла лежат в соседней папке, поэтому делаем так:
cp ../AUTHORS ../README ..

/srcДвух других файлов нигде нет, поэтому мы сделаем их сами:
Если хотите честности, можете скопировать текст с вот этой страницы. А можете оставить файл пустым [nobody cares]. Сохраним файл. Сделаем то же самое с новостями:
Оставим его пустым и сохраним.

Теперь по порядочку выполняем команды:

aclocal 
autoconf 
automake -a 
./configure 
sudo make 
sudo make install

Все готово. Проверяем – пишем:
Получаем:

AVRA: advanced AVR macro assembler Version 1.3.0 Build 1 (8 May 2010) Copyright (C) 1998-2010. Check out README file for more info

   AVRA is an open source assembler for Atmel AVR microcontroller family 
It can be used as a replacement of 'AVRASM32.EXE' the original assembler shipped with AVR Studio. We do not guarantee full compatibility for avra.

   AVRA comes with NO WARRANTY, to the extent permitted by law. You may redistribute copies of avra under the terms of the GNU General Public License. 
For more information about these matters, see the files named COPYING.

Теперь скопируем includes себе в корешок, чтобы не быть единалами:
sudo mv ~/avra-1.3.0/includes/ /usr/share/avra
Установка и настройка Geany Geany можно смело установить из репозитория:sudo apt-get install geanyПосле первого запуска в вашем хомяке появится папка .config/geany. В ней мы сейчас создадим файл со стилем подсветки синтаксиса для ассемблера. Для этого выполняем:
gedit ~/.config/geany/filedefs/filetypes.asmи вставляем в редакторе текст вот с этой страницы. Сохраняем файл.

Пишем простую прогу...

Возьмем проц ATtiny2313, подсоединим к ноге 12 (PB0) светодиодик и будем им мигать.

Запускаем Geany, делаем Файл -> Новый, Сохранить как… blink2313 в папке ~/AVRasm/blink2313.

Теперь пишем вот такой код, например:.nolist ;исключаем из листинга следующие две строки
.includepath “/usr/share/avra/” ;указали папку с инклудами
.include “2313def.inc” ;присоединили описание проца
.list ;все остальное включаем в листинг ;начало таблицы векторов прерывания RJMP main ; RESET
RETI ; INT0
RETI ; INT1
RETI ; TIMER1_CAPT
RETI ; TIMER1_COMPA
RETI ; TIMER1_OVF
RJMP tc0i ; TIMER0_OVF
RETI ; USART_RX
RETI ; USART_UDRE
RETI ; USART_TX
RETI ; ANA_COMP
RETI ; PCINT
RETI ; TIMER1_COMPB
RETI ; TIMER0_COMPA
RETI ; TIMER0_COMPB
RETI ; USI_START
RETI ; USI_OVF
RETI ; EE_RDY
RETI ; WDT ;конец таблицы векторов прерывания tc0i: ;обработка прерывания по переполнению таймера 0 IN   r1,SREG ;сохраняем содержимое флагового регистра
SBI PINB,0
OUT   SREG,r1 ; возвращаем изначальное значение флагового регистра
RETI ; выходим из прерывания main: ;всякая инициализация
LDI r16,LOW(RAMEND) OUT SPL,r16 ; Инициализировали указатель стека
LDI r16,(1

Источник: http://greenoakst.blogspot.com/2012/08/avr-ubuntu-geany-avra.html

Популярный Linux

И в Windows, и в Linux достаточно давно существуют программы, работающие с ассемблером. Ассемблером я пользовался при написании программы для нужного мне модуля. Но я не придерживаюсь мнения, что использовать микроконтроллер можно только тогда, когда умеешь писать код на ассемблере.

Если есть возможность облегчить себе жизнь, эту возможность не следует упускать. Писать программы на языке высокого уровня проще. При этом может возникать недопонимание особенностей выполнения команд, но это все выявляется отладочными средствами. Конечно, отладчик, скажем, MPLAB годичной давности был лучше, чем gpsim тех времен. Но все течет, все изменяется.

И даже в те времена, вполне можно было написать и отладить программу в Linux.

Сегодня, если бы мне пришлось повторить нечто похожее на ту работу, я использовал бы не MPLAB, а Piklab в сочетании с gpsim.

Piklab, дополненный свободно распространяемым компилятором «Си» SDCC, полностью перекрывает нужды программирования контроллера, прекрасно работает с простыми программаторами, содержащими минимум деталей, и, практически, не требует времени на освоение работы с программой, если есть хотя бы небольшой опыт программирования.

Микроконтроллеры, коли я о них заговорил, создания очень интересные. Интересные в плане того, что это микросхема. То есть, нечто привычное для разработчиков «железа», которым понятия печатной платы и элементной базы ближе, чем оператора или переменной.

Читайте также:  Блок питания с гасящим конденсатором

Но микроконтроллер бесполезен без программы, заложенной в него. И создателям «железа» приходится осваивать не слишком для них нужную предметную область, программирование.

Эту особенность понимают и производители микроконтроллеров, стараясь как можно больше облегчить освоение этих очень полезных устройств. Они создают компиляторы языков высокого уровня.

Они даже создают графические средства для программирования контроллеров, которые, практически, в подходах к разработке программ, совпадают с принципами разработки современной электроники.

Сфера моих интересов в написании разных рассказов об электронике — написать нечто интересное для начинающих радиолюбителей.

Я каждый раз пытался убедить их начинать работу с электроникой не только с пайки, но с осмысления того, что они собираются паять. Для этого, с моей точки зрения, прекрасно подходят программы САПР (EDA).

Точно так же, начинать осваивать программирование контроллеров лучше с создания программ на языке высокого уровня, а не на ассемблере. Иначе за травой не видно леса.

Многие, начинающие осваивать микроконтроллеры, предпочитают начинать с AVR-контроллеров. Я не очень понимаю истоки этого предпочтения, как не понял бы привязанности к цифровым микросхемам серии К155: в одних случаях удобны они, в других К564, в третьих… все зависит от поставленной задачи. Но в Linux есть и среда работы с AVR-контроллерами.

Рис. 1.11. Программа KontrollerLab в KDE 4

Еще лучше начинать изучение с графических средств построения программы.

Рис. 1.12. Программа KTechlab

В Linux я знаю, пока, только KTechlab, но могу ошибаться и, возможно, есть другие программы. Более мощная программа FlowCode для Windows работает и в Linux под Wine.

Рис. 1.13. Программа FlowCode в Linux

История с программированием микроконтроллеров очень похожа на подход к освоению Linux. Те, кто знаком с микроконтроллерами, отчего-то считают, что освоение микроконтроллера нужно начинать обязательно с изучения ассемблера и архитектуры контроллера.

Те, кто знает Linux, считает, что обязательно нужно его изучать на уровне управляющих скриптов и архитектурных особенностей операционной системы. Я встречал многих профессионалов, но не знаю ни одного, который предпочел бы преодолеть гору пешком, а не объехать на автомобиле.

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

Достаточно найти аналогичную программу для контроллеров другого производителя, и вы быстро повторите программу, экономя и время, и силы.

Изучать программирование микроконтроллера с помощью FlowCode, даже в демо-версии, удобно еще в одном отношении — можно транслировать программу на «Си», чтобы посмотреть, как выглядят простые операции в таком «звучании». Любая программа складывается, в конечном счете, из ряда операций.

Каждую из них можно опробовать в графическом подходе, затем увидеть на «Си». Затем можно сложить несколько фрагментов на «Си» и попытаться перенести их в среду программирования, поддерживающую этот язык программирования. Так можно постепенно освоить работу с языком программирования, ставшим уже классическим при работе с микроконтроллерами.

Вот как выглядит фрагмент программы, созданной в графическом виде, после трансляции на «Си».

Рис. 1.14. Оттранслированный на «Си» фрагмент программы FlowCode

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

Когда-то это было, действительно, универсальное лекарство от всех болезней в Linux. Но не сегодня. Сегодня для пользователя лучшее лекарство от проблем с Linux — это оставаться пользователем.

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

Но, если вы предполагаете только пользоваться Linux, то пользуйтесь. У вас не должно возникать проблем.

И дистрибутивы Linux. Да, каждый имеет отличительные особенности. Некоторые особенности («изюминки») заметны пользователям.

Здесь можно говорить только о личных предпочтениях, поскольку пользоваться с одинаковым успехом можно любым дистрибутивом: и ASPLinux, и Debian, и Mandriva, и Fedora…

Сегодня обновление загрузилось, еще час оно будет устанавливаться, а завтра я посмотрю, что обновилось в моем рабочем окружении.

Источник: https://poplinux.ru/me_n_lin/manager/p_6

AVR Studio for Ubuntu 11.10

About AVR

The ATMEL AVR is a modified Harvard architecture 8-bit RISC single chip microcontroller which was developed by Atmel in 1996.

The AVR was one of the first microcontroller families to use on-chip flash memory for program storage, as opposed to one-time programmable ROM, EPROM, or EEPROM used by other microcontrollers at the time.

The AVR is a modified Harvard architecture machine where program and data are stored in separate physical memory systems that appear in different address spaces, but having the ability to read data items from program memory using special instructions.

Atmel® AVR Studio® is the Integrated Development Environment (IDE) for developing and debugging embedded Atmel AVR® applications.

The AVR Studio gives a seamless and easy-to-use environment to write, build, and debug your C/C++ and assembler code.

The Studio is integrated with Compilers, assembler and a simulator, and interfaces seamlessly with in-system debuggers and programmers to make Windows code development easier.

In this post,I will demonstrate how to create your own version of Atmel AVR Studio for Ubuntu 11.10. The post explains two (2) different ways of compiling, simulating , debugging and burning of hex unto any AVR microcontroller without the use Atmel AVR Studio.

AVR Development Environment Setting

    1.  Repository index update sudo apt-get update
    2. *C Compiler installation sudo apt-get install gcc # c compiler download sudo apt-get install build-essential # Packages which are considered essential for building Debian packages

      *skip this section, if your gcc is the current one

    3.  AVR Packages Download sudo apt-get install gcc-avr # A port of GCC to AVR target processor sudo apt-get install gdb-avr # AVR GNU debugger sudo apt-get install binutils-avr #low-level utilities for building & manipulating object files sudo apt-get install avr-libc # AVR Library files sudo apt-get install avrdude # command-line program for programming AVR chips.

MakeFile Configuration

MakeFile is a utility for automatically building executable programs and libraries from source-code.

    1. AVR MakeFile Template Download                                                                 
      Download the make file for AVR microcontrollers from here.
      NB: The downloaded file should be saved into your project directory.The file should be as as “MakeFile” without extension.
    2. AVR MakeFile configurationAssumption: I’m assuming that The microcontroller is ATmega32 and programmers hardware is JTAG ICE. Then the following parameters commented in bold should be edited. MCU=atmega32 /*Add the name of the processor you are using */ PROGRAMMER_MCU=m32 /* This is microcontroller id. see manual pages of avrdude. i.e gedit /etc/avrdude.conf */ PROJECTNAME=myproject /* Project name , This could be anything you wish */ AVRDUDE_PROGRAMMERID=jtagmki  /*Programmer ids are listed in /etc/avrdude.conf */ AVRDUDE_PORT=/dev/ttyUSB0 /* Make sure that driver for parallel port is loaded and working and change permissions to 777 */

Sample code Testing

    1. Sample source code #include int main(void) { // Set Port D pins as all outputs DDRD = 0xff; // Set all Port D pins as HIGH PORTD = 0xFF; return 1; }
      • Save file to the same directory as the MakeFile
      • Use your terminal and navigate to the file directory.
    2. Execution command $ make              /* Compile your project*/ $ make hex        /* Generate hex file */ $ make install    /* Burn hex file in microcontroller ( Make sure your board is switched on and programmer is connected )*/

Reference

Источник: https://codbit.wordpress.com/avr-studio-for-linux-11-10/

Ссылка на основную публикацию
Adblock
detector