diff --git a/README.md b/README.md index 773fe8e..386eb80 100644 --- a/README.md +++ b/README.md @@ -9,24 +9,63 @@ ## Функциональное назначение выводов ![Pinout](docs/pinout.PNG) -## Особенности работы с платой Elbear Ace-Uno в ArduinoIDE -Дефайны для светодиода и кнопки. -Входящие в состав пакета библиотеки адаптированы для работы на Амуре. -Варнинги от ErrorMsgHandler и как их можно отключить. -Список выводов, на которых доступны прерывания. -Обработчик прерывания расположен в рам, поэтому толстые функции лучше не писать, ибо сожрет память. -Включение/отключение сообщений об ошибках DISABLE_ERROR_MESSAGES(); +## Особенности использования платы Elbear Ace-Uno в ArduinoIDE +### Цифровые выводы +На плате Elbear Ace-Uno доступны встроенные светодиод и кнопка. Для их использования необходимо воспользоваться макросами `LED_BUILTIN` и `BTN_BUILTIN`, передавая их в качестве аргументов функции вместо номера цифрового вывода. +В отличие от стандартного функционала Arduino, на плате Elbear Ace-Uno невозможно управлять притяжками цифрового вывода, настроенного на вход, с помощью функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`. Для включения притяжки к питанию необходимо воспользоваться функцией `void pinMode(PinNumber, INPUT_PULLUP)`. +Для инвертирования состояния цифровых выводов доступна функция `void digitalToggle(uint32_t PinNumber)`. +### Аналоговые выводы +#### АЦП +Встроенный в MIK32 АЦП обладает разрешением 12 бит, однако по умолчанию в Arduino IDE применяется разрешение 10 бит. С помощью функции `void analogReadResolution(uint8_t resolution)` можно изменять разрешение в диапазоне от 1 до 32 бит. +Функция `uint32_t analogRead(uint32_t PinNumber)` возвращает результаты измерения после усреднения по 10 значениям. +#### ШИМ +На плате Elbear Ace-Uno доступны следующие выводы для формирования ШИМ-сигнала: D3, D5, D6, D9, D10, D11. Генерация сигнала осуществляется с помощью 32-битного таймера. Выводы D3, D5, D6, D9 подключены к таймеру 1, выводы D10, D11 подключены к таймеру 2. Выводы, подключенные к одному и тому же таймеру, выдают ШИМ-сигнал одинаковой частоты. +Цифровой вывод D10 не может быть использован для генерации ШИМ, если одновременно активен интерфейс SPI. Это ограничение связано с особенностями работы микроконтроллера. Ограничение не распространяется на использование D10 в качестве цифрового вывода при активном SPI. +По умолчанию частота сформированного ШИМ-сигнала составляет 1 кГц. Функция `void analogWriteFrequency(uint32_t freq)` позволяет изменить частоту сигнала в диапазоне от 1 Гц до 1 МГц. +По умолчанию разрешение, используемое в функции `void analogWrite(uint32_t PinNumber, uint32_t writeVal)`, составляет 8 бит. Функция `void analogWriteResolution(uint8_t resolution)` позволяет измененить разрешение в диапазоне от 1 до 32 бит. +Остановить генерацию ШИМ-сигнала можно, вызвав функцию `void analogWriteStop(uint32_t PinNumber)` или функции `void digitalWrite(uint32_t PinNumber, uint32_t Val)`/`int digitalRead(uint32_t PinNumber)`. + +### Прерывания +На плате Elbear Ace-Uno доступно 7 прерываний, настраиваемых функцией `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`: +|Цифровой вывод|Номер прерывания| +|---------|---------| +|D2|0| +|D3|1| +|D4|2| +|D5|3| +|D8|4| +|D9|5| +|`BTN_BUILTIN`|6| + +Для получения номера прерывания по номеру вывода существует функция `int8_t digitalPinToInterrupt(uint32_t digPinNumber)`. + +В микроконтроллере MIK32 предусмотрен всего один вектор прерывания. Когда срабатывает прерывание от любого источника, общая функция-обработчик последовательно проверяет все возможные источники и, при необходимости, вызывает соответствующие обработчики конкретных модулей. Поэтому важно, чтобы функции, вызываемые при прерываниях, выполняли минимально необходимый объем работы и обеспечивали как можно более быстрое завершение обработки. Это позволит избежать задержек и снизит риск пропуска последующих прерываний. +Общая функция-обработчик прерываний располагается в RAM памяти. Это позволяет устраненить задержки, связанных с кэшированием памяти при работе из FLASH памяти. Обработчики прерываний, назначаемые цифровым выводам с помощью функции `void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode)`, а так же обработчик прерывания для функции `tone()` так же располагаются в памяти RAM. + +### Serial +Для работы доступно два последовательных интерфейса. Нулевой интерфейс доступен на выводах D0, D1, для работы с ним используется экземпляр класса под названием `Serial`. Нулевой интерфейс используется для вывода информации в Монитор порта в Arduino IDE. +Первый интерфейс доступен на выводах D7, D8, используемый экземпляр класса - `Serial1`. +Доступны следующие настройки режима работы каждого интерфейса: длина данных - 7 или 8 бит; четность - нет, четное, нечетное; стоп бит - 1 или 2 бита. + +### Предупреждения об ошибках +Если в скетче используется интерфейс `Serial`, при возникновении ошибок при использовании какой-либо функции из пакета в порт может передаваться сообщение об этой ошибке с пояснением. Например, если в функцию будет передан некорректный номер цифрвого вывода, предупреждение об этом появится в подключенном com порте. +По умолчанию вывод предупреждений включен. Если интерфейс `Serial` используется для коммуникации с другим устройством, вывод предупреждений можно отключить. Для этого в самом начале функции `setup()` необходимо вызвать макрос `DISABLE_ERROR_MESSAGES();`. Вывод предупреждений можно включить обратно, вызвав макрос `ENABLE_ERROR_MESSAGES();` в любом месте программы. + +### Библиотеки, входящие в состав пакета +Входящие в состав пакета библиотеки используют периферию микроконтроллера MIK32 и адаптированы для работы с ним. +|Библиотека|Описание|Заметки| +|---------|---------|------| +|[SPI](https://docs.arduino.cc/language-reference/en/functions/communication/SPI/)|Библиотека для работы с интерфейсом SPI| Для работы используется встроенный SPI1. Доступные делители частот - `SPI_CLOCK_DIV4`, `SPI_CLOCK_DIV8`, `SPI_CLOCK_DIV16`, `SPI_CLOCK_DIV32`, `SPI_CLOCK_DIV64`, `SPI_CLOCK_DIV128`, `SPI_CLOCK_DIV256`, обеспечивают частоту работы от 125 кГц до 8 МГц. Скорость работы по умолчанию - 4 МГц. Для задания режима и скорости работы рекомендуется использовать функцию `SPISettings()`, а не соответствующие отдельные функции.| +|[Wire](https://docs.arduino.cc/language-reference/en/functions/communication/Wire/)|Библиотека для работы с интерфейсом I2C|Для работы используется встроенный I2C1. Доступные частоты работы интерфейса: 100 кГц (`WIRE_FREQ_100K`), 400 кГц (`WIRE_FREQ_400K`), 1000 кГц (`WIRE_FREQ_1000K`). Скорость работы по умолчанию - 100 кГц. В режиме работы в качестве ведомого устройства функции, заданные через onReceive() и onRequest(), выполняются в прерывании.| +|[SoftwareSerial](https://docs.aСrduino.cc/learn/built-in-libraries/software-serial/)|Библиотека, реализующая программный последовательный интерфейс.|Доступные скорости работы - от 300 до 57600 бод. Для отправки данных (TX) можно использовать любой цифровой вывод. Для приема данных (RX) можно использовать только выводы, поддерживающие прерывания. Обработчик прерывания и связанные с ним функции располагаются в памяти RAM.| +|[EEPROM](https://docs.arduino.cc/learn/built-in-libraries/eeprom/)|Библиотека для работы с памятью EEPROM| Для использования доступно 1024 байта встроенной EEPROM памяти. Для корректной работы библиотеки обязательно вызывать функцию EEPROM.begin() перед началом работы с памятью.| +|[Servo](https://docs.arduino.cc/libraries/servo/)|Библиотека для работы с сервоприводом| Любой цифровой вывод может использоваться для управления сервоприводом| +|[NeoPixel](https://docs.arduino.cc/libraries/adafruit-neopixel/)|Библиотека для работы с адресными светодиодами|| ## Протестированные библиотеки |Библиотека|Описание|Заметки| |---------|---------|------| -|[SPI](https://docs.arduino.cc/language-reference/en/functions/communication/SPI/)|Библиотека для работы с интерфейсом SPI. Входит в состав bsp| Какой SPI, особенности | -|[Wire](https://docs.arduino.cc/language-reference/en/functions/communication/Wire/)|Библиотека для работы с интерфейсом I2C. Входит в состав bsp|Для работы используется !!!| -|[SoftwareSerial](https://docs.arduino.cc/learn/built-in-libraries/software-serial/)|Библиотека, реализующая программный последовательный интерфейс. Входит в состав bsp|Для отправки данных (TX) можно использовать любой цифровой вывод. Для приема данных (RX) можно использовать только выводы, поддерживающие прерывания. Доступные скорости работы - от 300 до 57600 бод.| -|[EEPROM](https://docs.arduino.cc/learn/built-in-libraries/eeprom/)|Библиотека для работы с памятью EEPROM. Входит в состав bsp| Для использования доступно 1024 байта встроенной EEPROM памяти. Для корректной работы библиотеки обязательно вызывать функцию EEPROM.begin() перед началом работы с памятью.| -|[Servo](https://docs.arduino.cc/libraries/servo/)|Библиотека для работы с сервоприводом. Входит в состав bsp| Любой цифровой вывод может использоваться для управления сервоприводом| -|[NeoPixel](https://docs.arduino.cc/libraries/adafruit-neopixel/)|Библиотека для работы с адресными светодиодами. Входит в состав bsp|| |[SD Library](https://www.arduino.cc/en/Reference/SD)|Библиотека, позволяющая считывать и записывать информацию на карты `SD`|v1.2.4|