Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: demanik, ivan_fd  
ПРИМЕР РАБОТЫ С - HC-SR04
tesla88 Дата: Вс, 03.08.2014, 20:07  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Всем хорошего настроения!!!
Решил я попробовать поработать с ультразвуковым дальномером HC-SR04, полазил по форуму и не нашёл примеров работы с ним. состряпал программку , может кому будет полезно wink .

собставенно сам код

'****************************************************************
'*  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
Прикрепления: 9229203.jpg (139.0 Kb) · 9666033.jpg (107.3 Kb)
ЯНДЕКС Дата: 03.08.2014
MiXaS Дата: Вс, 03.08.2014, 21:52  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 549
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

tesla88, спасибо за пример, но у меня есть подозрение, что Вы не следите за жизнью форума... biggrin
Сообщение отредактировал MiXaS - Пн, 04.08.2014, 10:55
tesla88 Дата: Пн, 04.08.2014, 10:49  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

К сожалению не всегда есть время обшаривать весь форум, но замечание к месту, спасибо учту на будущее. Тогда это будет ещё один пример - более простой ( расчёт по формуле с даташита), но менее точный))), я сейчас на основе этого датчика делаю один девайс, как будет готов сразу поделюсь с форумом, так что тему можно пока не закрывать...
MiXaS Дата: Пн, 04.08.2014, 10:54  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 549
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Сама железка не очень точная, скажем для измерений растояний она подходит только в том случае, если +- 3 см не играет роли. Я делал температурную компенсацию. Немного точнее, но все же..
tesla88 Дата: Пн, 04.08.2014, 10:59  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 114
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Согласен, но не всегда нужна такая точность, для этого есть лазерные дальномеры

Добавлено (04.08.2014, 10:59)
---------------------------------------------
MiXaS,  тут есть вопрос не совсем по теме - можно ли запустить tmr1 и остановить его раньше чем он достигнет предела переполнения , чтобы посмотреть его значение в данный момент?

MiXaS Дата: Пн, 04.08.2014, 12:05  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 549
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата tesla88 ()
тут есть вопрос не совсем по теме - можно ли запустить tmr1 и остановить его раньше чем он достигнет предела переполнения , чтобы посмотреть его значение в данный момент?


Остановить то его можно, а вот узнать сколько он отсчитал наверно нет, точно не могу сказать, но есть подозрение, что нет. Зачем Вам такие промежутки короткие? Может есть смысл использовать другой таймер, скажем с меньшим интервалом и обрабатывать его как обычно.

Добавлено (04.08.2014, 12:05)
---------------------------------------------
Вот схемка устройства таймера. МНЕ кажется никак не прочитать.
Прикрепления: 8329826.png (70.1 Kb)

Сообщение отредактировал MiXaS - Пн, 04.08.2014, 12:05
  • Страница 1 из 1
  • 1
Поиск: