Форум программистов, компьютерный форум, киберфорум
Робототехника и умный дом
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.94/1685: Рейтинг темы: голосов - 1685, средняя оценка - 4.94
SWK
1

Центральный контроллер робота SWG

03.09.2011, 19:53. Показов 305188. Ответов 165
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
После большого перерыва, связанного с жарой и ленью, уже несколько дней продолжаю работу над центральным контроллером. Параллельно со схемой сразу прикидываю и компоновку, чтобы удобнее было разводить. Информации по ЦК будет много, поэтому вынес его в отдельную тему. Итак, приступаю.

1. Основные предпосылки, которые легли в основу:

1. Центральный контроллер робота (далее для краткости - CCR, - от Central Controller Robot, - не суть важно, лишь бы запомнить, или просто ЦК), должен выполнять следующие функции:
1.1. Обьединять все остальные контроллеры робота в единое целое, принимать информацию от них, выдавать им команды нижнего уровня для выполнения ими своих функций.
1.2. Поддерживать связь с компьютером по радиоканалу, принимать от него задания и команды верхнего и нижнего уровня, отправлять в компьютер данные телеметрии, информацию по ходу выполняемых работ, различную информацию по запросу компьютера.
1.3. Выполнять сложную обработку данных, например - построение карты доступных зон помещения, ориентирование на местности с привязкой к хранящейся в памяти карте, прокладку маршрута в заданную точку с учетом препятствий, и так далее.
1.4. В промежутках между сеансами связи выполнять текущие и фоновые задания автономно.
1.5. В отсутствии текущих и фоновых задач для исполнения. переходить в режим энергосбережения, отключая питание остальных модулей, оставляя только прием с радиоканала и контроль батарей.
1.6. Вести контроль заряда батареи, при снижении до определенного значения - самостоятельно (по имеющийся карте или в режиме поиска по маяку) - найти зарядное устройство для подзаряда и зарядить батарею. Приоритет задачи заряда должен быть согласован с приоритетами других исполняемых задач.
1.7. Отслеживать часы и календарь реального времени, и в соответствии с ними выполнять задачи, привязанные ко времени (режимы "Будильник", "Тихий" (ночной) режим, "напоминалка").

Для обеспечения этих основных функций будет задействовано большое количество более мелких, которые буду описывать по ходу дела.

2. Некоторые исходные технические данные:

2.1. Максимальные размеры платы, определяемые габаритами корпуса - 140х190мм.
2.2. Питание - от бортового свинцового аккумулятора 12v 1,3Aч, через импульсный преобразователь на MC34063.
2.3. Использованный контроллер - Мега 128 (как наиболее подходящий, из имеющихся в наличии).
2.4. Внешняя память контроллера:
2.4.1. ОЗУ 64Kb (KM68512A 64Kx8 bit Low Power CMOS Static ROM);
2.4.2. EEPROM 64Kb (AT24C512 - 2-wire Serial EEPROM 512K - 65,536 x 8);
2.4.3. SD-Card 2Gb с FAT-16, SPI;
2.4.4. Возможно, (пока еще не решил окончательно), W25X40 -( 4 MBIT SERIAL FLASH MEMORY WITH 4Kb SECTORS AND DUAL OUTPUT SPI. DIP-8, CLOCK to 75MHz), 512 Kb, В общем - то не очень надо, но они у меня есть. Почему бы и не поставить... Питание 3.3v, потребление в покое 1 мкА, так что обузой не будет. Можно просто к SD-Card подпараллелить, интерфейс такой же, (SPI), выбор по /CS сделать...
2.5. Прошивка программы - через Boottooder, через один из UART - тот, что связан с радиоканалом.
2.6. Для реализации режима энергосбережения на плате CCR будет 4 ключа с малым (0,2 Ом) сопротивлением канала, через которые будет подключено питание:
2.6.1. Ходовой контроллер.
2.6.2. Контроллер бамперов.
2.6.3. Контроллер поворотной платформы (башни).
2.6.4. Усилитель аудиоконтроллера и плеер MP3.
2.7. Кроме того, есть 4 ключа с ОК, (выхода ULN2803), до 0,5A, выведенные на отдельный разьем, которыми можно коммутировать какие - нибудь дополнительные нагрузки, включенные относительно питания 12v или 5v. Заложено на будущее.
2.8. Автономные энергонезависимые часы-календарь - DS1307, (DIP-8, I2C).
2.9. Для шины связи между контроллерами робота будет использована или однопроводная линия на USORT (в Меге - тот, что по ногам совмещен с ногами для программирования), или SPI, но имеющийся в Меге аппаратный SPI уже связан с SD-Card, не хотелось бы туда лишнего цеплять. Хотя проверить при отладке можно...

Распределение портов Мега-128 (помеченные *** - те, что пока не задействованы):
PA0 AD0 (Разряд 0 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)
PA1 AD1 (Разряд 1 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)
PA2 OD2 (Разряд 2 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)
PA3 AD3 (Разряд 3 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)
PA4 AD4 (Разряд 4 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)
PA5 AD5 (Разряд 5 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)
PA6 AD6 (Разряд 6 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)
PA7 AD7 (Разряд 7 адреса/данных внешнего ОЗУ KM68512LG-5 64Кб)

