Проект "Kapanda"
|
|
pashteet | Дата: Среда, 21.10.2009, 21:14 | Сообщение # 31 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Дык, ошибку я уже нашел ээээ, ну, это, я уже непомню, у кого-то научился таким выражениям Я имел в виду, можно ли как-то без использования встроенных таймеров сервой управлять?
|
|
| |
Space | Дата: Среда, 21.10.2009, 22:13 | Сообщение # 32 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Скорей нет, чем да. Добавлено (21.10.2009, 22:13) --------------------------------------------- а что за ошибка та была
|
|
| |
pashteet | Дата: Среда, 21.10.2009, 22:51 | Сообщение # 33 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Команда GetRc5 и Config Servos используют таймер0, а это невозможно одновременно, отсюда конфликт Поэтому возникла необходимость повесить серву на другой таймер, что у меня к сожалению пока не получается Благодаря galex1981 с робофорума, есть кое какие наброски кода: Code $regfile = "m32def.dat" 'используем мк ATmega32 $crystal = 8000000 'частота кварцевого резонатора 8MHz
'сервы поворота камеры Config Pinb.1 = Output : Hserv Alias Portb.1 Config Pinb.3 = Output : Vserv Alias Portb.3
'Переполнение таймера 2 (управление сервами) On Ovf2 Timisr Config Timer2 = Timer , Prescale = 1024 'выполняется каждые 8-9 мс Stop Timer2
Enable Interrupts Enable Timer2 Start Timer2
'Угол поворота горизонтальной сервы Dim Hs_grad As Byte
'Угол поворота вертикальной сервы Dim Vs_grad As Byte Hs_grad = 90 Vs_grad = 90
'Программа поворота вертикальной=1 или горизонтальной=2 сервы Declare Sub Povorot(byval Gradus As Byte , Byval Index As Byte)
Do Loop
'Переполнение таймера Timisr: Call Povorot(vs_grad , 1) Call Povorot(hs_grad , 2) Return
Sub Povorot(byval Gradus As Byte , Byval Index As Byte) Local A As Byte Local Temp As Word Temp = Gradus / 10 If Index = 1 Then Vserv = 1 If Index = 2 Then Hserv = 1 Waitus 500 For A = 1 To Temp Waitus 111 Next If Index = 1 Then Vserv = 0 If Index = 2 Then Hserv = 0 End Sub Но, повторюсь, пока безрезультатно, серва стоит на месте, можт ты че-нибудь подскажеш?
|
|
| |
Space | Дата: Среда, 21.10.2009, 23:02 | Сообщение # 34 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| Здесь уже извеняй. Ни чем к сожалению помочь не могу. Хотя.... но вариант может не понравится. Сделай это всё на двух мк. Допустим на тиньке н-р 2313 делаешь управление по RC5, кидаешь с тиньки на основной мк сигнальный провод и по этому проводу отсылаешь данные(только не знаю можно ли по одному проводу передавать данные, если нет, то можно передавать данные по I2C)
|
|
| |
pashteet | Дата: Среда, 21.10.2009, 23:15 | Сообщение # 35 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Эта хорошая идея! Темболее что Таня 2313 лежит в 2-х метрах от меня Только тогда придется осваивать I2C, а я еще тут далеко не совсем разобрался Добавлено (21.10.2009, 23:15) --------------------------------------------- Хотя, мне кажется, для многих былобы интересно ознакомится с шиной i2c можт кто заодно подтянется. Только опять же, скорее всего было бы умеснее использовать МК с меньшим кол-вом ног, или же взять в smd исполнении, если, конечно, такие имеются
|
|
| |
S-T-A-L-K-E-R | Дата: Суббота, 24.10.2009, 17:55 | Сообщение # 36 |
Язык программированя: Мурманская область
Зарегистрирован 11.06.2009
Группа: Модераторы
Сообщений: 367
Город: Никель
Статус: Offline
| pashteet, - Как вам редукторы таминья? Мощьные?
http://rassionrobots.ucoz.ru/ -"Робототехника"
|
|
| |
pashteet | Дата: Воскресенье, 25.10.2009, 12:37 | Сообщение # 37 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Да, очень! Если собрать 200:1 то оси руками не остановиш Кстати, сейчас делаю новые мозги, в силу выше изложенного решил сделать на двух МК, которые будут взаимодействовать между собой (пока на примитивном уровне, позже буду осваивать I2C) За вращение сервой и обработку данных от датчиков поверхности будет отвечать ATtiny2313, а прием RC5 команд будет осуществлять Мега8 или Мега48, так же она будет управлять маршевми двигателями и обрабатывать дальномер Первая версия вышла малец неудачной, сейчас делаю вторую, с учетом всех недостатков первой :)
|
|
| |
pashteet | Дата: Вторник, 27.10.2009, 15:30 | Сообщение # 38 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Закончил с новыми мозгами, вот что получилась: Контроллер расчитан на взаимодействие двух МК (мега48 и тинька2313) между собой по 4-м портам. Мега будет ведущей, отвечать за ШИМ двигателей, Rc5, работу АЦП дальномера, при этом по прерыванию на INT1 (PD3) будет обращать внимание на Тиньку, которая в свою очередь будет вертеть сервой и обрабатывать датчики поверхности (тоже по прерываниям). Тинька будет все время следить за результатами АЦП и если есть препядствие, то останавливать серву, как препядствие исчезло - востанавливать вращение с того же положения Вся рассыпуха выполнена на СМД компонентах и распаяна с обратной стороны платы (для минимизации размеров), так же на плате предусмотрено отключение какого-либо МК от питания (например если нужен будет только один) Теперь о неприятном: При загадочных обстоятельствах погибла Тинька, поэтому ее на фотке нема Жду степендию, пойду за новой Мега48 упорно отказывается работать с пультом Нивкакую не принимая его сигналы. Подумываю о замене 48-ой на 8-ую (опять же затраты ) Прилогаю код, которым пытался работать с Rc5: Code regfile = "m48def.dat" $crystal = 16000000
$lib "mcsbyte.lbx"
Config Rc5 = Pind.2
Enable Timer0
Config Pind.3 = Output : Led1 Alias Portd.3 Config Pind.4 = Output : Led2 Alias Portd.4 Config Pind.5 = Output : Led3 Alias Portd.5 Config Pind.6 = Output : Led4 Alias Portd.6 Config Pind.7 = Output : Led5 Alias Portd.7
Dim Address As Byte , Command As Byte Enable Interrupts
Do
Getrc5(address , Command) If Address <> 255 And Command <> 255 Then Command = Command And &B01111111 End If If Command = 1 Then Set Led1 Elseif Command = 2 Then Set Led2 Elseif Command = 3 Then Set Led3 Elseif Command = 4 Then Set Led4 Elseif Command = 5 Then Set Led5 Elseif Command = 6 Then Reset Led1 Elseif Command = 7 Then Reset Led2 Elseif Command = 8 Then Reset Led3 Elseif Command = 9 Then Reset Led4 Elseif Command = 10 Then Reset Led5 End If
Loop Может кто-нибудь посмотрит да подскажет (очень надеюсь)
|
|
| |
S-T-A-L-K-E-R | Дата: Вторник, 27.10.2009, 17:37 | Сообщение # 39 |
Язык программированя: Мурманская область
Зарегистрирован 11.06.2009
Группа: Модераторы
Сообщений: 367
Город: Никель
Статус: Offline
| Вотэто стремление. Скоро японцев обойдешь
http://rassionrobots.ucoz.ru/ -"Робототехника"
|
|
| |
pashteet | Дата: Вторник, 27.10.2009, 20:08 | Сообщение # 40 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| бгг, мнеб для начала лицензионную версию баскома, а то чет шняга какая-то получается, крякнутый баском непозволяет работать с Таймером 2 Да еще ко всему оказывается что на 48 меге таймер0 криво работает, как быть хрен его знает off Прям все против того, чтоб я МК занимался придется наверно обратно в автотюнинг уходить Добавлено (27.10.2009, 20:08) --------------------------------------------- Ребят отзовитесь, плиз, те, кто работал с Rc5 на меге8 или 88 (на Баскоме), нет там никаких проблем? Нормально работает? А то если и этот вариант непрокатит, то всякая охота отпадет микроконтроллерами заниматься
|
|
| |
Space | Дата: Вторник, 27.10.2009, 22:44 | Сообщение # 41 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| весьма симпотишно выглядит платка. Зачёт. Ждём её в работе Добавлено (27.10.2009, 22:44) --------------------------------------------- я те могу сказать точно работает RC5 на ATTINY2313. и работает очень даже хорошо, без глюков. а с остальным не знаю не пробовал. и посмотри статью по баскому. я там ссылку выкладывал где можно скачать баском нормальный.
|
|
| |
pashteet | Дата: Вторник, 27.10.2009, 23:08 | Сообщение # 42 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| Проверь пожайлуста у себя работу таймера 2, на любом контроллере: Code Config Rc5 = Pind.2 [ , Timer = 2] именно в работе, а то у меня компилируется без ошибок, а работать нехочет
|
|
| |
Space | Дата: Вторник, 27.10.2009, 23:13 | Сообщение # 43 |
Зарегистрирован 25.12.2007
Группа: Администраторы
Сообщений: 1103
Статус: Offline
| я б с радостью, но нету ик-приёмника
|
|
| |
pashteet | Дата: Среда, 28.10.2009, 14:27 | Сообщение # 44 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| хорошо, тогда проверь на сервах: Code Config Servos = 1 , Servo1 = Portc.2 , Reload = 12 , Timer = Timer2 Я посмотрел ту версию (1.11.9.0) у меня стоит 1.11.9.5 крякнутая, результат тотже, в упор нехочет работать со 2-м таймером, если есть еще какие-нибудь способы проверить, то буду очень рад, а то какой-то половинчатый МК получается Добавлено (27.10.2009, 23:25) --------------------------------------------- Почитал форум, вроде разобрался от чего Таня умерла. Говорят, что если, при втыкании разьема, сначала коснутся контакты программирования, а потом земля, то МК может не пережить. Поэтому сначала надо втыкать МК в программатор, а потом программатор в комп, а я злился (от того, что нихрена не получается) и начал просто так дергать МК туда сюда, невытаскивая прогер из компа, видать придется использовать Тиньку в декоративных целях Добавлено (28.10.2009, 14:27) --------------------------------------------- Разобрался с Мегой 48, оказывается допустил ошибку на печатке руки не из правельного места растут Теперь все работает! Подскажите фузи биты для Тиньки 2313 для работы с кварцем 8МГц, чет мне кажется, что я первую именно фузами запорол
|
|
| |
pashteet | Дата: Четверг, 29.10.2009, 11:40 | Сообщение # 45 |
Зарегистрирован 21.09.2009
Группа: Новички
Сообщений: 225
Город: Волжский
Статус: Offline
| вот такой драйвер двигателей на днях замастырил: Добавлено (29.10.2009, 11:40) --------------------------------------------- Сейчас занимаюсь настройкой ADC Space, посмотри пожайлуста видюху! У тебя такого небыло? Смысл в том, что при подъезде к препядствию загараются светодиоды, крайний левый говорит о том, что препядствие близко. Но если смотреть дальномером в пустоту, то всегда горит крайний левый Прилогаю код, которым пытаюсь замучить ADC Code $regfile = "m48def.dat" $crystal = 16000000
Config Adc = Single , Prescaler = Auto , Reference = Internal
Config Pind.3 = Output : Led1 Alias Portd.3 Config Pind.4 = Output : Led2 Alias Portd.4 Config Pind.5 = Output : Led3 Alias Portd.5 Config Pind.6 = Output : Led4 Alias Portd.6 Config Pind.7 = Output : Led5 Alias Portd.7
Dim I As Integer Dim Vout As Word
Enable Interrupts
Do
Start Adc
Vout = Getadc(5) Waitms 20
Stop Adc
If Vout < 700 Then : Set Led1 Elseif Vout < 750 Then : Set Led2 Elseif Vout < 800 Then : Set Led3 Elseif Vout < 820 Then : Set Led4 Elseif Vout > 820 Then : Set Led5 End If
Waitms 10
Reset Led1 Reset Led2 Reset Led3 Reset Led4 Reset Led5
Loop
End
|
|
| |
|