• Stars
    star
    125
  • Rank 286,335 (Top 6 %)
  • Language
    C
  • License
    GNU Lesser Genera...
  • Created over 5 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Быстрое ядро для Arduino IDE

CORE_PHOTO

GyverCore for ATmega328

▶SWITCH TO ENGLISH◀
Версия 2.0.3 от 27.09.2020
Быстрое и лёгкое ядро для Arduino IDE с расширенной конфигурацией.
Основано на оригинальном ядре Arduino версии 1.8.9, большинство функций заменены на более быстрые и лёгкие аналоги, убрано всё лишнее и не относящееся к микроконтроллеру ATmega328p, убран почти весь Wiring-мусор, код упрощён и причёсан. Добавлено несколько функций и интересных вариантов компиляции.
Разработано by Александр AlexGyver и Egor 'Nich1con' Zaharov

Известные баги

  • На компиляторе версии 8 не работает библиотека ServoSmooth. Будьте бдительны с этой версией!
  • Вариант "GyverUART вместо Serial" не работает для Ethernet модулей

Установка

Автоматическая

  • Открой the Arduino IDE
  • Зайди в Файл > Настройки
  • Вставь этот адрес в Дополнительные ссылки для менеджера плат:
    https://alexgyver.github.io/package_GyverCore_index.json
    
  • Открой Инструменты > Плата > Менеджер плат...
  • Подожди загрузку списка
  • Листай в самый низ, пока не увидишь GyverCore
  • Жми Установка
  • Закрой окно
  • Выбери плату в Инструменты > Плата > GyverCore > ATmega328 based
  • Готово!
  • Примечание: новая версия компилятора по умолчанию идёт для Windows 64, если нужно для win32 или Linux - нужно установить вручную. Идём в C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\2.0\tools\avr-gcc, удаляем оттуда всё и кладём туда файлы из архива нужной версии (папка avr-gcc в корне данного репозитория)

Ручная

  • Файлы из папки GyverCore в этом репозитории положить по пути C:\Users\Username\AppData\Local\Arduino15\packages\GyverCore\hardware\avr\2.0\
  • Версия компилятора по умолчанию для Windows 64, если нужна другая - читай выше как установить

Изменения

Облегчено и ускорено

Время выполнения функций, мкс (при 16 МГц кварце)

Функция Arduino GyverCore Быстрее в, раз
millis 0.69 us 0.69 us -
micros 0.81 us 0.81 us -
pinMode 2.56 us 0.25 us 10.25
digitalWrite 2.40 us 0.125 us 19
digitalWrite PWM 3.25 us 0.30 us 7.4
digitalRead 2.80 us 0.063 us 46
analogWrite 3.8 us 0.33 us 8.4
analogRead 111.2 us 5.63 us 20
analogReference 0.19 us 0.19 us -
attachInterrupt 1.06 us 0.8 us -
detachInterrupt 0.5 us 0.25 us 2
tone 9.0 us 2.25 us 4
shiftIn 111 us 8 us 13
shiftOut 117 us 24 us 4.5

Занимаемое место, Flash, байт

Функция Arduino GyverCore Разница, Flash
millis 26 24 2
micros 24 20 4
pinMode 114 24 90
digitalWrite 200 24 176
digitalRead 190 24 166
analogWrite 406 48 358
analogRead 32 72 -40
analogReference 0 22 -22
attachInterrupt 212 180 32
detachInterrupt 198 150 48
tone 1410 740 670
Serial begin 1028 166 862
print long 1094 326 768
print string 2100 1484 616
print float 2021 446 1575
parseInt 1030 214 816
readString 2334 1594 740
parseFloat 1070 246 824

Примечание: analogRead и analogReference имеют расширенную функциональность и весят чуть больше
Скетч, состоящий из однократного вызова перечисленных выше функций, занимает

  • Ядро Arduino: 3446 байт (11%) Flash / 217 байт (10%) SRAM
  • Ядро GyverCore: 1436 байт (4%) Flash / 94 байт (4%) SRAM

Пустой скетч:

  • Ядро Arduino: 444 байт (1%) Flash / 9 байт (0%) SRAM
  • Ядро GyverCore: 202 байт (0%) Flash / 0 байт (0%) SRAM