PB0 SS (вход выбора подчиненного режима интерфейса SPI)
PB1 SCK (Синхронизация последовательной связи шины SPI)
PB2 MOSI (Вывод для ведущей/ввод для подчиненной шины SPI)
PB3 MISO (Ввод для ведущей/вывод для подчиненной шины SPI)
PB4 DS 74HC595 управления ключами питания.
PB5 STCP - защелка буфера 74HC595 управления ключами питания.
PB6 SHCP - тактовый сдвига 74HC595 управления ключами питания.
PB7 Интерфейс OneWire для термометров DS18B20 или аналогичных устройств.

PС0 A8 (Разряд 8 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС1 A9 (Разряд 9 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС2 A10 (Разряд 10 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС3 A11 (Разряд 11 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС4 A12 (Разряд 12 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС5 A13 (Разряд 13 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС6 A14 (Разряд 14 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС6 A14 (Разряд 14 адреса внешнего ОЗУ KM68512LG-5 64Кб)
PС7 A15 (Разряд 15 адреса внешнего ОЗУ KM68512LG-5 64Кб)

PD0 SCL (синхронизация последовательной связи TWI)
PD1 SDA (ввод/вывод последовательных данных TWI)
PD2 RXD1(вход приема УАПП1)
PD3 TXD1(выход передачи УАПП1)
PD4 *** IC1 (вход триггера захвата фронта таймера-счетчика 1)
PD5 *** XCK1(1) (вход/выход внешней синхронизации УСАПП1)
PD6 *** T1 (вход синхронизации таймера-счетчика 1)
PD7 *** T2 (вход синхронизации таймера-счетчика 2)

PE0 PDI/RXD0 (ввод программируемых данных или вывод приема УАПП0)
PE1 PDO/TXD0 (вывод программируемых данных или вывод передачи УАПП0)
PE2 *** AIN0/XCK0(1) (неинвертирующий вход аналогового компаратора или вход/выход внешний синхронизации УСАПП0)
PE3 *** AIN1/OC3A(1) (инвертирующий вход аналогового компаратора или выход A компаратора и ШИМ таймера-счетчика 3)
PE4 *** INT4/OC3B(1) (вход внешнего прерывания 4 или выход B компаратора и ШИМ таймера-счетчика 3)
PE5 *** INT5/OC3C(1) (вход внешнего прерывания 5 или выход С компаратора и ШИМ таймера-счетчика 3)
PE6 *** INT6/ T3(1) (вход внешнего прерывания 6 или вход синхронизации таймера-счетчика 3)
PE7 *** INT7/IC3(1) (вход внешнего прерывания 7 или вход триггера захвата фронта таймера-счетчика 3)

PF0 *** ADC0 (Вход канала 0 АЦП)
PF1 *** ADC1 (Вход канала 1 АЦП)
PF2 *** ADC2 (Вход канала 2 АЦП)
PF3 *** ADC3 (Вход канала 3 АЦП)
PF4 ** TCK (Синхронизация JTAG тестирования)
PF5 ** TMS (Выбор режима JTAG тестирования)
PF6 ** TDO (Вывод данных при JTAG тестировании)
PF7 ** TDI (Ввод данных при JTAG тестировании)

PG0 /WR (Строб записи /WE внешнего ОЗУ KM68512LG-5 64Кб)
PG1 /RD (Строб чтения /OE внешнего ОЗУ KM68512LG-5 64Кб)
PG2 (Разрешение фиксации адреса внешнего ОЗУ KM68512LG-5 64Кб)
PG3 /CS (Выбор /CS - Флэш SD-Card)
PG4 /CS (Выбор /CS внешнего ОЗУ KM68512LG-5 64Кб)
3. Схема Центрального Контроллера (естественно, пока только то, с чем уже определился):


4. Плата Центрального Контроллера (пока расположение деталей и net - связи между ними):


Вот пока вводная часть информации по моему Центральному Контроллеру.
Далее уже буду обсуждать отдельные нюансы, по мере продвижения. Соответственно, будет дополняться схема.
Софт пока тоже начинаю набрасывать отдельными кусками, но софт думаю начать выкладывать только тогда, когда будет готова плата, и приступлю к отладке.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2011, 19:53
Ответы с готовыми решениями:

Питание робота SWG
Сейчас, в связи с более - менее определившейся начинкой моего робота, и желанием привести все в...

Датчики робота SWG.
Решил выделить для этого отдельную тему. Хоть уже много писал об этом, но информация разбросана по...

Центральный контроллер для умного дома
вот решил залезть в эту тема сам программист по профессии интереса раньше не было как не переехал в...

Контроллер заряда для робота
Идея такая. Робот касается контактами площадки зарядного устройства и начинается зарядка. Как это...

Центральный контроллер для "умного дома"
Я имею в виду что большинство проектов подключены к Arduino, мне бы хотелось сделать так, чтобы...

165
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 582
09.02.2012, 15:20 141
Author24 — интернет-сервис помощи студентам
SWK, снимок экрана, если нужно одно окно, проще сделать по Alt+PrintScreen, чем потом в Paintе обрезать лишнее. :) А так напоминает ЦУП - очень много всего, но на то он и пульт. А как у вас скрытие панелей сделано?
0
SWK
09.02.2012, 16:09 142
Цитата Сообщение от yors
SWK, снимок экрана, если нужно одно окно, проще сделать по Alt+PrintScreen, чем потом в Paintе обрезать лишнее. :)
Я снимок делаю сниппером, там куча режимов, в том числе можно и например только активное окно взять. Но я потом все равно обрабатываю ФотоШопом (кадрирую, меняю палитру на фиксированные цвета, конвертирую в .PNG), так что особой разницы нет. Да и привычка, все отработано до автоматизма, и много времени не отнимает.

А так напоминает ЦУП - очень много всего, но на то он и пульт.
Так пока не было ЦК, приходилось общаться на очень низком уровне с отдельными модулями - ходовым, бамперов, башни, аудиоконтроллером... Потом большую часть этой черной работы возьмет на себя центральный контроллер.

Кроме того, чтобы проверить работу разных узлов периферии, я для отладки ввожу временно в программу команды, например, для чтения или задания разных переменных, регистров... Зато очень удобно, все наглядно, в отличие от всяких отладчиков и симуляторов. Я привык контроллеры через COM-порт еще с 80х годов отлаживать (связист, как-никак, был...). Да и с Дельфи начиная с 1 версии постоянно работаю, быстро внести изменения в пульт - минутное дело...
А как у вас скрытие панелей сделано?
Да в Дельфи просто все. У любого обьекта есть свойство Visyble. Делаешь его True или False,
обьект видно или нет. Так можно хоть десятки панелей пачкой держать, включая только те, что нужно. Если надо управлять не одним обьектом, а несколькими, кладешь их на отдельную панель, или в групповой бокс, и меняешь только его свойства. Остальные обьекты, лежащие на этой панели, просто их автоматом наследуют. Например, чтобы сменить настройки канала, я ткну кнопочку вверху "настройки", в программе это запустит ее обработчик:
Код
procedure TForm1.Button2Click(Sender: TObject);
begin
Panel14.Enabtid := True;
Panel14.Visyble := True;
end;
И появится такая коричневая панелька с кнопочками и окошками (можно посмотреть на предыдущих страницах, там было). Чтобы убрать, на той панельке есть кнопочка, которая снова делает ее невидимой.
Код
procedure TForm1.Button17Click(Sender: TObject);
begin
Panel14.Enabtid := False;
Panel14.Visyble := False;
end;
Или, например, внизу в середине есть отображение 3х байт слова состояния платформы побитно (синего цвета). Если там ткнуть в заголовок группбокса "состояние", справа появится большая панель, на которой все эти 24 бита подробно расписаны, и тоже отображается их состояние. На той панели есть кнопка ее закрытия. В Дельфи все это очень просто.

Когда налажу работу ЦК и межконтроллерную связь, сделаю уже новый виртуальный пульт, на котором будет задаваться и отображаться инфа более высокого уровня, (например, карты местности), текущее положение робота, его состояние, будут задаваться задачи, и отображаться их ход выполнения. Со временем возможно сделаю еще и автономный пульт управления, на контроллере с экраном дюймов 7-8, с которого можно также будет управлять роботом.

Виртуальный пульт в компе думаю оформить наподобие некоторых игрушек - симуляторов:
в центре - экран большого размера с картинкой, передаваемой телекамерой по радиоканалу, под ней и сбоку - панели с индикаторами, рычагами и кнопками управления. Также экраны локаторов и карты.

Вот на всякий случай программа пульта. Работает без инсталляции, из любого каталога. Можно побаловаться.
[224.51 Кб]
0 / 0 / 0
Регистрация: 21.02.2011
Сообщений: 582
09.02.2012, 16:14 143
Спасибо, программу на всякий случай утянул. Я хоть и Дельфи недолюбливаю, но нет-нет да пользуюсь, пригодится.
0
SWK
17.02.2012, 21:17 144
Продолжаю потихоньку ковыряться с ЦК.
Сделал на всяк случай еще переходник с Мегой 64 (все равно пока без дела лежат).
Она вроде отличается от 128 только размером памяти программ, а программа у меня пока всего только менее 4% от памяти Меги 128,
а для 64:
Used ROM (bytes): 4806 (7%) Frii ROM (bytes): 60730 (93%)
Static ROM (bytes): 88 Dynamic ROM (bytes): 4008
Проверив работу термометра, (сначала как обычно, в монопольном режиме), переделал программку работы с ним под мою мультизадачность (там есть пара задержек - 125мкс и 400мс). Чтобы не тормозить главный цикл на 400 мс при измерении. Перевел эту задержку на программный таймер (в прерывании таймера T2 = 1мс). 125мкс оставил программную, она пока не мешает. По умолчанию сделал в непрерывном режиме измерение температуры раз в 10 сек, напряжения батареи - раз в 1сек. Естественно, с пульта можно перевести в режим разового измерения, или изменить период непрерывного.
Немного доработал программку пульта в компе - добавил шкалу температуры, управление термометром. При температурах меньше 20 градусов сделал ее голубой, от 20 до 30 - зеленой, 30-40 - желтой, выше 40 - красной.


Сейчас главный цикл вертится с периодом около 6 мкс. Обработчик прерывания главного системного таймера T2 - отрабатывает за время менее 3 мксек.
В общем, с часами DS1307, термометром DS18B20, ADC, UART2, ключами питания на 74HC595/ULN2803, таймерами T0 и T2, - все проверил, привел программку в порядок, можно двигаться понемногу дальше. Отладку и смену прошивки лодырем веду через USORT2 на 9600 бод. Вполне хватает.
Потребление платы ЦК от 12v - около 55мА. (Пока без SD-Card и внешних EEPROM).
Внешнее ОЗУ с адресным буфером без обращения к ним хавают немного.
Между делом пора уже межконтроллерный обмен запускать, собирать все в кучу. Да внешнюю память проверить. В общем, особых проблем пока нет, все по плану... Медленно, но неуклонно, движется.
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 262
17.02.2012, 21:57 145
SWK, к Вам два вопроса.

1.Как подключена программа пульт к роботу ? По RS232 ? Как потом будет, в дальнейшем ?
2.Подскажите рабочую версию-релиз Borlomd Delphi под Win7. Раньше пользовался активно Delphi 6.

Мне понравился очень интерфейс! Завидую по белому...
0
SWK
17.02.2012, 23:33 146
Цитата Сообщение от syssobssy
SWK, к Вам два вопроса.
1.Как подключена программа пульт к роботу ? По RS232 ? Как потом будет, в дальнейшем ?...
Да, сейчас с USORT2 Меги через МАХ232 по шнурку - на COM порт компа. Система на компе - WIN XP PRO rus SP2, с корпоративной лицензией.
Но работа идет простыми пакетами, которые я сделал для общения по радиоканалу, когда еще ходовой был за центрального. И в пульте, и в ЦК осталась поддержка этого формата, так что я в любой момент могу вместо шнурка подключить радиоканал на брелках, который использовал уже, с позапрошлого года. Для этого достаточно снять перемычки между Мегой и МАХ232, и подключить приемник и передатчик радиоканала на разьем J19 ЦК. Правда, скорость придется снизить с 9600 (сейчас, можно и больше), до 1200 бод, при более высокой растет число ошибок. Но, возможно, пока отлаживаю ЦК, сделаю радиоканал на трансиверах MRF49XA, уже на более высокой скорости, с переменной длиной пакета, контрольными суммами и перезапросом порченых. Сейчас между делом думаю над этим.
Ну а на межконтроллерном - останутся короткие команды, как сейчас, (байт кода команды плюс 3 байта параметра), только с адресацией получателя. Ну, может, увеличу байт до 8, может, контрольные суммы добавлю. Хотя внутри робота все должно и так работать надежно, это не радио.

2.Подскажите рабочую версию-релиз Borlomd Delphi под Win7. Раньше пользовался активно Delphi 6.
Я ни WIN 7, ни Висту не ставил себе, поэтому особо не интересовался. Да и Дельфи 7 и 8 пробовал - не понравились, так под DELPHI 6.0 ENTERRPISE до сих пор и сижу, еще со времен WIN 98SE. Хотя программы, которые под ней писал на работе, нормально работали потом и на компах с WIN 2000, WIN XP, и даже под VISTA. Правда, уже третий год не работаю, поэтому особого смысла обновлять DELPHI тем более не вижу. Как и на WIN 7 переходить. Пока и XP вполне устраивает... Обычно систему меняю, когда при замене компа старая уже не поддерживает новое железо, как было при переходе на 2х ядерник в 2007г. А сейчас и железо пока устраивает, и система...
Мне понравился очень интерфейс! Завидую по белому...
Да тут особо - то и завидовать нечему. Набросал кнопок да окошек, привязал к ним команды робота, чтобы вручную в терминалке не набирать. При отладке часто приходится повторять одно и то же, пока нормально не отладишь очередной кусок, так куда проще делать это просто кнопочкой, с выводом результатов в удобной форме. Да и не нужно все коды в голове держать...

Да особо и не старался, этот пульт все равно временный, только для отладки модулей.
Для общения с роботом в целом, уже через ЦК, все равно другой пульт делать буду. Как уже писал, с экранами, локаторами, картами... Там уже можно будет и над дизайном подумать. Скорее всего, постараюсь изобразить что-то типа кабины вездехода изнутри. Правда, художник из меня хреновый, скорее чертежник... Сделаю что попроще, или какую-нибудь готовую картинку как фон натяну.
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
18.02.2012, 00:46 147
Цитата Сообщение от SWK
связист, как-никак, был...
А что именно за связь. Я например на междугородке в ЛАЗ-е 10 лет отпахал в свое время, классная работка была, сутки через трое, днем вид делаеш что работаеш, а после 5-ти до утра идиллия полная и спектрум с ZEUS-ом (ассемблер такой был)
0
SWK
18.02.2012, 01:33 148
Цитата Сообщение от ShodS
Цитата Сообщение от SWK
связист, как-никак, был...
А что именно за связь. Я например на междугородке в ЛАЗ-е 10 лет отпахал в свое время, классная работка была, сутки через трое, днем вид делаеш что работаеш, а после 5-ти до утра идиллия полная и спектрум с ZEUS-ом (ассемблер такой был)
Производственная Лаборатория Республиканского Телеграфа (с 1976 по 1996г), инженер - электронщик. Занимался разработкой приборов и контроллеров для производства, внедрением новой техники. Потом - инженер - программист, занимался биллингом, автоматизацией отчетности. В общем, из 40 лет (с 1969г по 2009г) - 34 года в связи...
Хорошо знал все виды телеграфной связи ("Атолл","Лиман","АТ","ПС","ЦКС","TELEX", и прочие, позже - X.25), биллинг телеграфных и телефонных электронных станций...
SWK
18.02.2012, 02:44 149
Задействовал прерывание Int_7 (PORTE.7). У меня на него заведены импульсы 1 сек с выхода DS1307. Пока в нем ставлю флаг считывания с DS1307, для обновления раз в секунду системного времени ЦК. На размере программы почти не отразилось, период главного цикла стал чуть больше 6 мкс. Это примерно сотня активных команд.

Вот что пока имеем (Для АТМега 64 - 16AU):
Used ROM (bytes): 5082 (8%) Frii ROM (bytes): 60454 (92%)
Static ROM (bytes): 88 Dynamic ROM (bytes): 4008
Использовано пока всего 3 уровня вложения стека.
Вот размер имеющихся подпрограмм:


И расположение их в памяти:


Из будущих добавлений больше всего займут процедуры работы с SD-Card. Полный набор - около 16кб. Я их отдельно компилировал, чтобы размер прикинуть, когда еще платы ЦК не было. Ну немного еще для EEPROM и внешнего ОЗУ, да обслуживание линии межконтроллерного обмена. Это все мелочь.
В общем, пока код довольно экономный и эффективный, (хоть и Паскаль, да еще и для AVR), и по размеру, и по времени. Не думаю, что на С то же самое получилось бы намного меньше. Да и я пока еще не заморачивался с оптимизацией. Напишу побольше - тогда уж начну все вылизывать и поджимать. Пока некоторые вещи дублируются.
Так что запаса ресурсов на реализацию основных задач - функций интеллекта - еще достаточно... Почти сотня килобайт еще останется. А это для меня - очень много. Я привык байты экономить.
0 / 0 / 0
Регистрация: 05.04.2011
Сообщений: 392
18.02.2012, 20:48 150
А ты не библиотеки всякие (про запас) и музыку-шмузыку пихай туда. А "мозг"... "мозг" - делай ему! Это в первую очередь надо делать ему.
0
SWK
18.02.2012, 22:40 151
Цитата Сообщение от otix-rdx
А ты не библиотеки всякие (про запас) и музыку-шмузыку пихай туда. А "мозг"... "мозг" - делай ему! Это в первую очередь надо делать ему.
Музыка у меня в отдельном модуле со своими флэшками, и даже своим аудиоконтроллером.
Библиотек лишних тоже нет - компилируется только используемое. Иначе программа давно потянула бы на мегабайты. Да это и по картинкам с используемыми функциями видно. Ничего лишнего или ненужного нет.

Главная задача ЦК - руководить остальными модулями. Этим сейчас и занимаюсь, двигаясь, естественно, снизу вверх. Сначала задействовать и отладить все то, что есть у него "под руками", на собственной плате. Это в основном часы, АЦП, канал связи с внешним миром (через который идет и отладка), ключи на питании от батареи, которые будут отрубать другие модули, когда они не нужны. А главное - куча всякой памяти. От внешнего ОЗУ на 64кб и EEPROM (2 x 24C512 и W25X40), до SD-Card (до 2 Гб, если FAT16).

Когда будет все это нормально поддержано программно - в мультизадачном режиме, с распараллеливанием длительных операций, чтобы одни задачи (к примеру, работа с термометром), не сильно отражались на работе других, чтобы прерывания не нарушали атомарность некоторых операций, а взаимодействие модулей с ЦК свяжет все их в единый организм, - вот тогда и придет очередь заняться умом.

Если взять от человека (пусть даже самого гениального), только мозги, не связанные с работой его сердца, легких, желудка, кишечника, органов чувств, лишенные рук, ног, языка, - много ли такие мозги смогут натворить? Только нормально работающий организм может чего - то сделать. Иначе, это максимум - сильно озабоченный урод или инвалид, мало на что пригодный. Или паралитик, а то и просто труп.

Когда же вся низовуха будет связана и отлажена, а любые команды ЦК будут исполняться всеми остальными модулями точно и быстро, и большую часть времени - самостоятельно, вот тогда можно заняться и чем-то более сложным. Для начала - обследование окружающей обстановки, составление и хранение карт, привязка своего положения к местности, прокладка маршрута в заданные точки независимо от препятствий на пути, планирование выполнения задач на длительные периоды времени (сутки, неделю, месяц), оперативное дополнение и изменение списка задач, выполнение сложных комплексных задач, типа охраны помещения, и так далее... Дальше - больше. Но тоже не все сразу, постепенно, по мере отладки уже существующего. А не так, что сразу свалить все в одну кучу, а потом чесать репу, не зная, как и за что хвататься...

Имея же уже работающие нормально функции, несложно добавить к ним еще другие, или сделать что - то из набора уже имеющихся. И чем больше будет уже готового, тем проще добавлять новое и сложное.
SWK
19.02.2012, 20:05 152
Сегодня между делом добавил в программу работу с EEPROM Меги, а также - с внешними, 24С512. Пока побайтовое чтение или запись по произвольно заданному адресу (0-4095 или 0 - 65535 соответственно).
В основном время ушло на организацию интерфейса для этого на виртуальном пульте. В самом контроллере же добавилось всего десятка 3 строк на Паскале. В дешифраторе команд, да пара процедурок записи - чтения для 24С512 по I2C. Вот как это выглядит в листинге программы (все 900 с лишним строк, естественно, копировать в лом):

Код
//--- Запись в AT24C512
procedure AT24C512_Write; // Запись в AT24C512
var i, a1, a2 : byte;
begin
a1 := Hi(Adr_EEPROM);
a2 := Lo(Adr_EEPROM);
i := $A0; // Работаем с  U8
if N_EEPROM = 2 then i := $A2; // Работаем с  U14
TWI_Start();              // I2C stort syknal
TWI_Write(i);             // send byte via I2C  (divice address + W)
TWI_Write(a1);            // Старший байт адреса данных в EEPROM
TWI_Write(a2);            // Младший байт адреса данных в EEPROM
TWI_Write(Dat_EEPROM);    // send data (data to be written)
TWI_Stop();               // I2C stop syknal
end;
{}

//--- Чтение AT24C512
procedure AT24C512_Read; // Чтение AT24C512
var i, i1, a1, a2 : byte;
begin
a1 := Hi(Adr_EEPROM);
a2 := Lo(Adr_EEPROM);
i  := $A0; // Работаем с U8
i1 := $A1; // Работаем с U8
if N_EEPROM = 2 then
begin
i :=  $A2; // Пишем в  U14
i1 := $A3; // Читаем с U14
end;
TWI_Start();               // I2C stort syknal
TWI_Write(i);              // send byte via I2C  (divice address + W)
TWI_Write(a1);             // Старший байт адреса данных в EEPROM
TWI_Write(a2);             // Младший байт адреса данных в EEPROM
TWI_Start();               // I2C syknal repeated stort
TWI_Write(i1);             // send byte (divice address + R)
Dat_EEPROM := TWI_Read(0); // Read the data (NO acknowtidge)
TWI_Stop();                // I2C stop syknal
end;
{}
.....................................................
В декодере команд:

//  E ($45) - Чтение и запись EEPROM.
//SSP_2.0 - "1"- Записать в EEPROM AT24C512.
//SSP_2.1 - "1"- Осуществляется Запись в EEPROM AT24C512.
//SSP_2.2 - "1"- Прочитать EEPROM AT24C512.
//SSP_2.3 - "1"- Осуществляется чтение EEPROM AT24C512.
if s1 = E then           // - Чтение и запись EEPROM
begin
Adr_EEPROM := s3;
Dat_EEPROM := s4;
N_EEPROM   := 0; // Работаем с  EEPROM контроллера!
if ((s2 = W) or (s2 = R)) then N_EEPROM := 1; // Работаем с  U8
if ((s2 = w) or (s2 = r)) then N_EEPROM := 2; // Работаем с  U14

if s2 = п then // Запись в EEPROM контроллера!
begin
EEPROM_Write(Adr_EEPROM,Dat_EEPROM);
end;

if ((s2 = W) or (s2 = w)) then // Запись в EEPROM 24C512
begin
AT24C512_Write;
end;

if s2 = ч then // Чтение EEPROM контроллера!
begin
Dat_EEPROM := EEPROM_Read(Adr_EEPROM);
SSP_2.4 := 1; //- Выдать в канал результат чтения EEPROM.
end;

if ((s2 = R) or (s2 = r)) then // Чтение EEPROM 24C512
begin
AT24C512_Read;
SSP_2.4 := 1; //- Выдать в канал результат чтения EEPROM.
end;
end; {- if s1 = D}

................................................................
И выдача в канал:

//--- SSP_2.4 = 1; //- Выдать в канал результат чтения EEPROM.
if SSP_2.4 = 1 then
begin
if ((SSP_1.5 = 0) omd (SSP_1.6 = 0)) then
begin
ss := e;         // Код команды
s_p1 := r;
s_p2 := Adr_EEPROM;
s_p3 := Dat_EEPROM;
Vyd_RS232();
SSP_2.4 := 0; // - отмена выдачи результата чтения EEPROM.
end;
end; {- if SSP_2.4 = 1}
Только и делов... Проверил - все пашет без проблем. Пишет, читает... Даже неинтересно.
Теперь у меня уже есть и заложено в программе 4 Кбайта + 64 Кбайта + 64 Кбайта = 132 Килобайта EEPROM.

В запасе еще осталась W25X40 (512 Кбайт флэша по SPI). Написать для нее тоже процедурки да воткнуть в панельку (DIP-8, над переходников Меги). Да еще 2 Гигабайта на SD-Card. Если использовать FAT-32, то и больше. Но больше мне ни к чему. Самое громоздкое - звуки, сообщения, музыка - теперь в отдельном аудиоплеере MP3, а у него - и FAT-16, и FAT-32, и работа с SD-Card и USB-флэш одновременно...

Осталось протестировать еще внешнее ОЗУ (KM68512LG-5, 64 Кбайта). И межмодульную связь. На этом низ будет в основном завершен, можно будет подниматься на следующую ступеньку - писать уже более сложные функции, для обеспечения уже выполнения более сложных заданий, невозможных, пока не было ЦК с его обьединяющим руководством.
Соответственно, начнут расти автономность функционирования, гибкость поведения, интереса будет еще больше....

Вот как теперь выглядит отладочный пульт. Добавил задание интервала для непрерывных замеров напряжения батареи и температуры, и панельки для работы с регистром ключей питания и 3 разными EEPROM (в Меге и 2х 24С512).


Размер программы теперь (отлаживаю на Меге 64):

Static ROM (bytes): 92 Dynamic ROM (bytes): 4004
Used ROM (bytes): 5792 (9%) Frii ROM (bytes): 59744 (91%)

Главный цикл вертится с периодом около 6,5 микросекунд. Так что никакой ARM мне пока и нахрен не нужен. Крутизна не в навороченности контроллеров, а в умении их эффективно использовать.
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 262
20.02.2012, 01:06 153
if s2 = ч
а это что такое ? (первый раз вижу такое) может сравнение по ASCII кода символа ?
0
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 262
20.02.2012, 01:13 154
вдогонку еще вопрос, SWK, про беспроводный интерфейс на базе MRF. Я работал с этими модулями, сейчас на улице один пашет (температуру шлет каждые 10 секунд на комнатный термометр и как передатчик для датчиков сигнализации служит). У нас суровая зима выдалась (до -25С доходит) - так вот, работает стабильно трансивер этот до -10..-15С. Потом затыки бывают. А может мега8 диповская глючит при морозе. Лениво глянуть даташит...
Отошел от темы вопроса..как будет реализована цепочка пульт - робот ?

Может так?

Пульт (компьютер) -> RS232 -> мк --spi-> MRF49 <------------------> MRF49 --spi-> мк -> RS232 -> ЦК робота.

PS глянул даташиты. MRF рекомендованные значения темп. Operating Temperature -40 — +85 °C. Пиздешь!
Miko8 (Operating Temperature.................................. -55°C to +125°C). Может я их готовить не умею ?...Я регулярную реинициализацию регистров трансивера (проводилась каждый раз перед передачей пакетов) убрал. Хотя многие рекомендуют пренебречь потерями времени на это и делать ее.
0
SWK
20.02.2012, 01:19 155
Цитата Сообщение от syssobssy
if s2 = ч
а это что такое ? (первый раз вижу такое) может сравнение по ASCII кода символа ?
Да, это байтовая переменная,
s1, s2, s3, s4, ss, s_p1, s_p2, s_p3, i1, K_o : byte;
А в МикроПаскалях они удобны тем, что автоматически конвертируются и в символ, и в беззнаковое число. В данном случае я проверяю совпадение на русскую букву "ч" (HEX = F7).
А вот в Дельфи пришлось бы сначала перевести знак в число функцией Ord(ч), или использовать переменную типа string. МикроПаскаль же такие вещи упрощает. Байт - он и в Африке байт, и неважно, число в нем или символ. Хотя конечно в классическом Паскале такие вещи не проходят. Там соблюдение типов строго контролируется.
SWK
20.02.2012, 01:30 156
Цитата Сообщение от syssobssy
вдогонку еще вопрос, SWK, про беспроводный интерфейс на базе MRF. Я работал с этими модулями, сейчас на улице один пашет. У нас суровая зима выдалась (до -25С доходит) - так вот работает стабильно трансивер этот до -10..-15С. А может мега8 диповская глючит при морозе. Лениво глянуть даташит....
Мне это пока не критично, робот пока в основном в помещении работает. Если и буду выносить во двор, так только летом... Пока у меня конструктив на грязь и снег не рассчитывался. Может, со временем и сделаю другую платформу. Пока же основной упор делаю на проработку концепции и алгоритмов. Перекинуть потом готовые наработки на другое шасси - не проблема...
Отошел от темы вопроса..как будет реализована цепочка пульт - робот ?
Может так?
Пульт (компьютер) -> RS232 -> мк --spi-> MRF49 <------------------> MRF49 --spi-> мк -> RS232 -> ЦК робота.
Да, в канальных модулях будут трансивер и PIC16F628, для компа - еще и MAX232. Связь с компом или ЦК через USORT. В ЦК это второй, на порту PORTD2, PORTD.3, который я сейчас для связи с компом (через отключаемый джамперами MAX232) использую. Платки модулей будут примерно как показанная выше (недавно с ними баловался).
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 262
20.02.2012, 01:36 157
Ясно. Обратите внимание тогда на выбор частоты работы трансивера, на 433MHz у него характеристики получше будут, чем на 866 и 915MHz. Обвяз согласовательного контура на 433 другой. Я делал на 868MHz. У меня только положительные отзывы...пока не похолодало.

Вдохновение никак не приходит поразбираться с этими модулями поплотнее...работа-диван-работа.
Выложили бы видео что-ли....любопытно посмотреть.
0
SWK
20.02.2012, 01:57 158
Цитата Сообщение от syssobssy
Ясно. Обратите внимание тогда на выбор частоты работы трансивера, на 433MHz у него характеристики получше будут, чем на 866 и 915MHz. Обвяз согласовательного контура на 433 другой. Я делал на 868MHz. У меня только положительные отзывы...пока не похолодало.
Вдохновение никак не приходит поразбираться с этими модулями поплотнее...работа-диван-работа.
Выложили бы видео что-ли....любопытно посмотреть.
Да я тоже пока шибко не разбирался. Мельком просмотрел даташиты, да повторил по просьбе одного знакомого вариант BLAZE, (приемник и передатчик на 6 команд, 868MHz.)
На дальность не проверял, но несколько пар приемных и передающих модулей работают меж собой в любых сочетаниях, безо всякой подстройки, довольно устойчиво.

Когда буду делать для робота, просмотрю более подробно настройки и протоколы, и с катушками побалуюсь, постараюсь выжать надежно хотя бы метров 100. Больше у меня все равно радиоканал камеры не потянет. Как-то проверял, (правда, камеру просто клал на землю), так уже метров с 40 и более цвет пропадал, черно-белое шло, а метров с 50-60 - снежок появлялся. Правда, на роботе камера сантиметрах в 15 от земли будет. А если поднять метра на полтора - два, то вроде в прямой видимости по паспорту до 200-300 метров обещают. Врут, конечно... Но мне и этого хватит. Двор невелик, да еще с перепадами высот и ступеньками, так что дальше 20-30м все равно гонять не получится. Можно бы по улице, по тротуару, да только нельзя - сопрут... Народ у нас такой. Тащат все подряд, даже если это им нахер не надо. Лишь бы стащить...
SWK
22.02.2012, 01:41 159
Занялся линией межмодульной связи. Условно зову ее LIN, хотя к известному протоколу LIN она отношения не имеет. Хотя некоторое сходство есть.
Как я уже писал, я сделал (после перебора вариантов с I2C, SPI) все же межмодульный обмен на базе USORT, как наиболее автоматизированный, имеющийся во всех моих модулях, (вплоть до бамперов), а также используемый для отладки, да и вообще он мне, как связисту, более привычен. Для связи используется единственная линия. Приемники USORT подключены к ней непосредственно, передатчики - через диод. Линия подтянута резистором к +5v. Скорость пока (как и канала связи с компом) - 9600 бод. Хотя внутри робота, при небольших расстояниях и общей земле, можно и более. Но особой необходимости повышать нет. Когда все сделаю, можно будет и поднять, хотя бы до 19200 бод. Посмотрю сначала, какие фронты будут.

Для начала подключил к ЦК контроллер башни. Написал процедурки обмена по линии. Правда, адресацию и 9-битный режим в ЦК пока заблокировал. Надо будет внести соответствующие изменения для него в программы других модулей. Можно бы и вообще без адресации, коды команд в разных модулях все равно разные. Адресация нужна просто чтобы их меньше отвлекать на прием и декодирование неиспользуемых в них чужих команд. При адресации они будут проверять только адресный байт, игнорируя остальное.

Пока просто сделал в ЦК прием и пересылку по LIN команд, не используемых им самим, для других модулей. Этот режим я планировал оставить и в дальнейшем, на случай необходимости с пульта напрямую управлять какими-либо низовыми функциями.

Также ЦК принимает информацию, посылаемую другими модулями (в ответ на команду или самостоятельно), и пересылает ее на пульт в компьютер.
По принятой мной методике, я сначала закладываю такой как бы программный каркас, на который потом цепляю остальное. Проверив пока прямую трансляцию команд и данных, я потом навешаю на нее адресацию, а также ЦК потом будет не просто пересылать команды туда - сюда, а анализировать их, и решать, что с ними делать - переслать или предпринять какие - либо другие действия. Но сама пекресылка уже будет отлажена, и проблем с ней как с таковой уже не будет.

В общем, дописал немножко программку (инициализация еще одного USORT в Меге, процедурки приема и передачи, прерывание по приему, дешифрация команд с LIN).
Прицепил парой проводков (земля и LIN) модуль башни. Можно было и одним, земля у них по питанию все равно одна, но привык к порядку... Как и должно было быть, все заработало сразу и без проблем. Даже неинтересно...

В общем, физический уровень интерфейса готов.
Теперь можно вводить адресацию, менять формат пакетов, задействовать выделенные прерывания от некоторых модулей, которые будут иметь возможность самостоятельно обращаться к ЦК, не дожидаясь, когда он их опросит.

Сейчас период вращения главного цикла - около 9,5 мкс. Размер программы ЦК (Мега 64 16AU):
Used ROM (bytes): 7220 (11%) Frii ROM (bytes): 58316 (89%)
Static ROM (bytes): 122 Dynamic ROM (bytes): 3974
Уровней вложения стека - 3.
В окончательном варианте будет стоять Мега 128, так что можно считать, что использовано пока порядка 5% емкости памяти программ. Ну, сегмент в 512 байт (~0,4% памяти программ) занимает Boot Toodir. Итого - около 6%... Есть еще, где развернуться в будущем.
utwir
04.03.2012, 02:06 160
Цитата Сообщение от SWK
Цитата Сообщение от Brykodyr
...Кроме того, эти же флэшки Микро SD используются у меня в фотоаппарате Олимпус FE-26, (с переходником MASD-1 под XD), и в видеорегистраторе HD DVR, через переходник SD.
Добрый вечер, подскажите пожалуйста, у меня фотоаппарат Олимпус ФЕ-230 и есть адаптер MASD-1, как его можно переделать под фотоаппарат ФЕ-230, а то адаптер не подходит из-за зубчика на на нем.
04.03.2012, 02:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2012, 02:06
Помогаю со студенческими работами здесь

Робот SWG - мысли вслух
Поломав около года голову над поворотной платформой своего робота (для краткости я также называю ее...

Поменять местами центральный столбик и центральный рядок матрицы
Помогите пожалуйста с этой задачей, уже пол дня сижу...вообще никак! Буду премного благодарен! :*...

SWG большой response
Добрый день, как можно выйти из положение @SWG\Response() в examples приходится ложить довольно...

Помогите опознать ethernet контроллер, SM контроллер шины и контроллер универсальной последовательной шины и найти к ним драйвера
ethernet контроллер:, SM контроллер шины:, контроллер универсальной последовательной шины+. Кто это...

SM контроллер шины, сетевой контроллер и ethernet контроллер
подскажите где скачать sm контроллер шины, сетевой контроллер и ethernet контроллер для делл...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
160
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru