Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков.

 
Опции темы
Непрочитано 20.05.2016, 13:21  
Wlad1453
Прописка
 
Регистрация: 03.06.2009
Адрес: С.-Петербург
Сообщений: 148
Сказал спасибо: 112
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Wlad1453 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Уважаемый ТС. Вы бы приотркрыли бы завесу тайны. Что за прибор? Предназначение? диапазон измеряемой величины? Как часто измерения должны происходить? куда информацию выводить? Если на дисплей, то как часто информация на дисплее должна обновляться? Какие критерии оптимизации, т.е. вес, стоимость и т.п.? А то сразу про нехватку быстродействия и RTOS.

Я бы сначала сделал подробное описание проекта/задачи, и только потом бы в частности вдавался.
Реклама:

Последний раз редактировалось Wlad1453; 20.05.2016 в 13:24.
Wlad1453 вне форума  
Непрочитано 20.05.2016, 13:59  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Вот мы и делаем подробное описание-техзадание. Задача - реализовать задачу реального времени на Ардуино. На ТС не надейтесь, допустим, он заказал дальномер а всё остальное уже наше дело. Диапазон измерения следует из описания датчика: при скорости звука в воздухе 340м/с и максимальной длительности измерения 38мс получаем, учитывая что сигнал отражённый (0.038с*340м/с)/2=6.46м. чтобы отличить отражение от отсутствия сигнала нужно из 38мс вычесть несколько дискретов отсчета времени. Величина дискрета будет также определять минимальное расстояние и разрешающую способность. Информацию будем выводить и на дисплей и в RS232. Оптимизировать будем по стоимости и простоте.
cogen вне форума  
Непрочитано 20.05.2016, 14:02  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Делал подобное еще на пике при живом Ильиче. Все работало по прерыванию таймера и INT0. Определял с точностью до 1см. При этом UART тоже работал. И экран.
Easyrider83 вне форума  
Непрочитано 20.05.2016, 14:18  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Как раз то что надо - алгоритм обработчика INT0. Как измерял длительность импульса? При какой частоте счёта получился 1см? UART и экран - по таймеру?
cogen вне форума  
Непрочитано 20.05.2016, 14:47  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Там все просто было - запускаем таймер и дергаем ногу запуска импульса. INT0 читает значение таймера.
Easyrider83 вне форума  
Непрочитано 20.05.2016, 14:53  
johanh
Почётный гражданин KAZUS.RU
 
Регистрация: 28.03.2006
Сообщений: 3,611
Сказал спасибо: 141
Сказали Спасибо 427 раз(а) в 377 сообщении(ях)
johanh на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

cogen, Считывание отраженки идет одновременно с подачей сигнала.
Компенсация сигнала передачи.
johanh вне форума  
Непрочитано 20.05.2016, 15:50  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Сообщение от Easyrider83 Посмотреть сообщение
запускаем таймер и дергаем ногу запуска импульса. INT0 читает значение таймера.
ОК, спасибо. По шагам значит так:

Старт измерения
Запустить счет с 0 на таймере высокого разрешения
Выдать импульс TRIG

Обработчик внешнего прерывания по заднему фронту ECHO:
остановить таймер
вызвать обработку результата измерения

Обработка результата измерения
пересчитать измеренное таймером время в дистанцию
отобразить результат
разрешить старт нового измерения
cogen вне форума  
Непрочитано 20.05.2016, 15:54  
Wlad1453
Прописка
 
Регистрация: 03.06.2009
Адрес: С.-Петербург
Сообщений: 148
Сказал спасибо: 112
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Wlad1453 на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Коллеги читайте Дата-шит, не побоюсь этого слова. Датчик сам формирует импульс длительности на ноге echo. Длительность импульса 150мкс-25мс. Т.е. максимальная дальность не более 400 см. Запускается процесс измерения импульсом 10 мкс на другой ноге. Условие отсутствия препятствия 38мс. Точность +-3 см на максимальной дальности.

Вопрос, RTOS зачем нужен? Тем более, что измерение, как я понимаю, запускается кнопкой вручную.

Вот один из примеров реализации. Причем без библиотек.
http://research.andbas.com/2011/12/hc-sr04.html

int ledPin = 9;
int trigPin = 10;
int echoPin = 11;

long distance;
int ledLevel;

void setup() {
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
}

void loop() {
distance = getDistance();
ledLevel = (int) (distance*10)‹=255?255-distance*10:0;
analogWrite(ledPin, ledLevel);
delay(50);
}

long getEchoTiming() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin,HIGH);
return duration;
}

long getDistance() {
long distacne_cm = getEchoTiming()/29/2;
return distacne_cm;
}


Определение длительности импульса производится встроенной функцией pulseIn(), а именно:

"duration = pulseIn(echoPin,HIGH);. Функция pulseIn(...) возвращает long значение в микросекундах через то время, когда на указанном входе появится логическая единица (в нашем случае это вход номер 11). Как только на входе 11 появляется логическая единица - этот метод возвращает количество микросекунд за которое сигнал вернулся."

Нужно только встроить опрос кнопки либо в цикле, либо по прерыванию по изменению состояния пина.
Управление диодом заменяется Serial.println(xxx) и LCD.print(xxx). Естественно после инициализации обоих устройств.

Последний раз редактировалось Wlad1453; 20.05.2016 в 23:42.
Wlad1453 вне форума  
Непрочитано 20.05.2016, 15:55  
cogen
Прописка
 
Регистрация: 25.04.2010
Сообщений: 24
Сказал спасибо: 9
Сказали Спасибо 17 раз(а) в 17 сообщении(ях)
cogen на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Сообщение от johanh Посмотреть сообщение
Считывание отраженки идет одновременно с подачей сигнала.
Компенсация сигнала передачи.
Почему так? Проще? Или точнее, чем запуск счёта по переднему фронту ECHO и останов по заднему? И что такое компенсация сигнала передачи?
cogen вне форума  
Непрочитано 20.05.2016, 16:04  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,046
Сказал спасибо: 2,559
Сказали Спасибо 11,885 раз(а) в 5,960 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Быстродействие для Arduino

Сообщение от cogen Посмотреть сообщение
По спаду фронта запускающего импульса датчик излучает пачку из восьми импульсов с периодом 25мкс. По окончании посылки датчик устанавливает высокий логический уровень на выводе ECHO и переходит в режим приёма отражённого эхо-сигнала. В случае детектирования эхо-сигнала или по прошествии 38 миллисекунд на выводе ECHO устанавливается низкий уровень.
Что тут непонятно и зачем изобретать что-то типа "старт таймера одновременно с импульсом запуска"? Чтобы потом героически преодолевать самодельные трудности?
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
 

Закладки

Метки
ардуино, система реального времени, циклы
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RFID на Arduino с использованием Parallax RFID reader/writer IvanPuzirev Микроконтроллеры, АЦП, память и т.д 13 22.04.2014 20:57
Проблема с Arduino Motor Shield domka Песочница (вопросы новичков) 6 29.07.2013 11:56


Часовой пояс GMT +4, время: 10:35.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot