2015-10-07

Из грязи в князи.


Небольшая предыстория.

Пришла ко мне как-то знакомая: принесла ноут. Проблема старая и давно известная - от перегрева отпаялся чип видеокарты. Причем уже второй раз. Первый раз его запаяли народные умельцы, а второй раз - нет. Только замена "матери", что сами понимаете порой по цене соизмеримо с ценой самого ноута. А по сему знакомая попросила достать данные с диска, а сам ноут - выкинуть. Я конечно не домовёнок Кузя, но ноут выкинуть - рука не поднялась. ;)
Сначала была мысль попробовать как-то его использовать, но во первых он был не первой свежести, производительнасть по любому маленькая, даже если бы удалось что-то на нём поднять. Так что в итоге снял с него всё, что можно, а над остальным крепко задумался.

И тут попадается мне на глаза, на али-экспрессе чудо-плата: LCD Controller Board (VGA DVI). Собственно по этим ключевым словам и надо их искать. Плата поддерживает много различных матриц, но как я понял - штука не универсальная. Так что если хотите повторить мой "финт ушами" и получить из старого ноута - монитор, то придется разобрать, узнать маркировку матрицы и уточнять поддерживается ли данная матрица данной бордой.

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




2015-07-22

Антенна для цифрового ТВ.

В принципе схема давно известная, так что ничего нового вы тут не узнаете. ;) Но по просьбе друзей - выкладываю. И так...

Комплектация:

  • кусок кабеля (чем длиннее, тем хуже, ну это и ребенку понятно)
  • разъем
  • линейка деревянная 50 см
  • изолента
  • две банки пива


Инструкция по сборке:

  • выпиваем пиво! :)))) Так веселее идет работа, а так же ничего не пропадает зря. ;)))
  • моем банки, что бы антена не воняла потом. :)))
  • на линейку изолентой привязываем банки от пива на расстоянии 7 сантиметров друг от друга (вот почему лучше брать линейку, на ней уже есть засечки и не надо мерить лишний раз) ;)
  • зачищаем кабель
  • экран крепим к одной банке, центральную жилу - к другой (крепить можно по разному, я не заморачиваясь примотал к "ушам-открывашкам", но народ рекомендует ввернуть саморез для надежности и к нему крепить кабель)
  • на второй конец кабеля крепим разъем
Всё! :) Втыкаем антенну в приставку и настраиваем каналы.


2015-03-12

Cessna 150 (подробнее)

Собственно с чего началось все? Пожалуй с того, что я увидел на хоббикинг дешевый пульт радио управления. Ну RC мы бредили еще с детства с братьями, но тогда это было почти несбыточная мечта. В школе я пытался спаять такое на транзисторах, но опыта и знаний тогда не хватило.
А тут - всего за 1000 с копейками рублей я разжился передатчиком и приемником. :) Какое-то время оно у меня повалялось, а потом видимо пришло время и я понял, что хочу самолет!
На том же хоббикинг конечно можно было купить готовый, но платить минимум 5-6 тысяч меня душила жаба. К тому же я почитал, что чтобы научиться летать надо 8... в смысле 8 самолетов: 7 разобьешь, на восьмом полетишь. :))) Конечно же это шутка, но как говорится в каждой шутке... ;) В общем решил я и моя жаба, что самолет будем строить сами. :) И разбить не так жалко (починим, или на крайняк новый сделаем), и не жалко будет денег в случае если посылка (привет почте россии!) придет битая.

Сказано - сделано. Полез рыть инет. В итоге почитав про материалы, решил, что буду делать из "потолочки" (в простонародье так кличут пенопласт, для оклейки потолка). Стоит - дешево, обрабатывается - легко, весит - соответственно. Найти потолочку без рельефа оказалось несложно. Встал вопрос какой самолет. Сначала думал склеить что-то совсем простое, типа плосколета, или крыла. Но почитал об их управлении и понял, что мне, как новичку, убить эти самолеты - надо будет считанные секунды. ;) Поэтому в итоге решил делать Cessna 150. Самолет крайне устойчив в полете, довольно легко делается. К тому же нашлась вот эта чудная ветка на форуме, где уважаемый Сергей из Красноярска не просто выложил инструкцию, а сделал целую многочасовую видео лекцию в которой на глазах у всех сам клеит этот самолет, параллельно разжёвывая для новичков что да как, за что ему огромное спасибо!

В общем дело потиху идет, фюзеляж склеен уже. :) Для крыла сохнет основа, на днях склею само крыло. Но руки-то чешутся. ;) К тому же мне не внушала доверия потолочка, казалось что винт вырвет мотораму нафиг. Поэтому я решил проверить...





Надо сказать все держится на ура! :) По крайней мере пока. ;) Рука на видео дергается от тяги винта, честное слово! :)))

2015-03-11

Cesna 150 (часть 0)

Давно сюда не писал. :) Так что пока коротенько: делаю самолет (RC), подробности позже. ;)

2014-07-12

GoPro и монопод.


Зашел тут как-то разговор о gopro и съемках под водой. Я высказал свое мнение, что лучше всего под водой снимать с монопода: и к рыбам можно ближе поднести, и боятся нечего если кто кинется (привет муренам). :)

А потом я поехал попрыгать с Трубы. Одна камера была на шлеме, а вторая как раз на моноподе, который мне дал сосед. И сделан этот монопод был из трекинговой палки. :) В общем я взял эту идею на вооружение и сделал себе шикарный монопод! :)

В общем берем трекинговую палку (в декатлоне цена вопроса - 600 рублей), берем площадку от gopro, три хомута и термоклей. Ну я еще болгаркой спилил шип, что бы ничего не рвал при перевозке, но это опционально.











Ну вот как-то так. ;) Удачи всем!

2011-07-06

