Skip to content

Sample programs for AVR microcontrollers

Notifications You must be signed in to change notification settings

pkolt/avr_examples

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AVR

Сборник примеров программ для AVR:

Базовая информация (ATmega328P)

Побитовые операции для управления регистрами

Установить бит в 1

int PORT = 0b00000000;
PORT |= (1 << 0); // Установить 0-й бит в значение равно 1
PORT |= (1 << 2); // Установить 2-й бит в значение равно 1
PORT |= (1 << 0) | (1 << 7) // Установить первый и последний бит в значение равно 1

Установить бит в 0

int PORT = 0b11111111;
PORT &= ~(1 << 0); // Установить 0-й бит в значение равно 0
PORT &= ~((1 << 0) | (1 << 2)); // Установить 0-й и 2-й бит в значение равно 0

Инвертировать значение бита

int PORT = 0b11111111;
PORT ^= 1 << 0; // Инвертировать 0-й бит
PORT ^= ((1 << 0) | (1 << 2)); // Инвертировать 0-й и 2-й биты

Проверить бит

int PORT = 0b00000100;

if (0 == (PORT & (1 << 3))) { // Проверить что 3-й бит равен 0
    printf("bit is 0\n");
}

if (~PORT & (1 << 3)) { // Проверить что 3-й бит равен 0
    printf("bit is 0\n");
}

if (PORT & (1 << 2)) { // Проверить что 2-й бит равен 1
    printf("bit is 1\n");
}

Порты ввода-вывода

Порты могут быть настроены на вход или на выход. При настройке на вход - порт используется как вольтметр, измеряя поступающее на него напряжение. При настройке на выход - порт подает напряжение равное LOW(0V) или HIGH(5V), в зависимости от заданного значения регистра PORTx.

Регистры управляющие портами:

  • DDRx задает направление (порт на вход или порт на выход);
  • PORTx для порта на вход используется для установки внутреннего подтягивающего резистора, для порта на выход задает выходное напряжение;
  • PINx в основном используется для считывания поступающего значения для порта на вход;

Перед использованием порт необходимо настроить с помощью регистра DDRx.

Регистры направления данных DDR (direct data register).

  • порт B - DDRB (полный - 8 бит, PB0..PB7)
  • порт C - DDRC (неполный - 7 бит, PC0..PC6)
  • порт D - DDRD (полный - 8 бит, PD0..PD7)

Для настройки порта записать в регистр:

DDRB |= (1 << PB5); // настройка пина PB5 на выход

Управлять подачей напряжения на порт настроенный на выход можно с помощью регистра PORTx:

PORTB |= (1 << PB5); // установить напряжение 5V на порту PB5

Сводная таблица:

Настройка порта DDRx PORTx = 0 PORTx = 1 PINx
На выход 1 LOW на выходе HIGH на выходе значение заданное в PORTx
На вход 0 плавающее значение подтянут к HIGH через внутренний резистр HIGH или LOW

Приложение

Время

Название second millisecond microsecond nanosecond
second (s) 1 1 000 1 000 000 1 000 000 000
millisecond (ms) 0.001 1 1 000 1 000 000
microsecond (us) 1.0E-6 0.001 1 1 000
nanosecond (ns) 1.0E-9 1.0E-6 0.001 1

AVR Library

  • avr/sfr_defs.h: содержит макросы для работы с битовыми операциями (_BV(), bit_is_set(), bit_is_clear() и т.п.);
  • avr/io.h: содержит константы для работы с пинами микроконтроллера;
  • avr/interrupt.h: этот модуль предоставляет функции для работы с прерываниями;
  • avr/pgmspace.h: этот модуль предоставляет функции для работы с программируемой памятью;
  • avr/eeprom.h: этот модуль предоставляет функции для работы с EEPROM;
  • avr/wdt.h: этот модуль предоставляет функции для работы с таймером watchdog;
  • avr/sleep.h: этот модуль предоставляет функции для работы с режимами сна;
  • avr/power.h: этот модуль предоставляет функции для управления питанием микроконтроллера;
  • util/delay.h: содержит функции для работы с задержками (_delay_ms(), _delay_us());

Стандартная C библиотека для AVR-GCC

Дополнительно

About

Sample programs for AVR microcontrollers

Topics

Resources

Stars

Watchers

Forks

Languages