Все библиотеки, работа которых зависит от стандартных функций (время, I/O), работают быстрее:

  • SPI: отправка байта данных по адресу (опустить latch, отправить адрес, отправить байт, поднять latch) занимает:
    • Стандартное ядро: 14 мкс (71 кГц)
    • GyverCore: 6 мкс (164 кГц)

uart является практически полным аналогом Serial, но весит в разы меньше и работает быстрее. Список функций смотри ниже в Добавлено.

Добавлено

  • Расширена подсветка синтаксиса (вплоть до названий регистров и битов)
  • Макрос bitToggle(value, bit), инвертирует состояние бита bit в байте value
  • Быстрая функция digitalToggle(pin), инвертирует состояние пина
  • Расширенная работа с АЦП
    • Предделитель АЦП по умолчанию изменён на 4, это в разы ускоряет analogRead, измерения по нашим тестам менее точными не становятся
    • Убрано в 2.0 analogStartConvert(byte pin) - начать преобразование с выбранного пина
    • Убрано в 2.0 analogGet() - получить преобразованное значение (между analogStartConvert и analogGet можно выполнять действия, в отличие от ожидания в analogRead())
    • analogPrescaler(uint8_t prescl) - установить предделитель для АЦП (2, 4, 8, 16, 32, 64, 128) - управляет скоростью работы АЦП (скоростью оцифровки). Prescaler:
      • 2: 3.04 мкс (частота оцифровки 329 000 кГц)
      • 4: 4.72 мкс (частота оцифровки 210 000 кГц)
      • 8: 8.04 мкс (частота оцифровки 125 000 кГц)
      • 16: 15.12 мкс (частота оцифровки 66 100 кГц)
      • 32: 28.04 мкс (частота оцифровки 35 600 кГц)
      • 64: 56.04 мкс (частота оцифровки 17 800 кГц)
      • 128: 112 мкс (частота оцифровки 8 900 Гц)
    • Убрано в 2.0 В функции analogRead(pin) вместо пина можно указать INTERNAL (получить значение внутреннего опорного напряжения) или THERMOMETR (получить приблизительную температуру МК). Примечание: нужно установить предделитель 128
  • Добавлен очень быстрый и лёгкий uart (аналог классу Serial)
    • uart.begin() - запустить соединение по последовательному порту со скоростью 9600
    • uart.begin(baudrate) - запустить соединение по последовательному порту со скоростью baudrate
    • uart.end() - выключить сериал
    • uart.peek() - вернуть крайний байт из буфера, не убирая его оттуда
    • uart.flush() - ждать принятия данных
    • uart.clear() - очистить буфер
    • uart.read() - вернуть крайний байт из буфера, убрав его оттуда
    • uart.write(val) - запись в порт
    • uart.print(val) - печать в порт (числа, строки, char array)
    • uart.println(val) - печать в порт с переводом строки
    • uart.available() - возвразает true, если в буфере что-то есть
    • uart.setTimeout(val) - установить таймаут для функций парсинга (по умолчанию 100 мс)
    • uart.parseInt() - принять целочисленное число
    • uart.readString() - принять строку
    • uart.readStringUntil() - принять строку по терминатору
    • uart.parseFloat() - принять число float
    • uart.parsePacket(dataArray) - принять пакет вида $50 60 70; в массив dataArray (смотри пример)
  • Добавлены расширенные настройки платы из меню платы
    • Выбор загрузчика
    • Выбор источника тактирования (внешний, внутренний)
    • Сохранять или очищать EEPROM
    • Вывод тактирования на ногу МК
    • Возможность отключить системный таймер 0 и освободить для себя вектор прерывания ovf
    • Замена Serial быстрым uart
    • Настройка или отключение B.O.D.
    • Возможность отключить стандартную инициализацию периферии
    • Выбор версии компилятора

Убрано

  • Убраны всякие сервисные файлы и прочий хлам, не относящийся к ATmega328 (wifi, USB), почищен код. Ядро полностью совместимо с остальными библиотеками, ничего из стандартных функций не вырезано.
  • analogWrite(pin, 255) не заменяется на digitalWrite(pin, HIGH) для корректной работы 10 бит ШИМ. Шумы при работе ШИМ на заполнении 255 отсутствуют. Чтобы выключить шим, нужно сделать пин analogWrite 0, также генерацию отключает digitalWrite любого уровня на этот пин.

