Фотоаппарат своими руками

Сразу начну с исходника в котором показывается, как получить изображение с мышки.

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

Как только, об этом узнал, принялся сразу разбирать все мышки в доме, но не все имеют сенсор способный выдавать дамп пикселей. Долгие поиски, показали, что такие сенсоры есть только в мышах Logitech. И тут мне повезло, у друга завалялась старя мыша. Разобрав ее, я увидел желанный ADNS. Вот по нему документация.

2013-03-23 13.27.13 В доке даже есть примеры схемы, одна из которых и есть эта мыш. Так что, проблем с пониманием чего к чему нет.

А что делать дальше?

Для начала надо продумать как все это будет работать. 

Сервопривод HXT 900 с ATmega 8

Решил я попробовать как-то раз подключить сервопривод к контроллеру. Дело с такими вещами я раньше не имел, так что купил первую попавшуюся машинку.

Далее пошел копать на нее мануал, но оказалось это дело непростое. Сам производитель поскупился, и написал всего лишь 1 листочек. Hextronik_HXT900_datasheet. Поиски по разным форумам помогли найти мне электрическую схему.

Servo HXT900

 HXT900 с ATmega8 (не пугаться, на макете много лишнего)

 Приведу некоторые важные параметры

  • Напряжение питания: 4.8 – 6 В (но говорят можно и от 9В питать, правда дольше он от этого не прослужит, на деле питал от 3.3В все ОК)
  • Потребляемый ток: Очень долго искал, и только на одном форуме между строк нашел 700 мА, кажется мне, это враки, ибо от USB (500 мА), он работает у меня прекрасно. Источник на изи элктроникс говорит, что до 100 мА. Лично я намерил 180 мА максимум
  • Крутящий момент: 1.5 кг см2
  • Угол поворота: 90 градусов

Теперь о том как им управлять.

  • Коричневый провод – земля
  • Красный – питание
  • Желтый – сигнальный (должно быть не меньше 3.3 В)

Везде говорят, что это простой ШИМ, но верить им не стоит. Несущая частота 50 Гц (20 мс), и положение вала задается шириной импульса. От 0.45 мс ( 2222.2[2] Гц ) до 2.45 мс ( ~408.16 Гц ).

На деле несущая частота ШИМ может быть любой, но не меньше чем ширина импульса крайнего правого положения.

  1. Если частота например 1 Гц, то он 1 раз в секунду будет поворачивать вал на небольшой угол, и так пока не придет к заданному значению.
  2. Если частота будет 200 Гц, то отклик и жесткость выросте (когда на сигнальной линии пусто, то ротор двигателя можно спокойно вращать), но так же упадет крутящий момент.

servo_pulse

 

Примерно так выглядит сигнальная линия

С точки зрения программирования, эта задача очень простая. И даже не стоит того, чтобы занимать аппаратный ШИМ. Так как в приложениях с этим приводом скорее всего он будет не один, а ШИМ один, думаем как сделать все ручками.

Проще всего сделать это с помощью таймера.

В теле задаем делитель и запускаем таймер, так же разрешаем прерывание. (у меня 12 МГц кристалл, делитель не установлен)

sei(); 
TCCR0 |= (0<<CS02)|(1<<CS00); 
TIMSK |= (1<<TOIE0);

и в прерывании уже доводим до частоты. (данный код раз в секунду двигает вал в другое крайнее положение)

ISR (TIMER0_OVF_vect) {
 if(i>j)//(24) 47 - 94 (118) // через столько переполнений пройдет 0.45 и 2.45 мс соответственно, в скобках дествительные
 PORTB &=0;
 if(i>938){//50Гц - это 938 пререполнений таймера при частоте 12 МГц
 PORTB |=(1<<PB1)|(1<<PB2)|(1<<PB0); // 2 диода и серво
 i=0;
 }
 if(bo>46875){ // 1 секунда // каждую секунду меняет задающее значение ротора.
 if(j==24)
 j=118;
  else
 j=24;
 bo=0;
 }
 bo++;
 i++;
}

