МАРСОХОД

Open Source Hardware Project

Проекты Altera Quartus II для платы Марсоход

Техническое зрение

Камера от мобильного телефона попала ко мне довольно давно, но только сейчас дошли руки поделать с ней какие-нибудь эксперименты.

Модуль VGA камеры от сотового телефона

В результате прочесывания интернета выяснилось, что это камера от SIEMENS CX65, и на нее есть хороший даташит (

) Поизучав документацию я решил подключить модуль камеры к плате Марсоход. Проект сложный, но что поделать, наши проекты становятся сложнее и сложнее!

Для подключения ее к плате Марсоход, во-первых, потребовалась доработка самой платы - допавание нескольких разьемчиков:

add_pick

и перерезание дорожек:

cut

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

Плата для подключения модуля камеры к плате Марсоход

и с обратной стороны:

Плата для подключения модуля камеры к плате Марсоход

Его этой платки вот такая:

Схема платы для подключения модуля камеры к плате Марсоход

Вот так все выглядит в сборе:

Подключение модуля камеры к плате Марсоход

К сожалению разъемчик для камеры оказался припаянным неправильно, изображение  получилось "вверх ногами", но это мы программно "починили".

Немного о самой камере.
Для подключения она имеет два интерфейса. Один управляющий, реализован на основе шины I2C ( используются сигналы SCL и SDA ) . Камера имеет большое количество внутренних регистров, которые доступны через этот интерфейс. После подачи питания все эти регистры устанавливаются в состояния "по умолчанию", описанные в даташите.

Второй интерфейс - для передачи видеоданных. Он похож на интерфейс VGA - есть сигналы строчной (HD) и кадровой  (VD) синхронизации, только данные передаются не в аналоговом, а в цифровом виде по параллельной 8-битной
шине ( DOUT0..DOUT7, тактируемые DCLK ). Кроме того, для работы камеры нужна внешняя тактовая частота ( EXTCLK ).

О проекте и как все работает.

Я сделал проект в среде Altera Quartus II для платы Марсоход, его можно взять здесь:


После подачи питания на камеру, она , "по умолчанию" , находится в состоянии "OFF", и все сигналы интерфейса видеоданных отсутствуют.

Для включения камеры нужно через интерфейс I2C во внутреннем регистре по адресу "03", сбросить старший бит.
После этого камера начинает выдавать данные в режиме "YUV". Это значит, что на каждый пиксель изображения будет представлен двумя байтами, первый - цветоразностные сигналы, второй - яркость ( собственно он нам и нужен ).

Чтобы увидеть изображение от камеры, мы будем передовать данные на компьютер, в программку ethcam.exe через ethernet 10baseT. Когда-то мы уже передавали ethernet пакеты с платы Марсоход, у нас был такой проект.

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

Программа для компьютера была написана в среде Visual Studio 2010 на С++. Ее исходник находится там же, вместе с проектом для платы Марсоход (

)

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

Кроме этого, программа имеет возможность записывать принятые кадры в AVI файл. Для этого в ней есть кнопка "Rec/Stop".

Вот так выглядит программа:

Программа для принятика кадров от камеры, подключенной к плате Марсоход

 Ну а вот и фрагмент видео, записанного с помощью этой программы и камеры, и платы Марсоход:

Ну а вот как я записывал это видео:

Как видите проект вполне работоспособный!

 

Комментарии  

+1 #24 Yuva 29.12.2013 15:59
Ребят, где можно купить такую камеру? Или по каким ключевым словам нужно искать ее в инете?
+1 #23 A.P. 30.11.2011 07:01
Цитирую Ю р и й:
Я впервые работал с интерфейсом I2C, и , наверное, нужно было сделать как-то правельнее,
В камеру , для включения режима "YUT 15fps" нужно передать 78,03,00
а у меня все биты получились "подряд" -
4F103805
0100 1111 0001 0000 0011 1000 0000 0101
sss --7--- ---8- A---0-- ---3-- A --0-- --0-- App
("s"-старт, "A" - подтверждение, "p" - стоп)

Понял, спасибо
+1 #22 Ю р и й 29.11.2011 17:55
Я впервые работал с интерфейсом I2C, и , наверное, нужно было сделать как-то правельнее,
В камеру , для включения режима "YUT 15fps" нужно передать 78,03,00
а у меня все биты получились "подряд" -
4F103805
0100 1111 0001 0000 0011 1000 0000 0101
sss --7--- ---8- A---0-- ---3-- A --0-- --0-- App
("s"-старт, "A" - подтверждение, "p" - стоп)
+1 #21 A.P. 29.11.2011 16:41
Цитирую Ю р и й:
. Если что непонятно, спршивайте , всегда рады :-) .


Разбираюсь с i2c.
Я смотрю по схеме, вы передаете число 0хA01C08F2, в обратном порядке получается число 0х4F103805. Что это за числа, откуда они взялись? по даташиту первым надо передать 0х78(адрес камеры)
+1 #20 Ю р и й 29.11.2011 16:25
За поиск ошибок в тексте и проектах огромное спасибо.
Теперь уточнения по проекту ( могу ошибаться,но , насколько смог вспомнить ) тактовая, 100м
делится на 5 и соответственно, 20м , поступет на led[5] и далее на входной пин камеры "EXTCLK"
В самой камере ( в соответствии с установками "по умолчанию" ) эта частота делится на 2 и выдается на
"DCLK" . С этой же частотой камера выдает свои данные, и , с этой-же частотой , далее в проекте,
они передаются через Ethernet. Если что непонятно, спршивайте , всегда рады :-) .
+1 #19 A.P. 29.11.2011 14:43
Нашел пару ошибок :lol:
"доработка самой платы - **допавание** нескольких разьемчиков:"

вторая ошибка на рисунке №6(схема). На нем DCLK соединен с PT_LEFT. что неверно. В связи с этим у меня вопрос - с какой частотой тактируется DCLK? от 25MHz? Это у камеры по умолчанию стоит такая частота?
+1 #18 Geban 18.09.2011 19:51
Я проект пытался завести на Xilinx кристалле. Там есть PLL так что любые частоты от 5 до 333МГц не проблема. 10МГц брал как раз от PLL. Может быть там не меандр(хотя что там ещё может быть)
-4 #17 Alex 11.08.2011 10:35
А вы не думали писать проекты и на VHDL, не всеже Verilog используют?
+1 #16 Ighor 27.07.2011 19:12
Цитирую Евгений:
Здравствуйте. Попробовал перенести проект на Xilinx платформу. Было некоторое непонимание в мультиплекторах в блоке формирования ethernet пакета. Вроди разобрался, на свиче есть конект 10 мегабит, данные идет судя по осциллогафу и свиче.. но вот на соседнем компе Wireshark невидит бродкаст пакеты... т.е что-то передается но не пакеты... схема правильная, кварц 50 мегагерц, использую делитель на 5 что юы получить необходимые 10 мег

У меня те же проблемы. соединение устанавливается , но пакеты не приходят. Выполнил на EPM, но с другим внешним генератором.
+1 #15 Ю р и й 27.07.2011 12:10
Цитирую Евгений:
Здравствуйте. Попробовал перенести проект на Xilinx платформу. Было некоторое непонимание в мультиплекторах в блоке формирования ethernet пакета. Вроди разобрался, на свиче есть конект 10 мегабит, данные идет судя по осциллогафу и свиче.. но вот на соседнем компе Wireshark невидит бродкаст пакеты... т.е что-то передается но не пакеты... схема правильная, кварц 50 мегагерц, использую делитель на 5 что юы получить необходимые 10 мег

От 50 мГц может не заработать. Езернет-блоку
нужно 10мГц - меандр, а из 50 его не сделать -
нужно 60 или 40.
+1 #14 Евгений 27.07.2011 10:11
Здравствуйте. Попробовал перенести проект на Xilinx платформу. Было некоторое непонимание в мультиплекторах в блоке формирования ethernet пакета. Вроди разобрался, на свиче есть конект 10 мегабит, данные идет судя по осциллогафу и свиче.. но вот на соседнем компе Wireshark невидит бродкаст пакеты... т.е что-то передается но не пакеты... схема правильная, кварц 50 мегагерц, использую делитель на 5 что юы получить необходимые 10 мег
+1 #13 Ю р и й 27.07.2011 06:57
Цитирую Ighor:
Цитирую Ю р и й:
Цитирую Ighor:
А от какой частоты тактируется EPM в данном проекте?

