12.02.2013, 23:53 | #1 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Ускоряем работу Arduino
Ускоряем работу Arduino Nano и Arduino UNO
Альтернативная и улучшенная библиотека от Arhat109 Спасибо Bulatovor, за помощь в создании библиотеки CyberLib Благодаря ему теперь библиотека получила описание и поддержку работы с портами в Arduino Mega и Arduino Leonardo Сегодня вооружившись осциллографом, я решил провести наглядное тестирование встроенной фукции digitalWrite(); и работу с портами библиотеки CyberLib Залил ниже приведенный код для проверки встроенной в IDE функции Код:
void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); digitalWrite(13, LOW); } Слабовато! Ускоряем, зациклив функцией goto Код:
void setup() { pinMode(13, OUTPUT); } void loop() { label: digitalWrite(13, HIGH); digitalWrite(13, LOW); goto label; } Теперь попробуем с использованием библиотеки CyberLib.h Код:
#include "CyberLib.h" void setup() { D13_Out; //Настраиваем пин D13 на выход } void loop() { label: D13_High; D13_Low; goto label; } Теперь результат впечатляет, скорость работы отличается в 22 раза В следующий раз проверю скорость работы функции чтения порта Спасибо Bulatovor, за то что создал описание функций библиотеки CyberLib PHP код:
|
13.02.2013, 09:39 | #2 |
Senior Member
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799 |
А если вот так попробовать замерить или при компиляции с библиотекой получается тоже самое? Ну так чтоб убедиться.
PHP код:
|
13.02.2013, 10:41 | #3 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Получится тоже самое
Перед компиляцией кода, Препроцессор будет искать все директивы предназначенные для него и начинаются со знака # #define это директива Макро-подстановки, первая запить после команды это идентификатор, вместо нее в код будет подследственна вторая запись(значение) Синтакс #define идентификатор значение |
03.03.2013, 07:10 | #4 |
Junior Member
Регистрация: 24.11.2012
Адрес: Новосибирск
Сообщений: 14
Вес репутации: 0 |
В библиотеке есть такая запись:
//***************Output Pins************* #define MotorA0 DDRD |=B00010000 #define MotorA1 DDRD |=B00100000 #define MotorB0 DDRD |=B01000000 #define MotorB1 DDRD |=B10000000 Вопрос: 1) MotorA0, MotorA1, MotorB0, MotorB1 - это что ? 2) Правильно ли написать : void setup() { D5_In; D5_High; } для подключения внутреннего подтягивающего резистора у входа D5 ? Последний раз редактировалось fot; 03.03.2013 в 07:20. |
03.03.2013, 09:56 | #5 | ||
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Цитата:
Цитата:
|
||
03.03.2013, 11:08 | #6 |
Junior Member
Регистрация: 24.11.2012
Адрес: Новосибирск
Сообщений: 14
Вес репутации: 0 |
Вот бы ещё A0 - A5 перевести,
да с analogRead () командой... А ещё analogWrite(D5), например, для PWM. |
03.03.2013, 11:42 | #7 | ||
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Цитата:
Цитата:
Без настройки регистров ADCSRA и ADMUX не обойтись В примере читается порт A0 циклически в фоновом режиме PHP код:
PHP код:
|
||
03.03.2013, 12:09 | #8 |
Junior Member
Регистрация: 24.11.2012
Адрес: Новосибирск
Сообщений: 14
Вес репутации: 0 |
Влоб попробовал поменять :
PHP код:
A0 - то же самое. А, вот A1 как (D15) - работает. Остальные пины, из нужных (см.setup()) - работают адекватно. Плата Seeeduino, кристалл Atmega 328 . |
03.03.2013, 12:29 | #9 |
Junior Member
Регистрация: 24.11.2012
Адрес: Новосибирск
Сообщений: 14
Вес репутации: 0 |
A0 мне нужен как цифровой вход , но что-то не хочет он быть D14-м.
Всё равно - большое спасибо за науку! Завтра попробую АЦП оба варианта. Последний раз редактировалось fot; 03.03.2013 в 13:24. |
03.03.2013, 15:29 | #10 | |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Проверил D8 у меня работает
Цитата:
|
|
Здесь присутствуют: 4 (пользователей: 0 , гостей: 4) | |
|
|