Технический форум по робототехнике.
Егор » 01 окт 2007, 21:18
Вобщем есть идея некого устройства:
Порт контроллера настроен на прием. На ноги приходит какой-то сигнал. Мне нужно засечь какая нога дернулась и сколько времени был сигнал, и послать номер ноги и времы на компьютер. Проблема в том что могут дернутся одновременно несколько ног. Как этоможно реализовать?
Myp » 01 окт 2007, 21:36
в цикле опрашиваем все ноги по очереди
если какаята нога с сигналом то слудующие опросы считаем сколько времени эта нога под сигналом
когда надо отправляем по уарту на комп
время опроса всех ног оч маленькое так что точность будет вполне. особенно если частоту кварца побольше взять
цикл:
если нога 1 = 1 то прибавляем единичку в 1 буфер
иначе отправляем 1 буфер в комп и обнуляем
если нога 2 = 1 то прибавляем единичку в 2 буфер
иначе отправляем 2 буфер в комп и обнуляем
если нога 3 = 1 то прибавляем единичку в 3 буфер
иначе отправляем 3 буфер в комп и обнуляем
если нога 4 = 1 то прибавляем единичку в 4 буфер
иначе отправляем 4 буфер в комп и обнуляем
если нога 5 = 1 то прибавляем единичку в 5 буфер
иначе отправляем 5 буфер в комп и обнуляем
если нога 6 = 1 то прибавляем единичку в 6 буфер
иначе отправляем 6 буфер в комп и обнуляем
конец цикла.
это буит работать если время включения выключения не очень маленькое
тоесть время отправки буфера по уарту пренебрежимо мало
Егор » 01 окт 2007, 21:59
О спс. Только прийдется мучится - мне время в микросекундах нужно
Myp » 01 окт 2007, 22:12
хммм
тогда сложно
придётся отправку по уарту отложить
раскажи примерно скока импульсов будет в минуту какой длинны
наверно нуно делать тоже самое, тока не отправлять в цикле по уарту(во время отправки может случится ошибка)
а накапливать информацию в буферах
вобщем как в секундомере, записываем в буфер контрольные точки
например так:
включилась нога
считаем скока циклов
выключилась нога записали кол-во циклов в массив
считаем кол-во циклов с отключенной ногой
включилась нога нога записали количество циклов в массив
считаем количество циклов
реальное время цикла опроса всех ног определяем в симуляторе =)
в итоге в массиве будет ряд чисел
типа 100;20;387;65;356
отправляем их на комп и расшифровываем:
1 импульс был 100 микросекунд (потом 20 микросекунд пауза)
2 импульс начался в 120 микросекунду относительно нуля и продлился 387 микросекунд
3 импульс начался в 507 микросекунду (387+20+100) и продлился 65 микросекунд
и т.д.
хотя наверняка ктото тут предложит более элегантное решение
Егор » 01 окт 2007, 22:36
На каждую ногу в минуту где-то 25-35 импульсов, по 1-2 секунды длиной
Master » 01 окт 2007, 23:01
Вообще если я не ошибаюсь в МК есть такая вещь как таймер-счетчик и при подаче сигнала на ножку он сам начинает считать. Короч ща придет авр и пошлет накурс. Более подробно сказать не могу эту функцию ни разу не юзал.
Myp » 02 окт 2007, 09:35
Master писал(а):Вообще если я не ошибаюсь в МК есть такая вещь как таймер-счетчик и при подаче сигнала на ножку он сам начинает считать. Короч ща придет авр и пошлет накурс. Более подробно сказать не могу эту функцию ни разу не юзал.
ну там таймер есть конечно
но разве там на все 15 ног таймеров хватит??
вдруг там сразу все ноги сработают...
хотя... можно ведь извратится и обойтись всего одним...!!!
просто алгоритм зашифровки контрольных точек ещё усложнится...
не нафик, не буду я над этим думать
пусь автор топика думает =)
SSG » 02 окт 2007, 16:57
Таймеров маловато будет. В атмегах их тока до 4-х штук. Нужно более подробное ТЗ.
avr123.nm.ru » 02 окт 2007, 17:06
Егор писал(а):Вобщем есть идея некого устройства:
Порт контроллера настроен на прием. На ноги приходит какой-то сигнал. Мне нужно засечь какая нога дернулась и сколько времени был сигнал, и послать номер ноги и времы на компьютер. Проблема в том что могут дернутся одновременно несколько ног.
Как этоможно реализовать?
Периодический опрос порта и сравнение с прошлым результатом.
отправка в ПК это задача 5 курса - avr123.nm.ru/z5.htm
Егор » 13 окт 2007, 17:56
Вобщем написал я программу но почему-то не работает. То ли дело в программе толи хз. Вобщем если не сложно гляньте код мож че-то не то сделал. Код прикрепил.
Сделал так как предлагал Мур в первом посте.
- Вложения
-
car.c
- (5.49 КиБ) Скачиваний: 315
Myp » 13 окт 2007, 18:08
ыыыыыы
телепаты в отпуске
что не работает?
данные не отсылаются?
или может считает неправильно?
или вобще не считает?
или может мк не запускается?
ты в симуляторе то проверил???
если проверил то где именно не работает???
если не хочешь симулировать в vmlab
почему у тя не подсоединено ни одного отладочного светодиода??
хотябы в цикл поставь мигание 1 светиком чтоб быть увереным что мк вобще запустился и работает
второй светик поставь на срабатывание какогонить условия
Егор » 13 окт 2007, 18:17
На компьютер ничего не отсылается. Иногда посылает какие-то левые крокозябры, а не то что я написал.
Myp » 13 окт 2007, 18:38
а прога то вааще работает?
счего ты взял что у тебяя мк вобще что делает?
а фьюзы правильно выставил для твоей частоты??
ставь светодиод и дописывай мигание светодиодом каждый раз когда идёт отсылка данных
а вобще не парь мозги включай симулятор и смотри пошагово что у тя там происходит внутри
Егор » 13 окт 2007, 20:31
В ВМЛАБЕ все работает. А на практике нет
![Crying or Very sad :cry:](http://roboforum.ru/images/smilies/icon_cry.gif)
МК до конца цикла не доходит.
Егор » 14 окт 2007, 15:12
Если исключить из программы прием данным по RS-232 устройство начинает работать. Хелп где я неправильно описал прием