Печатная плата своими руками

Расскажу о моем первом опыте изготовления плат по ЛУТ. Вот наиболее подробная инструкция.

2013-03-29 22.36.32

И так, необходимость возникла только потому что злобная компания FTDI не хочет делать переходник USB<->USRT в корпусе DIP. А забивать память МК библиотекой на USB не хочется.

Все делал прямо по инструкции:

0. Закупил все что нужно

2013-03-28 19.50.29

 

  1. Хлористое железо
  2. Припой ножик канцелярский
  3. Провод
  4. Ванночка для травления
  5. Шкурка (самая мелкая)
  6. Глицерин ( в аптеке 7р)
  7. Однослойный текстолит
  8. Электрические компоненты

1. Нарисовал плату, распечатал на лазерном принтере

2013-03-28 19.59.43

 

Не забудьте инвертировать плату по одной оси до распечатки. Руками не трогать, только за края. Фольгу прошкурить.

2. Отутюжил, смыл

2013-03-28 20.32.46

 

Не зря сделал сразу 10 шт, так и знал что что-то может пойти не так. Либо плохо прогладил либо пальцем ляпнул не знаю, но -2 штуки сверху. Глянец в некоторых местах сходит очень тяжело, но он не влияет на травление.

 

3. Вытравил и выпилил

2013-03-28 21.47.40 2013-03-29 10.40.40

 

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

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

Самое мучение с многоконтактными элементами (FT232). Сначала припаиваем 1 ногу крайнюю, потом, если другие ногу немного не совпадают, поворачиваем вокруг нее и припаиваем противоположную дальше сами знаете.

 

4. Залудил припаял контрольный диод, а потом и все остальное

2013-03-29 21.34.48

 

 

Вот видео как работает FT. С ПК посылаю команду на переключение светодиодов.

 

Прошивка совместимая с AVRStudio

Немного неудобно, когда пишешь код в одной программе а заливаешь его через другую. По этому случаю, совершенно случайно, нашел прошивку под схему PROTTOSS`а совместимую со студией.

Собственно вот ссылка на форум. Так что основная моя претензия к программатору не актуальна.

 

Как дойдут руки перепрошить, выложу результаты.

 

Для общего развития картинка Фрактала ( Множество Мандельброта )

PS: Фрактал – это не просто красотулечька, при их помощи сжимают информацию, убирают шумы и еще много интересного. 

640px-Mandelpart2

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

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

2013-03-23 18.26.44

По сути игра состоит из двух больших блоков: геймплей и меню, сейчас поговорим о менюшке.

А сам геймплей как правило можно разделить на: сессионный и последовательный, сейчас у нас будет сессионный.

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

Рассмотрим пример к которому будем стремиться, вот он на мобильный и вот на ПК (конгрегейт), надо сказать, что мобильная версия нагло сперта с кингдом раша.

Что мы видим сначала?

  1. Загрузка
  2. Заставка
  3. Начальное меню
  4. Сохранялка
  5. Карта игры

Теперь разберем и адаптируем к себе. Я собираюсь делать приложение на телефон, надо всегда помнить что там нет мышки, только тач пад, но зато есть жесты. Мы делаем игру на флэше, и на телефоне исполнителем кода будет AIR, когда паблишим флэшку, там есть такая строчка

Снимок

 

она позволяет встроить в пак AIR. Но он и так прекрасно подкачивается когда ставишь приложение на телефоне. А все наполнение игры ( картинки анимация и т.д. ) будут у нас в библиотеке, так что никакой подгрузки не будет вовсе.

Далее заставка – ну тут все понятно.

Начальное меню. В этих играх мы видим 2 характерные кнопки, Start и Credits. Это конечно чудесно, но если делать заставку в которой будет написано кто сделал игру, то зачем эта вторая кнопка непонятно. Скорее всего, потому что нехорошо делать менюшку из одной кнопки. Впрочем у меня есть идея получше, поставим туда попрошайку (Donations).

Снимок

Вот так выглядит оно в моей игруле

За ним идет окно сохранений. Очень хорошая идея взятая со старинных игруль, делать только 3 позиции. Раньше это ограничение оправдывалось малым количеством памяти, но оно добавляет некой реиграбельности приложению. С точки зраения программирования это будет что-то типа

var storedValue:ByteArray = EncryptedLocalStore.getItem(str); 
str_ = storedValue.readUTFBytes(storedValue.length);

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

Дальше идет скорее геймплей чем меню, на этом экране будет размещаться все элементы игры. Я пока остановился на таком наборе:

  • Магазин
  • Произвольная игра
  • Книга знаний
  • Собственно карта
  • Выбранный игроком герой

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

Книга знаний – это место где можно узнать о своих войсках и о войсках противника, и вообще всю информацию справочную.

Магазин – понятно чего.

Заключение

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

 

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

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

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

Как только, об этом узнал, принялся сразу разбирать все мышки в доме, но не все имеют сенсор способный выдавать дамп пикселей. Долгие поиски, показали, что такие сенсоры есть только в мышах 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

Отличный программатор, на мой взгляд.

Вот ссылка на него.

Самый маленький из тех что видел.

Особенно радует совместимость с XMega т.к. это MKII клон.

В общем будем копировать=)