ПРИМЕР РАБОТЫ С - HC-SR04
|
|
tesla88 |
Дата: Вс, 03.08.2014, 20:07 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Всем хорошего настроения!!! Решил я попробовать поработать с ультразвуковым дальномером HC-SR04, полазил по форуму и не нашёл примеров работы с ним. состряпал программку , может кому будет полезно .
собставенно сам код
'**************************************************************** '* Name : HC-SR04.BAS * '* Author : [Порываев Алексей Александрович] * '* : All Rights Reserved * '* Date : 03.08.2014 * '* Version : 1.0 * '* Notes : * '* : * '**************************************************************** Device = 16F877 'Выберем микроконтроллер
Xtal = 20 'Укажем тактовую частоту
Dim Timer As TMR1L.Word 'Для удобства зададим имя для TMR1
TRISD = 0 'Порты PORTA, PORTB, PORTC, PORTD, PORTE, - на выход TRISA = 0 TRISE = 0 TRISC = 0 TRISB = %00000001 'PORTB.0 НА ВХОД
' ИНИЦИАЛИЗАЦИЯ LCD 16*2 Declare LCD_Type ALPHA Declare LCD_DTPin PORTD.4 Declare LCD_ENPin PORTA.2 Declare LCD_RSPin PORTE.1 Declare LCD_Interface 4 Declare LCD_CommandUs 200 Declare LCD_DataUs 50 Declare LCD_Lines 2
Symbol TRIG = PORTD.2 ' ВЫХОД НА ЗАПУСК ДАЛЬНОМЕРА Symbol ECHO = PORTB.0 ' ВХОД ПРИЁМА ИМПУЛЬСА ВРЕМЕНИ С ДАЛЬНОМЕРА
Dim X As Float ' ДРОБНАЯ ПЕРЕМЕННАЯ ДЛЯ РАСЧЁТА РЕЗУЛЬТАТА РАСТОЯНИЯ Dim Y As Float ' ДРОБНАЯ ПЕРЕМЕННАЯ ДЛЯ РАСЧЁТА РЕЗУЛЬТАТА ВРЕМЕНИ ИМПУЛЬСА
X = 0 'обнулить переменную x Y = 0 'обнулить переменную y
Cls
Main: PulsOut PORTD.2 , 5, High ' Сгенерировать импульс положительной полярности длительностью 0,5 сек на выходе PORTD.2 Y = PulsIn PORTB.0, 1 ' Измерить длительность импульса на выводе PORTB.0 Y = (y*2)/10000 ' расчет времени импульса и конвертация из мкс в сек X = (340*Y)/2 ' расчёт растояния Print At 1, 1, Dec X, " = sm " ' вывод на дисплей растояния в сантиметрах X = X/2.54 ' перевод из сантиметров в дюймы Print At 2, 1, Dec X, " = duim " ' вывод на дисплей растояния в дюймах DelayMS 500 'Задержка для видимости человеком смены показаний GoTo Main 'Отправляемся на начало
End
|
|
|
|
MiXaS |
Дата: Вс, 03.08.2014, 21:52 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
tesla88, спасибо за пример, но у меня есть подозрение, что Вы не следите за жизнью форума...
Сообщение отредактировал
MiXaS - Пн, 04.08.2014, 10:55
|
|
|
|
tesla88 |
Дата: Пн, 04.08.2014, 10:49 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
К сожалению не всегда есть время обшаривать весь форум, но замечание к месту, спасибо учту на будущее. Тогда это будет ещё один пример - более простой ( расчёт по формуле с даташита), но менее точный))), я сейчас на основе этого датчика делаю один девайс, как будет готов сразу поделюсь с форумом, так что тему можно пока не закрывать...
|
|
|
|
MiXaS |
Дата: Пн, 04.08.2014, 10:54 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Сама железка не очень точная, скажем для измерений растояний она подходит только в том случае, если +- 3 см не играет роли. Я делал температурную компенсацию. Немного точнее, но все же..
|
|
|
|
tesla88 |
Дата: Пн, 04.08.2014, 10:59 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Согласен, но не всегда нужна такая точность, для этого есть лазерные дальномеры Добавлено (04.08.2014, 10:59) --------------------------------------------- MiXaS, тут есть вопрос не совсем по теме - можно ли запустить tmr1 и остановить его раньше чем он достигнет предела переполнения , чтобы посмотреть его значение в данный момент?
|
|
|
|
MiXaS |
Дата: Пн, 04.08.2014, 12:05 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Цитата tesla88 ( ) тут есть вопрос не совсем по теме - можно ли запустить tmr1 и остановить его раньше чем он достигнет предела переполнения , чтобы посмотреть его значение в данный момент?
Остановить то его можно, а вот узнать сколько он отсчитал наверно нет, точно не могу сказать, но есть подозрение, что нет. Зачем Вам такие промежутки короткие? Может есть смысл использовать другой таймер, скажем с меньшим интервалом и обрабатывать его как обычно.
Добавлено (04.08.2014, 12:05) --------------------------------------------- Вот схемка устройства таймера. МНЕ кажется никак не прочитать.
Сообщение отредактировал
MiXaS - Пн, 04.08.2014, 12:05
|
|
|
|