From db3871e169003284ccce2f7f7fef267017362d71 Mon Sep 17 00:00:00 2001 From: visil Date: Wed, 11 Oct 2023 02:01:36 +0300 Subject: =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 12 ++++++++++++ README.md | 33 +++++++++++++++++++++++++++++++++ led.c | 23 +++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100644 led.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5f11262 --- /dev/null +++ b/Makefile @@ -0,0 +1,12 @@ +DELAY?=1000 + +default: + avr-gcc -DDELAY=${DELAY} -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o led.o led.c + avr-gcc -o led.bin led.o + avr-objcopy -O ihex -R .eeprom led.bin led.hex + +flash: + sudo avrdude -F -V -c arduino -p ATMEGA328P -P /dev/ttyACM0 -b 115200 -U flash:w:led.hex + +clean: + rm -f led.o led.hex led.bin diff --git a/README.md b/README.md new file mode 100644 index 0000000..97ebf18 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +Слегка изменённый пример из видео: ![Getting Started with Baremetal Arduino C Programming](https://www.youtube.com/watch?v=j4xw8QomkXs) + +## Необходимые пакеты + +Arch Linux: + +`pacman -S avr-gcc avr-libc avrdude avr-binutils` + + +Ubuntu: + +`apt install avr-libc avrdude binutils-avr gcc-avr` + + +## Использование + +Получение шестнадцатиричного файла для записи: + +`make` + +Запись на устройство: + +`make flash` + +Очистка рабочей директории: + +`make clean` + +Задать частоту мигания в мс можно при помощи переменной окружения DELAY: + +`DELAY=100 make` - задаст частоту мигания в 100 мс; значение по умолчанию - 1000 мс. + +Прочие настройки и параметры меняются вручную в Makefile. diff --git a/led.c b/led.c new file mode 100644 index 0000000..2eda149 --- /dev/null +++ b/led.c @@ -0,0 +1,23 @@ +// Заставляем светодиод мигать +// *тут пояснения* +// https://www.youtube.com/watch?v=j4xw8QomkXs + +#include +#include + +int main(void) { + // назначаем PORTB5 на "вывод" (output) + DDRB = DDRB | (1 << DDB5); + + // вечный цикл... + while(1) { + // сигнал на PORTB5 + PORTB = PORTB | (1 << PORTB5); + // пауза... + _delay_ms(DELAY); + // сигнал выкл. + PORTB = PORTB & ~(1 << PORTB5); + // пауза... + _delay_ms(DELAY); + } +} -- cgit v1.2.3