summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvisil <workregor@mail.ru>2023-10-11 02:01:36 +0300
committervisil <workregor@mail.ru>2023-10-11 02:01:36 +0300
commitdb3871e169003284ccce2f7f7fef267017362d71 (patch)
tree0047f6c7e5ccb5ce01fae6be0070b7b991f61cfd
Начальный коммит
-rw-r--r--Makefile12
-rw-r--r--README.md33
-rw-r--r--led.c23
3 files changed, 68 insertions, 0 deletions
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 <avr/io.h>
+#include <util/delay.h>
+
+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);
+ }
+}