От генератора 100мГц.


А что в проекте нужно поменять, чтобы работать от 40 мГц?

Вместо делителя на 5 (inst16), нужно поставить делитель на 2, и подать его выход на c[1] и c[2]
+1 #12 Ighor 26.07.2011 14:57
Цитирую Ю р и й:
Цитирую Ighor:
А от какой частоты тактируется EPM в данном проекте?

От генератора 100мГц.


А что в проекте нужно поменять, чтобы работать от 40 мГц?
+1 #11 Ю р и й 26.07.2011 11:07
Цитирую Ighor:
А от какой частоты тактируется EPM в данном проекте?

От генератора 100мГц.
+1 #10 Ighor 26.07.2011 11:03
А от какой частоты тактируется EPM в данном проекте?
+1 #9 Ю р и й 21.07.2011 14:11
Цитирую Alex:
А за сколько вы написали этот проект (придумали и написали код)? и за сколько вы сделали его от идее до готового модуля ?

Больше всего времени , при реализации любого проекта, уходит на
поиск информации, ее анализ и постановку задачи - что, из того, что
мы имеем и знаем, можно сделать. Сам же процесс кодирования и
отладки занимает считанные часы.
+1 #8 Alex 21.07.2011 13:30
А за сколько вы написали этот проект (придумали и написали код)? и за сколько вы сделали его от идее до готового модуля ?
+2 #7 Alexey 05.07.2011 16:41
Молодцы! Не перестаете удивлять. А ведь проект по сути готовый модуль для видео наблюдения и передачи по ethernet. Стоят такие камеры как приличный Cyclone, а у вас получилось любо-дорого на MAXII.
+1 #6 Ю р и й 05.07.2011 04:23
Цитирую Alter:
классно,
один вопрос - где раземчик для камеры преобрели? и как он називатся?

Разъемчик выпаяли от старого телефона, только у него
попала ширина и шаг, а по длине пришлось обрезать.
+1 #5 Alter 04.07.2011 17:28
классно,
один вопрос - где раземчик для камеры преобрели? и как он називатся?
+1 #4 Ю р и й 04.07.2011 11:43
Цитирую maxxir:
Почему 124х480 ? (Подозреваю маловато логической емкости EPM240)
Было бы QVGA хотя бы - 320x240 :roll: ..

Дело не в емкости чипа, в разнице в скорости потоков данных. Из камеры данные поступают со скоростью 10мбайт/сек , а отправлять в компьютер можно только
10мбит/сек, т.е. только каждый восьмой полученный байт.
Можно было-бы уменьшить тактовую частоту на камеру (например в два раза ) и увеличить таким образом количество точек по вертикали(в два раза), но в этом случае уменьшится количество кадров/сек (тоже в два раза). В общем, приходится выбирать...
+1 #3 Ю р и й 04.07.2011 11:25
Цитирую nick17:
Подскажите, а как были сделаны переходные отверстия на платке с разъемом под камеру? Хим. способом? :-)

Печатные платы мы сами не изготавливаем, обычно, заказываем где-нибудь на стороне. Конкретно для этого
шилда был использован кусочек какой-то старой платы,
на котором была группа дорожек с нужным шагом(0.5мм) и переходными отверстиями с двух сторон. Затем дорожки
разрезали и в этом месте впаяли разъем(это хорошо видно на фотографии).
+1 #2 maxxir 04.07.2011 09:44
Почему 124х480 ? (Подозреваю маловато логической емкости EPM240)
Было бы QVGA хотя бы - 320x240 :roll: ..
+1 #1 nick17 04.07.2011 03:24
Подскажите, а как были сделаны переходные отверстия на платке с разъемом под камеру? Хим. способом? :-)

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Проекты Проект Марсоход Техническое зрение