Настройки платы

Bootloader - выбор загрузчика (требует перезаписи загрузчика):

  • old bootloader - cтарый загрузчик (стоит на большинстве китайских плат)
  • Новый с optiBoot, киатйцы тоже потихоньку начинают продавать платы с ним
  • optiBoot v8 - optiboot самой свежей версии
  • Вариант without bootloader для прошивки скетча во всю доступную (32 кБ) память МК

Clock - выбор частоты и источника тактирования (требует перезаписи загрузчика):

  • External 20 MHz (макс. частота для ATmega328, для своих плат)
  • External 16 MHz (стандартный вариант для платы Nano 16 МГц)
  • External 8 MHz (стандартный вариант для платы Nano 8 МГц)
  • Internal 8 MHz (внутренний генератор: можно работать с голым камнем без кварца)
  • Internal 1 MHz (внутренний генератор)
  • Internal 128 kHz (внутренний генератор) - загрузчик будет стёрт! Используйте without bootloader!
  • Примечания:
    • Функции времени (delay/millis) скорректированы под выбранную частоту
    • После прошивки на частоту 128 кГц дальнейшая загрузка по ISP возможна только с понижением частоты ISP на стороне программатора!

Save EEPROM - сохранять EEPROM после перепрошивки (очистки) камня (требует перезаписи загрузчика):

  • enable - включить
  • disable - выключить

Clock Out - на пине D8 (NANO/Mini) будет продублировано тактирование с частотой источника (требует перезаписи загрузчика):

  • disable - выключить
  • enable - включить

System timer - преднастройка таймера 0:

  • enable - таймер 0 настроен по умолчанию, работают функции времени delay/millis
  • disable - вектор прерываний OVF таймера 0 освобождён для пользователя, delay/delayMicroseconds работают, millis/micros - нет
  • Примечание: при отключенном таймере 0 функции delay и delayMicroseconds автоматически заменяются на _delay_ms и _delay_us из avr/util.h, а millis и micros заменены на 0

Serial - работа с Serial:

  • default Serial - при работе с Serial работает стандартная библиотека Serial
  • GyverUART - все обращения к Serial в коде автоматически заменяются на uart из библиотеки GyverUART - код становится быстрее и легче!
  • Примечание: в GyverUART нет функций find, findUntil, readBytes и readBytesUntil!

B.O.D. (Brown-out detector) - reset при падении напряжения (требует перезаписи загрузчика):

  • disable - отключен
  • 1.8V - сброс при напряжении питания ниже 1.7-2.0V
  • 2.7V (default) - сброс при напряжении питания ниже 2.5-2.9V
  • 4.3V - сброс при напряжении питания ниже 4.1-4.5V

Initialization - инициализация периферии (таймеры, ацп) в начале скетча:

  • enable - стандартная инициализация
  • disable - инициализация отключена

Compiler version - версия компилятора

  • default v5.4.0 - встроенная в IDE версия компилятора
  • avr-gcc v8.3.0 - новая версия компилятора: компилирует быстрее, скетчи весят меньше! Билд взял отсюда

Больше контроля!

Для большего контроля за периферией микроконтроллера рекомендую попробовать следующие наши библиотеки:

  • directTimers - полный контроль над таймерами/счётчиками ATmega328
  • directADC - полный контроль над АЦП и компаратором ATmega328
  • GyverPWM - расширенная генерация ШИМ сигнала со всеми настройками и режимами
  • GyverTimer012 - очень простая и лёгкая библиотека для контроля прерываний по таймерам 0/1/2
  • GyverWDT - полный контроль за WDT (прерывания, перезагрузка)

Скачать все библиотеки можно из репозитория

Версии

  • 1.0.0
  • 1.1.0
    • Восстановлена совместимость с некоторыми библиотеками (макросы pinToMask)
    • Добавлен выбор частоты в меню (поддержка 16/8 МГц плат с корректнным временем и портом)
  • 1.2.0
    • Возвращён pins_arduino.h, который требуют некоторые библиотеки
  • 1.3.0
    • Вовзращены ещё некоторые стандартные костыли, но на вес и эффективность ядра они не влияют
  • 1.4.0
    • Восстановлена совместимость между номерами пинов для analogRead (A-пины и цифры)
  • 1.5.0
    • Облегчён analogRead
    • Чуть исправлена инициализация watchdog
  • 1.6.0
    • Пофикшен INPUT_PULLUP
    • Добавлена расширенная подсветка синтаксиса (регистры и байты)
    • Убрана поддержка ATmega168
    • Изменена логика выбора платы
    • Добавлена поддержка тактирования от внутреннего генератора:
      • 8 МГц
      • 1 МГц (только для without bootloader)
      • 128 кГц (только для without bootloader)
  • 1.7.0
    • Облегчена сборка
    • Добавлено корректное время (millis/delay) для частоты 128 кГц
    • Функции millis() и micros() вырезаны при отключении таймера 0 (через меню выбора платы)
    • Функции delay() и delayMicroseconds() работают при отключении таймера 0 (через меню выбора платы)
    • Вывод в порт корректно работает при отключении таймера 0 (через меню выбора платы)
    • Ускорен uart (обычный буфер заменён на циклический) - чтение быстрее в 2 раза!
    • Добавлена настройка BOD (через меню выбора платы)
    • Добавлен Clock Out - вывод тактирования на пин D8 (через меню выбора платы)
    • Добавлена настройка Save EEPROM (через меню выбора платы)
    • Добавлена настройка Initialization отключить инициализацию периферии при старте скетча (через меню выбора платы)
    • Огромное спасибо Pasha13666 за помощь в доработке!
  • 1.7.1
    • Поправлены баги с I/O
    • Улучшен uart
  • 1.7.2
    • Поправлено отключение millis
  • 1.7.3
    • Сокращён аналогРид
    • Убран расширенный ШИМ
    • Убран сброс WDT (не работал)
    • Пофикшены различные баги
    • Убран lightInit
    • Добавлен загрузчик optiBoot v8
  • 1.7.4
    • Поправлены баги с Serial
    • И не только с Serial
    • Оптимизированы прерывания
  • 1.8
    • Поправлена критическая ошибка с таймером
    • Исправлена куча багов
    • Дописан keywords
    • Всё протестировано на всех загрузчиках (спасибо Egor!)
  • 1.8.1
    • Пофикшен вывод float в uart
    • В uart добавлен вывод с базисом числа
  • 1.8.2
    • uart обёрнут в класс
    • Добавлена возможность заменить вызовы Serial на uart (через меню выбора платы)
  • 1.8.3
    • uart улучшен, добавлен буфер на отправку данных
  • 1.8.4
    • Убраны дублирующиеся программаторы
    • Ещё чуть ускорен uart
  • 1.9.0
    • Вшита новая версия компилятора avr-gcc
  • 1.10.0
    • Расширена подсветка синтаксиса
    • Пофикшен tone
    • Пофикшен pulseIn (но выдаёт разрешение 4 мкс)
    • Добавлен avr-gcc v8 под Win32 и Linux
    • Ускорен IO
  • 1.10.1
    • IO откатили назад из за непонятных багов
  • 1.10.2
    • Пара багфиксов с IO
    • Вернули заголовочные для WiFi
  • 2.0
    • Убраны все дополнительные функции кроме analogPrescaler и digitalToggle. Все "приколы" переезжают в отдельную либу GyverHacks
    • Почищены и отформатированы файлы
    • Исправлен конфликт с IP
    • Подкорректировано меню платы
    • Исправлена уязвимость в pinMode
    • Cнижен вес
    • Повышена скорость некоторых функций
    • Исправлены ошибки в пустых загрузчиках
  • 2.0.1
    • Исправлена ошибка с delayMicroseconds
    • Исправлено предупреждение файла у "без загрузчика"
  • 2.0.2
    • Ускорен digitalToggle
    • Обновлён uart
    • Чуть ускорен analogRead
    • Добавлена поддержка клока 20 МГц
  • 2.0.3
    • Возвращены стандартные программаторы
  • 2.0.4
    • Сделал стандартное поведение GPIO

More Repositories

1

GyverLibs

РЕПОЗИТОРИЙ АРХИВИРОВАН. ВСЕ БИБЛИОТЕКИ ТЕПЕРЬ НАХОДЯТСЯ ЗДЕСЬ https://github.com/GyverLibs
C++
441
star
2

GyverLamp

Лампа-будильник на адресных светодиодах и esp8266
C
204
star
3

ColorMusic

Цветомузыка на Arduino и WS2812b
C++
174
star
4

Arduino_Ambilight

Динамическая фоновая подсветка монитора своими руками на Arduino
C++
152
star
5

GyverLamp2

Огненная лампа v2
C++
148
star
6

nRF24L01

Модули беспроводной связи nRF24L01, настройка и примеры
C++
142
star
7

GyverControl

Универсальный контроллер для умной теплицы
C++
93
star
8

EnglishProjects

Projects with English langulage description
C++
93
star
9

PCdisplay

Экран с параметрами железа ПК и автоматический реобас
C#
86
star
10

WS2812_FX

Эффекты для адресной ленты WS2812
C++
77
star
11

GyverTwink

Гирлянда на адресных светодидоах и esp8266, управление по WiFi
C++
77
star
12

tutorials

Примеры к урокам
C++
72
star
13

GyverMatrixBT

Матрица адресных светодиодов, управляемая по Bluetooth
C++
72
star
14

MeteoClock

Домашняя метеостанция на Arduino
C++
68
star
15

GyverMatrixWiFi

Матрица адресных светодиодов с WiFi
C++
61
star
16

GyverMOD

Вейп Боксмод на Ардуино
C++
61
star
17

NixieClock_v2

Часы на газоразрядных индикаторах и Arduino версия 2
C++
57
star
18

GyverBrick

Программа для создания карты для сборки картинки из лего-деталек
Java
51
star
19

AlexGyver

48
star
20

AC_Dimmer

Диммер переменного тока на Ардуино
C
46
star
21

MoneyBox_counter

Распознаватель монет со счётчиком суммы и прочей статистикой
C++
45
star
22

LEDcube

8x8x8 LED cube on Arduino
C++
44
star
23

alexgyver.github.io

Repo for GitHub Pages
JavaScript
43
star
24

GyverSaber

Световой меч на Arduino
C++
43
star
25

WebLamp

Парные лампы со связью через Интернет на esp8266
C++
41
star
26

GyverLight

Светильник с различными эффектами на Arduino
C++
40
star
27

GravityPixels

Матрица с пикселями, которые ведут себя как реальные тела
C++
40
star
28

ChristmasLights

Гирлянда на адресной ленте и Arduino
C++
39
star
29

FHTSpectrumAnalyzer

Анализатор спектра на Arduino (FHT) и светодиодной матрице
C
37
star
30

LEDstairs

Контроллер подсветки лестницы на Arduino
C++
34
star
31

crypto

Processing
33
star
32

GyverDrink

Наливатор на Arduino
C++
33
star
33

Bitmaper

Программа для преобразования изображений в bitmap
JavaScript
33
star
34

GyverKIT

Стартовый Ардуино-набор
C++
31
star
35

Auto_Pump_Sleep

Энергоэффективный автополив на Digispark
C++
30
star
36

POV_display

Вращающийся светодиодный дисплей на Arduino и WS2812
C
30
star
37

FireFX

Огненные эффекты на светодиодной ленте
C++
28
star
38

imageProcessor

Программа для преобразования изображений в битмап код
Processing
28
star
39

BluetoothCar

Машинка на Arduino с управлением по Bluetooth и FPV
C++
26
star
40

MecanumBot

Платформа на всенаправленных колёсах
C++
26
star
41

WeatherPredict

Предсказатель погоды на Arduino
C++
26
star
42

GyverRGB

Крутой контроллер для RGB светодиодной ленты на Arduino
HTML
25
star
43

ALight_by_KARMAN

Компактный Ambilight на STM32
C
24
star
44

NixieClock

Часы на газоразрядных индикаторах и Arduino NANO
C++
24
star
45

LEDmask

Медицинская маска со светодиодами и Arduino
C++
23
star
46

GyverString

Бегущая строка на Arduino
C
23
star
47

autoHumidifier

Автоматический увлажнитель воздуха на Arduino
C++
23
star
48

Remote_pyro_control

10 канальный пиропульт на Ардуино и модулях nRF24L01
C++
21
star
49