Можно все это хорошенько формализовать и сделать хоть для каждой ноги, и на каждую прицепить сервопривод.

Напоследок, видео

Полезные ссылки:

Программатор для AVR своими руками

Первое c чего начинает каждый решивший начать изучать микроконтроллеры это программатор. И так, поискав я нашел вариант полностью меня устроил. Спасибо PROTTOSS. Все инструкции к этому устройству можно найти там же. Здесь же будет рассказано о том как это сделал я.

IMG_0461

Готовый макет.

Для начала, почему именно он?

Наверное вы уже заметили, что с ПК он связан через USB, а другие  наиприятнейшие варианты требуют наличия LTP порта (6 проводов). Хотя, к нему мы еще вернемся.

Почему не USBasp?

Вот тут как говорится, что первое под руку попало=)

Хотя в защиту своего выбора могу заметить, что по данным сайта разработчика, USBasp поддерживается на:

  • AVRDUDE
  • BASCOM-AVR
  • Khazama AVR Programmer
  • eXtreme Burner – AVR

А AVR910:

  • AVRProg v.1.4,
  •  ChipBlasterAVR v.1.07 Evaluation,
  •  CodeVisionAVR,
  • AVROSP (ATMEL AVR Open Source Programmer)

И если вы хотите идти по праведному пути, и использовать AVRStudio или на худой конец CV AVR, то выбор очевиден.

Вступление

Для этого программатора, как и для всех рукодельных присуща философская проблема, курицы и яйца. Что-бы сделать программатор надо иметь программатор. А вот в случае с 6 проводным, все просто. Так что прежде чем начинать, убедитесь в существовании LTP порта в доступной близости или же наличие друзей, коллег, однокурсников имеющих готовый программатор.

Для любителей сделать все красиво ЛУТ в руки, я же хотел проверить для начала будет это вообще работать или нет. Так что купил просто однослойную макетку.

И так, что нам нужно?

Посмотрим на схему нам предлагаемую

shematic

 

Вот что нам надо будет закупить:

  1. MINI USB ( я ставил обычный и в результате куча проблем, мини лучше спаяется и проводов таких у всех дома навалом )
  2. Провод USB <-> MINI USB
  3. Разъем ISP на 10 ног ( вообще 10 ногий выход не используется на макетных платах ATmega и Tiny, но на 6 ног всегда можно сделать переходник )
  4. Контроллер Atmega8 ( купил сразу 2, 1- в программер, а другой будем уже использовать)
  5. Светодиодов 3шт ( когда разных цветов – веселее, опять же лучше с запасом для своей платы, выбираем их по току не меньше 10мА )
  6. Сопротивления 330 Ом, 100 Ом, 1.5 кОм, 10 кОм, 1 МОм
  7. Конденсаторы … все как обычно, только не забываем С5 - электролитический (банка) на 10В
  8. Кварц 12 МГц
  9. Джампер и 3 штырьки под него

J3 мне не пригодился а вот J1/J2 понадобится при программировании самого программатора

Файл прошивки и драйвер есть все на сайте PROTTOSS.COM

Там же заявлено, что его видят практически все кто мне нужно, но к нему подключиться смог только CVAVR, в прочем это не мешает писать код в AVRStudio компилировать и прошивать через CVAVR.

Шаг 1: Пайка

2013-07-30 13.33.02

 

На фото видно обратную сторону. Все элементы находятся на одной стороне, а пайка их с обратной. Для более продвинутых пользователей паяльника, но все еще ленивые, можно использовать SMD компоненты.

Шаг 2: Прошивка

Возможно одного энтузиазма будет мало, для прошивки программатора надо будет, если у вас нет COM или LTP порта на компьютере. Хотя для отчаянных есть еще такой вариант (Моя платка с использованием этого чипа).

В любом случае прошивается через PonyProg

Шаг 3: Тестируем

 

Альтернативные программаторы

PS: Подробнее о совместимости с AVRStudio