OSD на ATmega1281

Вахтанг

Сергей
Не совсем понятно каким образом получаете 12В из 9В. И не понятно полярность включения VD3.

msv

Это обычный step-up DC/DC для получения 12V от 3S-липо. При полностью заряженном акке преобразователь затыкается и напруга чуть больше 12 (за счет падения на D3). По мере разряда, преобразователь запускается и выдает стабильные 12В. Несколько упрощенно, конечно грамотнее сделать какой-нибудь SEPIC, но что-то сходу у меня с ним не сложилось, не стал пока заморачиваться…
ЗЫ Аа… понял недоумение… Сергей вход с выходом на схеме перепутал… 😃

ubd

Сергей вход с выходом на схеме перепутал…

Опа… Мой косяк. Ну кто собирать будет, допрёт. В крайнем случае нам вопрос задаст. Я не думаю, что полный ламер будет пытаться спаять этот девайс.

13 days later
msv

Немного не по теме…
Погода нелетная, от скуки слепил прогу захвата видео. Кроме VirtualDub проги либо слишком тяжелые для моего ноута, либо денег просят. Собственно даб устраивал, но захотелось упростить жизнь. Те сверхзадача была максимально сократить необходимые действия в поле, для старта записи. Получилось вроде- проще некуда…
Одна кнопка- превью, другая кнопка- запись. Даже имя файла генерируется автоматом, по дате/времени. Конечно всех, достаточно сложных и серьезных наворотов от даба нет, да и весь код просто ^C+^V из msdn, но вроде работает.
Вообщем кому интересно поиграться - FPVcap. Версия по сути альфа…

avisenja

Сергей, как всегда - на высоте!!!😒
Спасибо!!! Супер!!!

Vlado

Версия по сути альфа…

а она под XP? попробывал под Win7-64 чего то не того не пишет а так молодец! я в этом не разбираюсь к сожалению:(
PS папочку организовал вроде заработала

Syberian
msv:

слепил прогу захвата видео

То, что надо. Ни плюх, ни свистулек. Четко и просто. Спасибо!!!

msv

Ок, благодарю за оценку и тестирование.
Немного букв о своей суперписАлке…

  1. Несмотря на активные советы msdn использовать только VMR9, поэспериментировав, пришел к старому доброму Video Reder. Все варианты VMR, VMR7, VMR9, то не создаются на некоторых компах (может там старые DirectX, не разбирался особо), то не соединяются в графе, то еще какая фигня. Возможно я не умею их готовить, но от компа к компу, от одного устройства захвата к другому,- не угадать какой казус выйдет. Простой VR оказался самым стабильным. Может стоит дать возможность определять рендер юзеру в конфигурации, но пока не увидел в этом особого смысла.
  2. Для синхронизации потоков полностью доверился стандартному AviMux из DirectShow. Единственно, что там можно сделать (и конечно сделано) указать “мастером” аудио-поток. В принципе при нормальном захвате все более-менее синхронизировано, но при большом количестве дропов (увы, для нас актуально) все как-то непредсказуемо… То почти идеально сводится, то появляется не устраняемая со временем ощутимая рассинхронизация аудио и видео… Увы, простых решений пока не вижу, а писАть свой мукс пока не готов…
  3. Далеко не все аудио-устройства поддерживают интерфейс микшера для DirectShow. Нужно сделать интерфейс к системному микшеру с возможностью установки при запуске всех настроек, определенных в конфигурации. Это полезно и для авто-включения мониторинга звука с установлением предварительно заданных значений уровней и параметров. Надеюсь добавлю в след. версиях.
  4. Сознательно не стал делать возможность включения аудио-кодека. Экономии на копейки, а проблем может оказаться много (не совместимость форматов аудио/видео для avi-контейнера, рассинхронизации итп…).
  5. Есть и хорошая новость ( 😃 ) - прога регистрирует как положено свой граф в системе и его можно посмотреть GraphEdit и прочими подобными смотрелками (типа GraphStudio из пакета K-Lite). Весьма полезное и поучительное занятие…
9 days later
flygreen

Шыкарная прога ! Мега респект. Буду видео на нетбук теперь писать)))

msv

Тут как раз и обновление поспело: FPVCap 1.1(beta)
Со “спасибами” не торопитесь, все-таки сыровато наверное… Тем более в этом деле (куча возможных устройств с неизвестно кем писанными дровами) добиться гарантированной надежности невозможно…
Немного рекомендаций:

  1. Если девайс позволяет, выбрать формат для PAL 720x576 25fps YUY2 (или подобный).
  2. Мой любимый кодек PICVideo M-JPEG.
  3. Звук желательно захватывать тем же устройством, что и видео. Гораздо меньше проблем с синхронизацией.
  4. Для наших дел формат звука пойдет 22050Hz, 1ch, 16bps.
msv

Еще вспомнил:
5. VideoRederer более универсален, но в некоторых случаях дает в динамике артефакты или может неоправданно грузить проц. Есть смысл тогда попробовать включить в настройках “VMR”.
6. УСБ-бишные устройства захвата могут конфликтовать с другими УСБ девайсами. Например мой PCTV начинает жутко тормозить если включить USB WiFi адаптер.
7. Audio->Playback->Enable включает софтовый мониторинг звука через DirectSound устройство. Это дополнительная нагрузка на проц и неустранимая задержка (уменьшение размера аудио-буфера приводило к зависаниям графа и даже вываливание в синий экран смерти). Если нет желания с этим (с задержками) мириться можно для аудио-мониторинга просто параллельно в выходу аудио подключить активную колонку.

Syberian

Сергей, подскажите, как переназначить вывод MCI вместо окна в какую-нибудь переменную типа TImage?
Написал плеер, выковыривающий телеметрию из видео. Видео воспроизводится через TMediaPlayer, в котором в качестве Display можно назначить только оконный элемент: форму, панель, кнопку… Все бы хорошо, но если окно закрыто другим окошком или свернуто, информацию с кадра считать невозможно.

msv

Вроде для MCI нужно передавать HWND окна для отображения. Вероятно по этому TMediaPlayer.Display может быть только наследник от TWinControl, имеющий свойство Handle- по сути HWND. Конечно всех возможностей MCI не помню, но вполне может оказаться, что эта задача нерешаема…
Есть повод окунуться в DirectShow 😃, там эта задача легко решается. Даже можно не писать свой фильтр, пользовать готовый SampleGrabber.

Syberian

ага, там черт ногу сломит.
Нашел такой код:

#ifndef DIBSIZE
#define WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
#define DIBWIDTHBYTES(bi) (DWORD)WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
#define _DIBSIZE(bi) (DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
#define DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(_DIBSIZE(bi)) : _DIBSIZE(bi))
#endif

void PlayAvi(LPCSTR pszFile, HWND hWndOutput)
{
  AVIFileInit();
  PAVIFILE paf;
  AVIFileOpen(&paf, pszFile, OF_READ, 0);
  AVIFILEINFO afi;
  AVIFileInfo(paf, &afi, sizeof(AVIFILEINFO));
  PAVISTREAM pas;
  AVIFileGetStream(paf, &pas, streamtypeVIDEO, 0);
  AVISTREAMINFO asi;
  AVIStreamInfo(pas, &asi, sizeof(AVISTREAMINFO));
  long nFormatSize;
  AVIStreamReadFormat(pas, asi.dwStart, NULL, &nFormatSize);
  BITMAPINFOHEADER* pbihIn = (BITMAPINFOHEADER*)malloc(nFormatSize);
  AVIStreamReadFormat(pas, asi.dwStart, pbihIn, &nFormatSize);
  BITMAPINFOHEADER bihDec;
  memcpy(&bihDec, pbihIn, sizeof(BITMAPINFOHEADER));
  bihDec.biCompression = BI_RGB;
  bihDec.biBitCount = 24;
  bihDec.biSizeImage = DIBSIZE(bihDec);
  BYTE* pDecData = (BYTE*)malloc(bihDec.biSizeImage);
  memset(pDecData, 0, bihDec.biSizeImage);
  HIC hic = ICDecompressOpen(ICTYPE_VIDEO, pbihIn->biCompression, pbihIn, &bihDec);
  ICDecompressBegin(hic, pbihIn, &bihDec);
  HDC hdc = GetDC(hWndOutput);
  RECT rc;
  GetClientRect(hWndOutput, &rc);
  HDRAWDIB hdd = DrawDibOpen();
  BYTE* pInData = NULL;
  long nBufSize = 0, nSampleSize = 0;
  for (int nSample = asi.dwStart; nSample <= asi.dwStart + asi.dwLength; nSample++)
  {
    AVIStreamSampleSize(pas, nSample, &nSampleSize);
    if (nSampleSize > nBufSize)
    {
      pInData = (BYTE*)realloc(pInData, nSampleSize);
      nBufSize = nSampleSize;
    }
    AVIStreamRead(pas, nSample, 1, pInData, nBufSize, NULL, NULL);
    ICDecompress(hic, 0, pbihIn, pInData, &bihDec, pDecData);
  // ñåé÷àñ â pDecData òåêóùèé êàäð â âèäå áèòìàïêè, ðèñóåì åãî
    DrawDibDraw(hdd, hdc, 0, 0, rc.right - rc.left, rc.bottom - rc.top, &bihDec, pDecData, 0, 0, bihDec.biWidth, bihDec.biHeight, 0);
    Application->ProcessMessages();
  }
  DrawDibClose(hdd);


  ReleaseDC(hWndOutput, hdc);
  ICDecompressEnd(hic);
  ICClose(hic);

  AVIStreamRelease(pas);
  AVIFileRelease(paf);
  AVIFileExit();
  free(pInData);
  free(pDecData);
  free(pbihIn);
}