Arduino_speedometer

Arduino based speedometer
C++
21
star
50

POV_Serial

POV stick with Serial control (via Bluetooth)
C
21
star
51

DigiSand

Цифровые песочные часы на Arduino
C++
20
star
52

BendeRadio

Интернет-радио в форме головы Бендера
C++
19
star
53

Auto-Pumps

Многоканальный автополив на Arduino
C++
19
star
54

RangeMeter

Ультразвуковой дальномер на Arduino
C++
18
star
55

Dawn-Clock

Будильник-рассвет на Arduino
C++
18
star
56

GyverLCDbars

Графики и полосы загрузки для LCD дисплеев
C++
17
star
57

ServoClock

7-сегментные часы на сервоприводах
C++
17
star
58

SDreader

Читалка текста с SD карты на OLED дисплей
C++
17
star
59

YouTube_widget

Виджет счётчик подписчиков YouTube
C++
16
star
60

AmbiSensor

Динамическая фоновая подсветка для любого телевизора
C++
16
star
61

GyverFeed2

Автоматическая кормушка на Arduino
C++
16
star
62

Aim-Fan

Самонаводящийся вентилятор на Arduino
C++
16
star
63

WS2812_painter

Рисуем светом на ленте WS2812
HTML
15
star
64

SegmentMonitor

Графический дисплей из 7 сегментных индикаторов
C
15
star
65

GRIx4_by_KARMAN

Часы на ГРИ и STM32 от Дмитрия Карманова
C
14
star
66

GyverWheel

Руль для компьютера на Arduino
C
14
star
67

MetallDetector-Arduino

Металлоискатель на Arduino
C++
13
star
68

HyperGyver

Гиперкуб на Ардуино
C++
13
star
69

Electro_lock

Электронный замок на Ардуино
C++
13
star
70

Optical_Tachometer

Оптический тахометр на Arduino
C++
12
star
71

microPong

Микро игровая консоль с игрой Pong
C++
12
star
72

webcamStream

C
12
star
73

COVID19

Симуляция вируса на Arduino и Processing
C
12
star
74

PitchShifter

Модулятор голоса на Arduino
C++
11
star
75

myLibraries

Дамп моих библиотек
C
11
star
76

Thermocontrol

Регулятор вентилятора на Arduino
C++
10
star
77

ArmTank

Танк с манипулятором на Arduino
C++
10
star
78

GyverTripper

Сигнализация-сворачиватель окон на ATtiny85
C++
10
star
79

MerryGyver

Цифровой ёлочный шар
C++
10
star
80

MagicGyver

ЧПУ станок из "Волшебного экрана"
C++
10
star
81

SlowDance_Gyver

SlowDance - рамка, ожилвяющая растения
C++
10
star
82

automaticTrashcan_v2

Автоматическое мусорное ведро на Ардуино, часть 2
C++
10
star
83

DinoDuino

Проходим динозаврика Ардуиной
C++
9
star
84

LightControl

C++
9
star
85

morzePrikols

Скетчи к видео про передачу лазером
C++
9
star
86

AiFrame

Фоторамка с нейросетью
C
8
star
87

GestureSpeaker

Bluetooth колонка с управлением жестами
C++
8
star
88

GyverBomb

Имитация бомбы из CS, с паролем, таймером, пищалкой и электрозапалом
C++
8
star
89

PCdisplay_v2

Отображение ресурсов компьютера на светодиодных кольцах
C++
8
star
90

TachoLED

C++
8
star
91

randomGame

Повторение сгенерированной случайно последовательности нажатий кнопки
C++
7
star
92

RC_Turrel

Радиоуправляемая ракетная турель с FPV
C++
7
star
93

DropMagic

Левитация капель воды на Arduino
C++
7
star
94

3dpov

3D голограмма на Arduino
C++
7
star
95

schemeImages

Картинки для создания схем в Photoshop и Paint.NET
7
star
96

SecretKnockLock

Замок с "секретным стуком" на Arduino
C++
7
star
97

GyverFeed

C++
7
star
98

Smooth_start

Плавный пуск на Arduino
C++
7
star
99

GunGame

Пистолет-контроллер с игрой на Javascript
C++
7
star
100

RingMusic

Светомузыка для светодиодных колец
C++
7
star