Технический форум по робототехнике.
Yuraskas » 25 окт 2009, 19:59
Да нет же, камрады, я не про то... Как подключать ТСОП я знаю, сам под него плату разводил и пару штук спаял, один на фото как раз виднеется. Я в сомнениях как подключить 4 ТСОПа, может можно (для экономии выводов) подключить все 4 ИК-диода на один выход с МК? И как 4 входа программно обрабатывать... Мне хотя бы алгоритм, а то что-то никак тяму дать не могу (( Пока программа выглядит вот так:
- Код: Выделить всё • Развернуть
$regfile = "m8def.dat"
$crystal = 1000000
'------------ Левый двигатель
Config Portb.2 = Output '1,2EN
Config Portd.5 = Output '1A
Config Portb.0 = Output '2A
'------------ Правый двигатель
Config Portb.1 = Output '3,4EN
Config Portd.7 = Output '3A
Config Portd.6 = Output '4A
'------------ ИК-бампер
Config Portd.1 = Output : Ir_led Alias Portd.1 'ИК-диод
Config Pind.0 = Input 'TSOP
'------------ Индикация
Config Portc.5 = Output : Led Alias Portc.5 'LED
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
'===========================================================================
Set Portd.0 'Подтяжка TSOPa
Dim I As Byte
Gosub Left_forward
Gosub Right_forward
Pwm1a = 180 : Pwm1b = 170 'Задаём скорость
Do
Gosub Tsop
If Pind.0 = 0 Then
Waitms 50
Gosub Tsop
If Pind.0 = 0 Then
Set Led
Gosub Left_backward
Gosub Right_backward
Wait 1
Gosub Left_stop
Pwm1a = 255 : Pwm1b = 255
Waitms 600 'Время поворота
Pwm1a = 180 : Pwm1b = 170
End If
End If
Reset Led
Gosub Left_forward
Gosub Right_forward
Loop
End
Left_forward:
Reset Portd.5
Set Portb.0
Return
Right_forward:
Reset Portd.7
Set Portd.6
Return
Left_backward:
Set Portd.5
Reset Portb.0
Return
Right_backward:
Set Portd.7
Reset Portd.6
Return
Left_stop:
Reset Portd.5
Reset Portb.0
Return
Tsop:
For I = 1 To 19
Set Ir_led
Waitus 18
Reset Ir_led
Waitus 18
Next
Return
yak-40 » 25 окт 2009, 21:38
Yuraskas писал(а):(для экономии выводов) подключить все 4 ИК-диода на один выход с МК?
Так и надо делать. Только обязательно через транзистор, вывод МК четыре ИК-диода не потянет
![Smile :)](http://roboforum.ru/images/smilies/smile.gif)
Yuraskas » 26 окт 2009, 06:09
Вывод МК и одного может не потянуть. На модуле датчика стоит транзистор в цепи ик-диода, на базе резистор 1кОм.
yak-40 » 26 окт 2009, 08:18
Yuraskas писал(а):Вывод МК и одного может не потянуть
Если до 20мА, то потянет
![Smile :)](http://roboforum.ru/images/smilies/smile.gif)
Yuraskas » 27 окт 2009, 18:33
Товарищи, подскажите, можно ли заюзать под сигнал для ИК-светодиода датчика препятствия ШИМ второго таймера? Где-то краем глаза слышал что кто-то делал, но как?
galex1981 » 27 окт 2009, 18:40
Можно конечно! Обычный шим настраиваешь и все
yak-40 » 27 окт 2009, 18:42
Можно.
Можно вообще без ШИМ-а обойтись. Пачку импульсов можно на любой ножке МК сформировать.
С другой стороны выход таймера конечно удобней, меньше ресурсов отнимает.
Yuraskas » 27 окт 2009, 18:57
yak-40 писал(а):Пачку импульсов можно на любой ножке МК сформировать
Вот у меня как раз пачка на любой ножке
![Smile :)](http://roboforum.ru/images/smilies/smile.gif)
Но таймером - кошернее
![Smile :)](http://roboforum.ru/images/smilies/smile.gif)
А вот как это сделать? Я пытаюсь писать на баскоме
- Код: Выделить всё • Развернуть
Config Timer2 = Pwm , Pwm = On , Prescale = 1 , Compare Pwm = Clear Down
...
OCR2 = 28 'число для примера
И частота получается шибко низкая...
yak-40 » 27 окт 2009, 19:15
Баском не знаю
На Си всё просто. И частота 36 кГц не проблемма.
![Smile :)](http://roboforum.ru/images/smilies/smile.gif)
Yuraskas » 27 окт 2009, 20:04
А может, кто-нибудь из знатоков баскома еще не спит?
![Embarassed :oops:](http://roboforum.ru/images/smilies/blush.gif)
Так, мну пошкрёб в затылке и родил вот это:
- Код: Выделить всё • Развернуть
$asm
ldi R17,$1C '28
Out Ocr2 , R17
ldi R17,$19
Out Tccr2 , R17 'Режим "сброс при сравнении"
sbi DDRB,3
$end Asm
Пачки наверное надо делать задержками...Мну еще пошкрёб и родил следующее:
- Код: Выделить всё • Развернуть
Config Timer2 = Timer , Prescale = 1 , Compare = Toggle , Clear Timer = 1
Set DDRB.3
Ocr2 = 28
Stop Timer2
Do
Start Timer2
Waitus 559
Stop Timer2
Wait 3
Loop
Токмо, сообразить надо, как после пачки обнулять PB3..