Все дорогие индивидуалки интим сайта http://prostitutkisurguta86.men/myprice/2500-3500/ размещают высокие стоимости за часок или ночь сношенья, но в качестве секса и их навыке недоумений нет. Также может быть эскорт-выезд.
Программирование AVR в Linux. 2) Установка ПО, схема, первая программа(мигаем светодиодом)
Posted by
Maxim Admin
on
0
SUCCESS: Your vote is considered!
Итак, вторая часть руководства по программированию микроконтролеров AVR в Linux.
Установка ПО
Нам портебуется, как минимум, две программы - компилятор и программатор.
В качестве компилятора будем использовать gcc-avr, а в качестве программатора avrdude
Чтобы установить эти програмы в ubuntu нужно выполнить:
sudo apt-get install avrdude gcc-avr
Собственно, все. Идем дальше...
Схема
Схема довольно проста
У микроконторллеров AVR есть порты ввода/вывода огбозначаются они как PA, PB, PC и т.д. Порты эти восьмиразрядные, обозначение выводов порта состоит из названия порта и номера начинающегося с ноля, например PA0, PA1, .... PA7. На схеме мы подключили к первому выводу порта PB светодиод через токоограничивающий резистор.
Программа
Итак, открываем любой текстовый редактор и начинаем писать программу.
В программе мы будем мигать светодиодом через определенные промежутки времени, для того чтобы отсчитать нужный промежуток времени, нужно знать частоту тактового генератора и написать пустой цикл который будет отсчитывать определенное количество тактов МК. К счастью уже есть библиотека содаржащая функцию задержки но ей нужно сообщить частоту процессора.
Микроконтроллер может работать от внутреннего генератора без кварцевого резонатора, от внутреннего генератора с кварцевым резонатором и от внешнего источника тактовых импульсов. Для нашей конструкции достаточно нестабилизированого(без кварцевого резонатора) внутренего генератора, микроконтроллер уже с завода сконфигурирован для работы от внутреннего нестабилизированого генератора на частоте 1МГц.
Чтобы сообщить функции задержки о частоте МК мы в начале файла задаем константу F_CPU
1
#define F_CPU 1000000L
Далее подключаем библиотеку для работы с портами ввода/вывода микроконтроллеров AVR и библиотеку функции задержки
1
2
#include <avr/io.h>#include <util/delay.h>
И далее начинается собственно главная функция программы, внутри тела этой функции будут нахоиться все выполняемые дейтвия
1
2
3
voidmain() {
}
Помните про то что у МК есть порты ввода/вывода? Так вот. за каждый порт отвечает несколько восьмиразрядных регистров внутри микрокотроллера, разряды которого соответствуют номеру порта ввода/вывода. Запись в регистр производится параллельно, а значит нельзя поменять значение только на одном выводе, значения на всех выводах меняются одновременно.
Итак. Сконфигурируем первый вывод порта PB как выход
1
DDRB =0b00000001;
Тут все просто, мы записываем в конфигурационный регистр DDRB байт 00000001 это означает что все выводы кроме PB0 сконфигурированы как входы а PB0 как выход
Далее мы запускаем бесконечный цикл(мы же хотим чтобы светодиод мигал всегда)
1
2
while (1) {
}
В котором сначала включаем светодиод записывая в регистр двоичное значение 00000001 (если нужно зажечь сведодиод на вывода PB3, например, то нужно записать значение 00001000, если одновременно на PB0 и PB3 то 00001001)
1
PORTB =0b00000001;
Затем ждем одну секунду
1
_delay_ms(1000);
Далее записываем ноль
1
PORTB =0b00000000;
И опять ждем секунду
1
_delay_ms(1000);
Дальше цикл повторяется
Вот собственно вся программа
#define F_CPU 1000000L // Set CPU frequency for delay function#include <avr/io.h>#include <util/delay.h>voidmain() {
// 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<<3); //Вывести еденицу на вывод 3
PORTB |= (1<<2)|(1<<3)|(1<<6); //Вывести еденицу на выводы 2, 3 и 6
PORTB &=~(1<<2); //Вфвести ноль на вывод 2
PORTB &= (~((1<<0)|(1<<2)|(1<<3))); //Вывести ноль на выводы 0, 2, 3
Компиляция
Теперь нашу программу нужно скомпилировать, для этого выполняем в терминале
Подключаем выводы программатора к компьютеру и к одноименным выводам(обозначеными оранжевым на схеме) микроконтроллера, включаем питание и шьем указав тип контроллера и программатора