Начал разбираться с ИК-локатором http://parts.roboclub.ru/index.shtml?ik, но несколько не понимаю... В приведенной статье ИК-излучатель включается на 4 такта, выключается на 5 - и так десять раз, потом задержка 20 тактов. Частота МК - 1 MHz.
Локатор работает следующим образом: контроллер включает ИК-излучатель LED1 несколько раз с частотой около 36кГц...
Как получаются эти 36 кГц? У меня получается, что 1 МГц / (4+5) = 111 кГц. Объясните, пожалуйста, никак не соображу...
Александр, а как Вы собираетесь с помощью ИК-локатора измерять расстояние? Регулируя мощность излучения?..
Как там - не вникал, щас подумать некогда. Я делал так: таймер на 72 кГц и счетчик, считающий импульсы. Пачку насчитал - считает паузу. А приемник висит на прерывании.
С дальностью - пока не ясно, пробую всякие варианты.
-= Александр =- писал(а):Как там - не вникал, щас подумать некогда. Я делал так: таймер на 72 кГц и счетчик, считающий импульсы. Пачку насчитал - считает паузу. А приемник висит на прерывании.
С дальностью - пока не ясно, пробую всякие варианты.
Правильно понимаю, что таймер срабатывает с частотой 72кГц, при нечетных срабатываниях включаем излучение, при четных - выключаем?
Да, хотелось бы, конечно, иметь какую-то возможность измерять расстояние, но хоть я совсем чайник, мне кажется, что с помощью ИК-локатора этого добиться если и можно, то варьируя мощностью излучения... Звуковой локатор никто не делал? Мне попалась пока только такая вещь: http://www.ottawarobotics.org/articles/ultrasonic/ultrasonic.html Без ультразвука можно обойтись, скажем, парой микрофонов и одной пищалкой?...
Не, сонар не делал, да и не буду, слишком у него направленность плохая при такой сложности... С обычным звуком не знаю, наверно будет работать так-же, но пищание действует на нервы, да и ложных срабатываний много будет. Потом волны разной длины по-разному отражаются, скорее всего работать будет хуже...
Все TSOPы дают инвертированный сигнал. Ноль если что-то принято и один если ничего. И еще к ним обвязка нужна чтоб помехи не проходили, они очень к питанию критичны...
Прошу помощи или объяснения по конкретному вопросу: http://parts.roboclub.ru/index.shtml?ik в этой ссылке приведена программа: ;******************************************************************** ;* ИК-локатор: ИК-светодиод на PB4 дает пачки импульсов с частотой ;* около 36кГц, а TSOP1736 на PB3 их отслеживает ;* ;* MCU: ATtiny12@1MHz (c) RoboClub 2003 ;********************************************************************
.include "tn12def.inc"
rjmp RESET ;reset handle
;* Объявление переменных
.def t1 = r1 ;счетчик для "длинных" задержек .def temp = r19 ;счетчик времени задержки .def count = r20 ;счетчик числа импульсов в пачке
;* Определения
.equ led = 0 ;LED на PB0 .equ tsop = 3 ;TSOP на PB3 .equ ir_led = 4 ;IR LED на PB4
;* Начало кода
RESET: sbi DDRB, led ;подключаем LED на выход PORTB линия 5 sbi DDRB, ir_led ;подключаем IR LED на выход PORTB линия 3
cbi DDRB, tsop ;подключаем TSOP на вход PORTB линия 2 sbi PORTB,tsop ;включаем "подтяжку"
;* Задание значений
.equ TIME1 = 4 ;длительность импульса .equ TIME2 = 5 ;задержка между импульсами .equ TIME3 = 20 ;задержка между пачками импульсов .equ COUNT = 10 ;число импульсов в пачке
; Главный цикл программы ; ---------------------- start: ldi count, COUNT ;загружаем в счетчик число импульсов в пачке
; цикл выдачи пачки импульсов flash: cbi PORTB, ir_led ;зажигаем IR LED
ldi temp, TIME1 ;загружаем в temp длительность импульса Delay1: dec temp ;уменьшаем на единицу temp, пока brne Delay1 ; не станет равным 0
sbi PORTB, ir_led ;гасим IR LED
ldi temp, TIME2 ;загружаем в temp длительность паузы между импульсами Delay2: dec temp ;уменьшаем на единицу temp, пока brne Delay2 ; не станет равным 0
dec count ;уменьшаем на 1 счетчик числа импульсов brne flash ;если не 0, то посылаем следующий импульс
;когла пачка импульсов выдана - проверяем, есть ли сигнал от TSOP
sbis PINB, tsop ;если уровень на выходе TSOP низкий (т.е. сигнал есть) rjmp ledon ;то идем зажигать LED cbi PORTB, led ;иначе гасим LED rjmp wait_next ;и переходим к ожиданию следующей пачки
ledon: sbi PORTB, led ;гасим LED
;задержка перед следующей пачкой импульсов wait_next:
clr t1 ;сбрасываем t1 (т.е. t1=0 или, что тоже t1=256) ldi temp, TIME3 ;устанавливаем число задержек
Delay3: dec t1 ;задержка по счетчику t1 от 256 до 0 brne Delay3 ; т.е. 256*3 тактов dec temp ;повторяем TIME3 раз задержку по t1 brne Delay3 ; т.е. всего (TIME3*256*3 + TIME3*3) тактов
rjmp start ;переходим к началу главного цикла ************************************************************* AVR Studio "последней модели" постоянно выдает ошибку указывая на вот енту строчку: .equ COUNT = 10 ;число импульсов в пачке Подскажите, пожалуйста, в чём проблема? ___________ С уважением Vovan
У меня вопрос такой же как у автора этой темы(к сожалению он ответа не получил). Как там получается частота 36 кГц, если длительность импульса 4 периода тактового сигнала, длительность паузы - 5, а частота 1 МГц (то есть период 1 мкс и получается что период излучения 9 мкс, хотя для 36 кГц надо 28 мкс).
И еще есть вопрос тоже по этому локатору - как мк может надежно определить, что близко препятствие? Всмысле когда оно еще не очень близко ну или далеко то на выходе приемника изредка появляется низкий уровень сигнала, потом он появляется всё чаще и чаще.... Так вот как определить тот момент, когда препятствие однозначно близко. Подкиньте идею
Взять переменную и при 0 на тсопе ++ ее, потом выполняем программу и опять проверяем выход тсопа вобщем в главный цыкл ее. А по прерыванию от таймера сбрасывать в ноль. Если число в переменной превысит некоторое значение значет близко
И еще один спросивший не получил ответ (а может и сам догадался, да не поделился ни с кем). Почему же все таки 4 такта и 5 тактов? И в чём еще в этой программе может задаваться длительность, кроме как в тактах процессора? ИК-диод горит в течение 4х тактов и не горит в течение 5...