Библиотека cyberlib ардуино

CyberLib

Содержание

Вступление

CyberLib

CyberLib это библиотека является альтернативой стандартным функциям Arduino существенно ускоряющая работу процессора. Поддерживает устройства на чипах Atmega328 и частично MEGA2560

Скачать самую свежую версию можно тут CyberLib

Тема форума посвященного библиотеке тут Форум Умный дом

Функции

Управление пинами

Dx_Out — установка пина Х как выход
Dx_IN — установка пина Х как вход
Dx_Hihg — установка высокого уровна на пине Х
Dx_Low — установка низкого уровня на пине Х
Ax_Read — чтение аналогового пина Х

SmallUart

UART_Init(115200) инициализация последовательного порта
UART_ReadByte(byte) получить байт данных из последовательного порта
UART_SendByte(byte) отправить байт данных в последовательный порт
UART_SendArray(array, size array) Функция отправляет в UART порт, массив типа байт, максимальный объем которого не должен превышать 65535 байт, минимальный объем массива 1 байт.Можно также отправлять часть массива. array-имя вашего массива, size array-число отправляемых байт массива

Пауза

delay_us() и delay_ms()
Функции delay_us() и delay_ms() можно применять в прерываниях так как они не используют таймер, но следует не забывать что точность этих функций
зависит от использования в коде обработчиков прерываний. Если Вы не используете в коде прерывания то и точность будет высокая
delay_us(n) где n — задержка в мкс, максимальная задержка может быть не больше 16000 мкс
delay_ms(n) где n — задержка в мс, максимальная задержка может быть не больше 65000 мс это равно 65 сек

Таймер

Timer1.
Настройку прерываний таймера можно настраивать от 6 мкс. до 4000000 мкс.(4 сек.) с шагом 1 мкс.
StartTimer1(obrobotchik, 1000) запуск таймера, первый параметр это Ваш обработчик прерывания, второй параметр это время, может принимать значения от 6 до 4000000
StopTimer1() Выключить таймер
ResumeTimer1() возобновить отсчет после остановки
RestartTimer1() перезапустить отсчет таймера заново

Увеличена пропускная способность в 1,85 раза по сравнению со стандартным, при работе на одной и той же частоте
StartSPI(0, 2, 1) SPI теперь можно настроить и запустить одной строкой : Где первый параметр это режим mode от 0 до 3 Второй параметр это делитель тактовой частоты, может принимать значения 2, 4, 8, 16, 32, 64, 128. Если Вы хотите выяснить частоту SPI то должны тактовую частоту контроллера 16000000 разделить на любой делитель из списка. И последний параметр это какой бит пойдет первым. Если 1 то первым пойдет старший бит если 0 то первым пойдет младший бит.
SendSPI(12) Отправить байт данных в шину SPI
MyData=ReadSPI() получить байт данных
StopSPI() выключить SPI

EEPROM

WriteEEPROM_Long(0, 4000000) Сохранить значение 4000000 в EEPROM по адресу 0 тип Long;

tmp=ReadEEPROM_Long(0) Прочитать из EEPROM с адреса 0 значение типа Long uint32_t ;

WriteEEPROM_Word(0, 4000) Сохранить значение 4000 в EEPROM по адресу 0 тип Word

tmp=ReadEEPROM_Word(0) Прочитать из EEPROM с адреса 0 значение типа Word uint16_t ;

WriteEEPROM_Byte(0, 200) Сохранить значение 400 в EEPROM по адресу 0 тип Byte;

tmp=ReadEEPROM_Byte(0) Прочитать из EEPROM с адреса 0 значение типа Byte uint8_t ;

Фильтр шума

find_similar(Array, sizeArray, range) ;
Фильтр удаления шума и ложных срабатываний Функция возвращает наиболее часто встречаемое в массиве значение
Array — Указатель на проверяемый массив, массив может иметь тип uint16_t или uint8_t
sizeArray — длинна массива не более 256 элементов
range — предел погрешности(отклонен� �е) может колебаться от 0 до 127, при значении 0 функция будет искать точные копии значений

Генератор звуковых колебаний

beep(uint16_t dur, uint16_t frq) ;
Генерирует звуковые колебания, на любом пине с заданной частотой и длительностью
dur — длительность от 50мс до 65535 мс
frq — частота от 10 Гц до 2000 Гц

Программная перезагрузка

Soft Reset
reset() ; — программный сброс контроллера
При помощи этой функции можно отправить контроллер в ребут в любом месте выполняемой программы

Бесконечный цикл

Start — Начало цикла
End — Конец цикла

Работа со сторожевым таймером

wdt_reset() — обнулить сторожевой таймер
wdt_disable() — выключить сторожевой таймер
wdt_enable(timeout) — Инициализация сторожевого таймера

Возможные значения timeout
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S

Источник

Библиотека ускоряющая работу платы Arduino

11.08.2019, 10:40

Хочу поделится с читателями, библиотекой «CyberLib», значительно ускоряющую работу ардуино.
Библиотека работает с Arduino Nano, Arduino Mega и Arduino Leonardo.

Перейду сразу к описанию.

Работа с цифровыми портами

Занимает 874 байта и выдаёт на пин 13 частоту 120 кГц.

С библиотекой «CyberLib»

Занимает 566 байт и выдаёт частоту 2650 кГц.
Разогналась в 22 раза.

Управление пинами:
Dx_Out; — установка пина Х как выход
Dx_In; — установка пина Х как вход
Dx_Hihg; — установка высокого уровна на пине Х
Dx_Low; — установка низкого уровня на пине Х
Dx_Read; — чтение пина Х
Dx_Inv; — инвертирует значение на пине Х

Чтение аналогового входа

Скорость чтения 112 мкс.

Скорость чтения 68 мкс. В два раза быстрее.

Управление пинами:
Ax_Read; — чтение аналогового пина Х

Чтение и запись Serial

Скетч занял 1650 байт.

Получилось 800 байт. В два раза меньше.

UART_Init(57600); — инициализация последовательного порта.
UART_ReadByte(b); — получить байт данных из последовательного порта.
UART_SendByte(b); — отправить байт данных в последовательный порт.
Буфферизируется только 1 байт данных, принятый с Serial порта.

Отправка массива в Serial

UART_SendArray(array, size array); — отправляет в порт массив типа байт. Где array-имя вашего массива, а size array-число отправляемых байт массива.
Максимальный объем массива не должен превышать 65535 байт.

Альтернатива стандартным функциям delayMicroseconds() и delay()

Работа с Timer1

StartTimer1(obrobotchik, 1000); Первый параметр-обработчик прерывания, будет запускаться каждый раз по истечении заданного времени. Второй параметр это время, может принимать значения от 6 до 4000000 мкс., шаг 1 мкс.
StopTimer1(); — остановить таймер.
ResumeTimer1(); — возобновить отсчет после остановки.
RestartTimer1(); — перезапустить отсчет таймера заново.

Работа с SPI

Увеличена пропускная спсобность 1.85 раза.
StartSPI(0, 2, 1); — Первый параметр это режим mode от 0 до 3.
Второй — это делитель тактовой частоты, может принимать значения 2, 4, 8, 16, 32, 64, 128. Для вычисления частоты SPI нужно тактовую частоту контроллера 16000000 разделить на любой делитель из списка.
Третий параметр это какой бит пойдет первым. Если 1 то первым пойдет старший бит если 0 то первым пойдет младший бит.
Отправить байт: SendSPI(b);
Получить байт: MyData=ReadSPI();
Выключить SPI: StopSPI();

Работа с EEPROM

WriteEEPROM_Word(0, 4000); — записать 4000 в EEPROM по адресу 0 тип Word.
uint16_t tmp=ReadEEPROM_Word(0); — прочитать из EEPROM с адреса 0 значение типа Word.
WriteEEPROM_Byte(0, 40); — записать 40 в EEPROM по адресу 0 тип Byte.
uint8_t tmp=ReadEEPROM_Byte(0); — прочитать из EEPROM с адреса 0 значение типа Byte.

Адресует максимум 256 адресов для типа Byte
Для Word максимум 128
Для Long максимум 64

Сторожевой таймер

wdt_reset(); — обнулить сторожевой таймер.
wdt_disable(); — выключить сторожевой таймер.
wdt_enable(timeout); — инициализация сторожевого таймера.
Возможные значения timeout
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S

Будте внимательны, не все ардуины корректно работают со сторожевым таймером (надо перешивать загрузчик), можно окирпичить контроллер.

Бесконечный цикл

Start — Начало цикла
End — Конец цикла
Цикл выполняется внутри конструкции Start-End.

Фильтр для удаления шума или ложных срабатываний

Приведенный пример показывает наиболее часто встречаемое значение 999, но если изменить третий параметр вызываемой функции с 0 на 1, то функция вернет значение 10, так как посчитает значение 9 и 11 как 10

find_similar(Array, sizeArray, range);
Array — Указатель на проверяемый массив, массив может иметь тип uint16_t или uint8_t.
sizeArray — длинна массива не более 256 элементов.
range — предел погрешности(отклонение) может колебаться от 0 до 127, при значении 0 функция будет искать точные копии значений.
Например: Ультразвуковой дальномер производит 5 замеров и складывает эти показания в массив, после выполнения этой функции будет возвращено наиболее вероятное измеряемое значение.