При указании пути файла и хендла формы/панельки должен воспроизводить файл. Нифига, вылетает на строке ICDecompress(hic, 0, pbihIn, pInData, &bihDec, pDecData); с ексепшеном ffdshow.ax. Удалил ffdshow - дает просто черный экран.

===
еще нашел dspack, попробую его.

msv

Олег, имхо все эти библиотеки (в тч. MCI) по сути софтовые интерфейсы к этому. А зачем нам посредники? 😃 Конечно реальное приложение будет посложнее, вместо RenderFile придется свой граф собирать, но Intelligent Connect сделает всю самую сложную работу.
//-------------------------------------
Обновление FPVcap_1.2(beta). Исправлен тексты сообщений о ошибках, и вылеты на исключения при отсутствии железки захвата. Никаких принципиальных изменений.

28 days later
Vlado

Special… в свете последних достижений MSV сделал антенку для DX приложений на диапазон 400МГц. Измереный gain ~ 7dB, КНД порядка 9dB, ну и на модельке диполь с gain 2-5dB. ИМХО довольно перспективно, на какую сотню другую км потянет, обенно если тракт профессиональный, от какой либо р.станции:)

ubd

А чертёжик антенны можно?

ну и на модельке диполь с gain 2-5dB

И на самолете, обычный четверть волновый диполь?
Разве есть разница между, просто штырьком четверть волны?
И как определили 2-5 db.

И ещё вопрос, поляризация какая подразумевается?

msv

А я во какой коаксиал на 434 забабахал:

Подробности здесь.
Сверхзадача была уменьшить объемные габариты классической GP с тремя противовесами, торчащими во все стороны, для удобства хранения транспортировки.
-----
Самым неудобным моментом системы сейчас является привязка проводом пульта к передатчику, установленному на крыше авто… Может есть какие дешевенькие RF-модули желательно на 2.4 обеспечивающие уверенный цифровой линк до 15-20м? Интерфес… не знаю… UART что-ли…

Vlado
ubd:

А чертёжик антенны можно?

И на самолете, обычный четверть волновый диполь?
Разве есть разница между, просто штырьком четверть волны?
И как определили 2-5 db.

И ещё вопрос, поляризация какая подразумевается?

я подразумевал 3/4 ( 5/8 ) диполь у того гейн поболее а штырь на 400МГц нужна крыша ( пара кв метров ) в качестве противовеса иначе не работает. У штыря импеданс (36 + j20) Ом главное отмерить и прилепить к крыше по центру.
Поляризация ессно линейная.

msv

Имхо 5/8 имеет скромные 2-3db по сравнению с GP только в узком секторе. Зато на вполне “ходовых” углах возвышения имеет жуткие провалы…