roboforum.ru

Технический форум по робототехнике.

 

Робомашинка

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Re: Робомашинка

Сообщение 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
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Робомашинка

Сообщение yak-40 » 25 окт 2009, 21:38

Yuraskas писал(а):(для экономии выводов) подключить все 4 ИК-диода на один выход с МК?

Так и надо делать. Только обязательно через транзистор, вывод МК четыре ИК-диода не потянет :)
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3019
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: Робомашинка

Сообщение Yuraskas » 26 окт 2009, 06:09

Вывод МК и одного может не потянуть. На модуле датчика стоит транзистор в цепи ик-диода, на базе резистор 1кОм.
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Робомашинка

Сообщение yak-40 » 26 окт 2009, 08:18

Yuraskas писал(а):Вывод МК и одного может не потянуть

Если до 20мА, то потянет :)
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3019
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: Робомашинка

Сообщение Yuraskas » 27 окт 2009, 18:33

Товарищи, подскажите, можно ли заюзать под сигнал для ИК-светодиода датчика препятствия ШИМ второго таймера? Где-то краем глаза слышал что кто-то делал, но как?
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Робомашинка

Сообщение galex1981 » 27 окт 2009, 18:40

Можно конечно! Обычный шим настраиваешь и все
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4360
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Робомашинка

Сообщение yak-40 » 27 окт 2009, 18:42

Можно. :)
Можно вообще без ШИМ-а обойтись. Пачку импульсов можно на любой ножке МК сформировать.
С другой стороны выход таймера конечно удобней, меньше ресурсов отнимает.
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3019
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: Робомашинка

Сообщение Yuraskas » 27 окт 2009, 18:57

yak-40 писал(а):Пачку импульсов можно на любой ножке МК сформировать

Вот у меня как раз пачка на любой ножке :) Но таймером - кошернее :)
А вот как это сделать? Я пытаюсь писать на баскоме
Код: Выделить всёРазвернуть
Config Timer2 = Pwm , Pwm = On , Prescale = 1 , Compare Pwm = Clear Down
...
OCR2 = 28 'число для примера

И частота получается шибко низкая...
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Re: Робомашинка

Сообщение yak-40 » 27 окт 2009, 19:15

Баском не знаю :(
На Си всё просто. И частота 36 кГц не проблемма. :)
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3019
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: Робомашинка

Сообщение Yuraskas » 27 окт 2009, 20:04

А может, кто-нибудь из знатоков баскома еще не спит? :oops:

Так, мну пошкрёб в затылке и родил вот это:
Код: Выделить всёРазвернуть
$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..
Ты приснись ей, ангел белый, пусть ей будет хорошо...
Аватара пользователя
Yuraskas
 
Сообщения: 119
Зарегистрирован: 20 июл 2009, 13:59
Откуда: Канск

Пред.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Mail.ru counter