Всем хорошего настроения!!! Решил я попробовать поработать с ультразвуковым дальномером 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 НА ВХОД
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 'Отправляемся на начало
К сожалению не всегда есть время обшаривать весь форум, но замечание к месту, спасибо учту на будущее. Тогда это будет ещё один пример - более простой ( расчёт по формуле с даташита), но менее точный))), я сейчас на основе этого датчика делаю один девайс, как будет готов сразу поделюсь с форумом, так что тему можно пока не закрывать...
Сама железка не очень точная, скажем для измерений растояний она подходит только в том случае, если +- 3 см не играет роли. Я делал температурную компенсацию. Немного точнее, но все же..
Согласен, но не всегда нужна такая точность, для этого есть лазерные дальномеры
Добавлено (04.08.2014, 10:59) --------------------------------------------- MiXaS, тут есть вопрос не совсем по теме - можно ли запустить tmr1 и остановить его раньше чем он достигнет предела переполнения , чтобы посмотреть его значение в данный момент?
тут есть вопрос не совсем по теме - можно ли запустить tmr1 и остановить его раньше чем он достигнет предела переполнения , чтобы посмотреть его значение в данный момент?
Остановить то его можно, а вот узнать сколько он отсчитал наверно нет, точно не могу сказать, но есть подозрение, что нет. Зачем Вам такие промежутки короткие? Может есть смысл использовать другой таймер, скажем с меньшим интервалом и обрабатывать его как обычно.
Добавлено (04.08.2014, 12:05) --------------------------------------------- Вот схемка устройства таймера. МНЕ кажется никак не прочитать.