Библиотека написана не мной, я лишь опубликовал её с разрешения автора.
Здесь находится источник, автор либы Admin.
А тутили тут можно скачать сабж.

Источник

Библиотека cyberlib ардуино

Получилось 800 байт. В два раза меньше.

Управление пинами:

UART_Init(57600); — инициализация последовательного порта.
UART_ReadByte(b); — получить байт данных из последовательного порта.
UART_SendByte(b); — отправить байт данных в последовательный порт.
Отправляется в буфер только 1 байт данных, принятый с Serial порта.

Отправка массива в Serial
Описание

uint8_t message[] = «geek» ;

UART_SendArray( message, 4 );

UART_SendArray(array, size array); — отправляет в порт массив типа байт. Где array-имя вашего массива, а size array-число отправляемых байт массива.
Максимальный объем массива не должен превышать 65535 байт.

Альтернатива стандартным функциям delayMicroseconds() и delay()
Описание
Функции delay_us(); и delay_ms(); можно применять в прерываниях так как они не используют таймер. Точность этих функций зависит от использования в коде обработчиков прерываний. Если в коде не использовать прерывания точность будет высокая.
delay_us(n); n — задержка в мкс, максимальная задержка может быть не больше 16000 мкс.
delay_ms(n); n — задержка в мс, максимальная задержка может быть не больше 65000 мс.

Работа с Timer1
Описание

D13_High; delay_ms( 100 );

StartTimer1(obrobotchik, 1000); Первый параметр-обработчик прерывания, будет запускаться каждый раз по истечении заданного времени. Второй параметр это время, может принимать значения от 6 до 4000000 мкс., шаг 1 мкс.
StopTimer1(); — остановить таймер.
ResumeTimer1(); — возобновить отсчет после остановки.
RestartTimer1(); — перезапустить отсчет таймера заново.

Работа с SPI
Описание

StartSPI ( 0 , 8 , 1 ); // MODE0 , DIV8 , MSBFIRST инициализация SPI

WriteEEPROM_Long(0, 4000000); — записать 4000000 в EEPROM по адресу 0 тип Long.
uint32_t tmp=ReadEEPROM_Long(0); — прочитать из EEPROM с адреса 0 значение типа Long.
WriteEEPROM_Word(0, 4000); — записать 4000 в EEPROM по адресу 0 тип Word.
uint16_t tmp=ReadEEPROM_Word(0); — прочитать из EEPROM с адреса 0 значение типа Word.
WriteEEPROM_Byte(0, 40); — записать 40 в EEPROM по адресу 0 тип Byte.
uint8_t tmp=ReadEEPROM_Byte(0); — прочитать из EEPROM с адреса 0 значение типа Byte.

Адресует максимум 256 адресов для типа Byte
Для Word максимум 128
Для Long максимум 64

Сторожевой таймер
Описание

reset(); — программный сброс контроллера.
При помощи этой функции можно отправить контроллер в ребут в любом месте выполняемой программы.
wdt_reset(); — обнулить сторожевой таймер.
wdt_disable(); — выключить сторожевой таймер.
wdt_enable(timeout); — инициализация сторожевого таймера.
Возможные значения timeout
WDTO_15MS
WDTO_30MS
WDTO_60MS
WDTO_120MS
WDTO_250MS
WDTO_500MS
WDTO_1S
WDTO_2S
WDTO_4S
WDTO_8S

Будьте внимательны, не все ардуины корректно работают со сторожевым таймером (надо перешивать загрузчик), можно убить контроллер.

Start — Начало цикла
End — Конец цикла
Цикл выполняется внутри конструкции Start-End.

Фильтр для удаления шума или ложных срабатываний
Описание

Приведенный пример показывает наиболее часто встречаемое значение 999, но если изменить третий параметр вызываемой функции с 0 на 1, то функция вернет значение 10, так как посчитает значение 9 и 11 как 10

find_similar(Array, sizeArray, range);
Array — Указатель на проверяемый массив, массив может иметь тип uint16_t или uint8_t.
sizeArray — длинна массива не более 256 элементов.
range — предел погрешности(отклонение) может колебаться от 0 до 127, при значении 0 функция будет искать точные копии значений.
Например: Ультразвуковой дальномер производит 5 замеров и складывает эти показания в массив, после выполнения этой функции будет возвращено наиболее вероятное измеряемое значение.

Источник

Adblock
detector