Пробуем таймер на атмеге.

И так, данный пост не является рассказом о какой-либо поделке. Это лишь тест, эксперимент, работы с таймером на atmega.

Для начала собираем простенькую схемку:


После чего загружаем туда следующий скетч:

//vim: syntax=c:tabstop=2:softtabstop=2:shiftwidth=2

#define BUTTON 12 // пин для подключения кнопки

#define REGS 4 // количество регистров экрана
int anods[REGS] = {8,9,10,11}; // пины анодов
int pins[] = {0,1,2,3,4,5,6}; // пины семисегментного индикатора
volatile int d[REGS] = {3,3,3,3}; // сюда пишем число для отображения
volatile int reg = 0; // тут сохраняем номер разряда, с которым будет работать обработчик прерывания
volatile int prev_reg = REGS - 1; // тут номер предыдущего обработанного разряда
bool button_state = false; // текущее состояние кнопки
int dig[] = {
 0b01111111,   // чисто - индекс 0
 0b00111111,   // - - индекс 1
 0b00011100,   // градус - индекс 2
 0b01000000,   // 0 - индекс 3
 0b01111001,   // 1 - индекс 4
 0b00100100,   // 2 - индекс 5
 0b00110000,   // 3 - индекс 6
 0b00011001,   // 4 - индекс 7
 0b00010010,   // 5 - индекс 8
 0b00000010,   // 6 - индекс 9
 0b01111000,   // 7 - индекс 10
 0b00000000,   // 8 - индекс 11
 0b00010000,   // 9 - индекс 12
 0b00001000,   // A - индекс 13
 0b00000011,   // b - индекс 14
 0b01000110,   // C - индекс 15
 0b00100001,   // d - индекс 16
 0b00000110,   // E - индекс 17
 0b00001110,   // F - индекс 18
};

ISR(TIMER2_OVF_vect) // вектор прерывания по переполнению
{
 digitalWrite(anods[prev_reg], LOW); // отрубаем аноды матрицы
 int i = 0; // счетчик битов
 for(int mask=1; i<8; mask<<=1) // цикл маски битов
 {
  digitalWrite(pins[i++], (dig[d[reg]] & mask) ? HIGH: LOW); // берем поочередно биты и включаем нужные
 }
 digitalWrite(anods[reg], HIGH); // как выставили все биты катодов, можно включить и анод текущего разряда
 prev_reg = reg; // сохраняем номер зажженного разряда
 reg++; // увеличиваем разряд, что бы в следующий раз его включать
 if(reg == REGS) // если это последний разряд...
  reg = 0; // ... начинаем с начального разряда
}

void setup()
{
 for(int i=0; i < sizeof(pins); i++) // выставим пины в out и погасим сегменты
 {
  pinMode(pins[i], OUTPUT);
  digitalWrite(pins[i], LOW);
 }

 pinMode(12, INPUT); // пин для кнопки поставим в in

 for(int i=0; i < sizeof(anods); i++) // отключим аноды
 {
  pinMode(anods[i], OUTPUT);
  digitalWrite(anods[i], LOW);
 }

 //настраиваем Timer2: делитель /256, WGM mode 0 - по переполнению
 TCCR2A = 0;
 TCCR2B = 1<<CS22 | 1<<CS21;

 //Timer2 включаем прерывание по переполнению
 TIMSK2 = 1<<TOIE2;

 //обнуляем таймер
 TCNT2 = 0;
}

void loop()
{
  delay(100); // чуток подождем :) дребезг кнопки для простоты не обрабатываем
  if(digitalRead(BUTTON) == HIGH && !button_state) // если нажата кнопка и флаг не выставлен (ранее не была нажата) прибавляем в младший разряд единицу
  {
    button_state = true; // флаг выставляем, что кнопка нажата
    d[0]++; // собственно увеличиваем разряд на единицу
    for(int i=0; i<REGS; i++) // далее проверяем переполнение разрядов
    {
      if(d[i] > 12)
      {
        d[i] = 3;
        d[i+1]++;
      }
    }
  }
  else if(digitalRead(BUTTON) == LOW && button_state) // если кнопку отпустили, но ранее она была нажата (флаг выставлен) то...
    button_state = false; // ...убираем флаг
}

И смотрим что вышло... А вышло вроде все хорошо, только вот фигня получается: нажимаем кнопку и видим, что в первом регистре, вместо "1" горит черт знает что, а точнее один лишний сегмент "E". :( Почему? Я не знаю и понять не могу. День колупался - не пойму где лажа. :( Та же фигня на других цифрах. Не на всех правда. Но от этого не легче.

Может кто сказать, где у меня косяк? :) Просьба ногами не бить, ибо пробую писать под микроконтроллеры первые разы. Простенькие программы писал уже, а таймер вот в первый раз решил запрограммировать. :)

UPD: Нашел где косяк. :( Блин, давно на C/C++ не писал, привык к питону, вот и накосячил. :) В общем ошибка грубая и старая как мир! ;) Надо проверять размерность массива, а именно надо заменить:

for(int mask=1; i<8; mask<<=1) // цикл маски битов

на

for(int mask=1; i<sizeof(pins); mask<<=1) // цикл маски битов

и больше никогда так не делать. ;) Ну в принципе наскоро писал, поленился написать полностью, поставил цифрю... За что и огреб. :)

2011-06-29

Осцилограф

Сегодня сделал себе маленький подарок. :) Теперь настраивать что-то после пайки будет значительно удобнее. ;) Вообще приборчик довольно приятный, маленький и удобный. Не "продвинутый мостр" конечно, но для моих нужд - само то. Разве что экранчик мелковат. Но это мелочи. К стати когда смотрел его в инете - совершенно не понравился. :( В руках эта штука выглядит намного приятнее, чем на картинках. ;)