Skocz do zawartości

Kamera Video + ATmega


marek1707

Pomocna odpowiedź

O, bardzo ciekawy projekt:) Szacun, że się za to zabrałeś!

Nie wiem czy widziałeś video experimenter shield dla arduino, ale jeśli nie, to daję linka - może Ci się przyda (jest schemat i soft na arduino dostępny za free): http://nootropicdesign.com/ve/

Frame capture nawet sensownie wygląda: http://nootropicdesign.com/projectlab/2011/03/20/video-frame-capture/

Może warto się zainteresować tym projektem by wykorzystać go w LF?

P.S.: kamerkę działającą z tym VE ^ można kupić za $17 w HK -> http://www.hobbyking.com/hobbyking/store/__11977__1_3_inch_SONY_CCD_Video_Camera_PAL_.html 😉

Link do komentarza
Share on other sites

Rozwiązania Arduinowego nie widziałem. Zrobiłem kiedyś kilka frame-grabberów do różnych kamer (np. termowizyjnych i normalnych PAL) więc, jakby wsparcia nie potrzebowałem. Oni użyli tam układu LM1881 - flagowego dinozaura TV, czyli selektora/separatora impulsów synchronizacji. Też o nim myślałem - nawet obróciłem go w dłoni kilka razy ale w końcu u mnie robi to procesor posiłkując się do dyskryminacji amplitudy zwykłym komparatorem. Nie jest to tak uniwersalne jak w przypadku układu Nationala ale założyłem, że sygnał z kamerki jest raczej standartowy i sprzężony stałoprądowo a jeśli poziom będzie za niski, trzeba będzie po prostu zmienić próg wyzwalania. Moim założeniem nie było złapanie całego obrazu tylko zastąpienie kamerką jednej - udało się trzech - linijek czujników optycznych pracujących analogowo. Wskazany shield łapie obraz dwustanowy (czarno-biały, 1 bit/pixel) bo na większy nie ma miejsca w małym procesorku. Już 100x100 czyli mały wycinek ramki TV w trybie analogowym daje 10kbajtów - rzadko który AVR ma tyle RAMu. Dołączając przetwornik za kilkanaście złotych + RAM i pisząc kilka funkcji więcej mogę zrobić takie wczytywanie w 250 stopniach szarości ale do LFów to chyba nie bardzo się nada. Chyba, że przy okazji zmienimy procesory na deczko szybsze i posiedzimy z pół roku nad nowymi algorytmami..

W Polsce kamerka wielkości kciuka kosztuje na aukcji 80zł a kopułka B/W z LEDami ok. 50.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Post po postem, trudno.

Ponieważ zupełnie nie mam czasu by jakoś ogarnąć temat kamerki (przepraszam) a widzę spore zainteresowanie wątkiem, spróbuję choć w skrócie opisać metodę jaką zastosowałem. Wierzę i mam nadzieję, że na tej podstawie wielu Kolegów samodzielnie zbuduje działający układ - co naprawdę bardzo mnie ucieszy 🙂

Przed próbą napisania programu proponuję dość dokładnie zapoznać się ze strukturą sygnału TV. Nie ma oczywiście sensu wnikać w systemy kodowania koloru oraz podnośne fonii - wystarczy podstawowa ramka czyli zespolony sygnał wizji (video, synchronizacja, wygaszanie).

Schemat:

Sygnał video z kamerki przepuściłem przez prosty wzmacniacz/bufor na wzmacniaczu operacyjnym ale nie jest to konieczne.

Do wejścia (+) komparatora doprowadziłem sygnał video.

Do wejścia (-) doczepiłem napięcie 0.2V pochodzące z diody Schottky'ego spolaryzowanej opornikiem w kierunku przewodzenia i stojącej katodą na masie. To jest poziom detekcji sygnału synchronizacji.

Wyjście komparatora doprowadziłem do wejścia procesora ATmega88 - nazwijmy ten sygnał SYNC. Elegancko byłoby skorzystać z funkcji ICP i "łapać" timerem czasy ale poszedłem na łatwiznę i robię to metodą próbkowania programowego.

Ten sam sygnał video doprowadziłem do wejścia przetwornika A/C.

Algorytm:

1. Czekam na impuls synchronizacji pionowej czyli:

a. czekam na zbocze opadające SYNC (czekam na stan 1 a potem czekam na stan 0)

b. odczekuję A mikrosekund

c. sprawdzam czy SYNC jest wciąż niski

d. jeżeli tak - impuls synchronizacji pionowej znaleziony, idziemy do pkt., jeżeli nie - pkt.1

2. Czekam na koniec sekwencji synchronizacji pionowej czyli na pierwszą linię obrazu:

a. czekam na zbocze opadające SYNC

b. odczekuję A mikrosekund

c. sprawdzam czy SYNC jest już wysoki

d. jeżeli tak - sekwencja synchronizacji pionowej zakończona, idziemy do pkt. 3, jeżeli nie - pkt.2

3. Możnaby odliczyć kilka linii przeznaczonych na wygaszanie pionowe ale ja po prostu odczekuję B mikrosekund.

4. Czekam na impuls synchronizacji pionowej. Ponieważ teraz jesteśmy już zsynchronizowani z ramką TV, każdy impuls synchronizacji jaki przyjdzie, będzie początkiem linii: wystarczy poczekać na zbocze opadające SYNC. Zrobiłem sobie system liczników mówiący mi kiedy linia jest ważna i przeznaczona do zeskanowania a kiedy ją pomijamy. Odliczam więc niepotrzebne linie od góry ramki (czyli od lewej strony - patrząc po obróceniu) za każdym razem dosynchronizowując się do opadającego zbocza SYNC. Kiedy licznik pokaże, że już czas..

5. Odpalam przetwornik A/C z podzielnikiem 1/16. Przy zegarze procesora 20MHz daje to więcej niż ustawa przewiduje ale skutkuje to na szczęście tylko zmniejszeniem liczby bitów. Ponieważ jest to pierwsza konwersja, zajmuje 25 zegarów przetwornika. Czekam na jej zakończenie a wynik odrzucam.

6. Natychmiast odpalam (nie zatrzymując przetwornika) trzy kolejne konwersje pod rząd. Wynik każdej z nich odczytany z ADCH będzie jasnością kolejnego rządka czujników. Wyniki zapamiętuję w odpowiednich strukturach danych. Odliczam licznik już zapamiętanych linii.

7. Znów odliczam licznik - tym razem odstępu między skanowanymi liniami czyli między czujnikami, za każdym razem oczywiście liczę opadające zbocza SYNC.

8. Po złapaniu odpowiedniej liczby linii dlasza część ramki TV już mnie nie interesuje (został jeszcze cały dolny/prawy margines) i mogę zająć się analizą danych.

Kolejne wywołanie funkcji spowoduje ponowną synchronizację do początku najbliższej ramki TV i powtórzenie skanu.

Proste, prawda? 🙂

Acha, czasy A i B dodam jak dobiorę się do innego komputera. Są one dość oczywiste i wynikają wprost z długości impulsów synchronizacji i długości linii TV.

  • Lubię! 1
Link do komentarza
Share on other sites

Nadal mam problem ze zrozumieniem pewnej rzeczy, poniżej zamieszczam oscylogram(z oscyloskopu zrobionego z komputera):

widać na nim że:

*"narysowanie" 312 lini( kreślenie pół obrazu, 20ms/64us= 312.5) trwa 20ms (50Hz);

*czas rysowania 1 lini trwa 64us (20ms/64us = 312.5);

*Wydaje mi sie ze sygnał synchronizacji powinien pojawiać sie co każdą linie a tu pojawia sie co 312 lini.

*analizując to dalej 1 linia(64us) będzie miała zawsze tą samą jasność, którą można odczytać z amplitudy(kolejny oscylogram)

*narazie bez zadnych obróceń obraz ryzuje sie tak(to pomiędzy synchronizajcą a liniami to sygnał burst):

-->------>----- linia 1, czy ta linia ma zawsze taką samą jasność?

-->------>-----

.

.

-->------>----- linia 312

to taki rysunek poglądowy wiem ze lini nie bd dokladnie 312, bo sa jeszcze linie których nie widać.

Chyba ze to wsystko wynika ze złego oscyloskopu(to tylko karta dzwiękowa), gdybyś mógł zamiascic swoje oscylogramy o ile takie posiadasz było by ekstra.

Link do komentarza
Share on other sites

Jeżeli dobrze zrozumiałem problem, to nie widzisz impulsów synchronizacji poziomej tak? Karta dźwiękowa ma pasmo 20kHz lub mniej. Jak chcesz zobaczyć na takim "oscyloskopie" wszystkie składowe sygnału o paśmie 5MHz ? Przecież impulsy HS mają długość niecałych 5us. Twój sampler audio pobiera kolejne próbki w najlepszym razie co 25us (przy 40kHz) a jest poprzedzony filtrem antyaliasingowym tnącym wszystko co jest szybsze niż jakieś 18kHz.

Nie podaję żadnych oscylogramów. To co widziałem w czasie eksperymentów z kamerką było dokładnie takie, jak przewiduje norma dla zespolonego sygnału wizji PAL. Nie ma co tego powielać. Otwórz sobie stronę z definicją tego sygnału i to co dostaniesz z kamery będzie właśnie tak wyglądało:

http://martin.hinner.info/vga/pal.html

Wracając do Twoich pytań:

- Tak, kilka pierwszych linii i kilka ostatnich w każdej ramce jest czarnych - to pozostałość po odbiornikach analogowych, gdzie czas powrotu strumienia elektronów z dołu do góry nie był zerowy i trzeba było na czas kilkunastu linii wygasić go całkowicie.

- To samo dzieje się w okolicach impulsu synchronizacji poziomej. Tam też linia zaczyna się i kończy czernią ale z trochę innego powodu. Telewizor musi odtwarzać tzw. poziom czerni i robi to właśnie na podstawie "głębokości" impulsów synchronizacji, które "zapadają" się poniżej czerni w dokładnie określony sposób i na określoną "głębokość". Inaczej nigdy by nie wiedział, jak duży musi być sygnał by zrobić biały pixel.

- Impuls synchronizacji pola (ramki) nie jest ciągłym, długim "zerem" bo w tym czasie "rozjechałby" się generator synchronizacji poziomej (znów odwołanie do telewizorów analogowych). Wewnątrz impulsu VSYNC wstawiane są impulsy które podtrzymują fazę generatora poziomego.

- Czy wspomniałem o polach parzystych i nieparzystych i przesunięciu fazy o pół linii co drugą ramkę?...

No tak, jest tego trochę ale w sumie całość jest dość prosta i spójna. Najfajniejsze jest to, że w tym samym sygnale czarno-białym zdefiniowanym w latach 40(?) zdołano upchnąć jeszcze kolor plus teletekst i to wszystko tak, by normalny czarno-biały telewizor tego nie zauważył. Spryciarze 🙂

EDIT: literówki

  • Lubię! 1
Link do komentarza
Share on other sites

Faktycznie przecież karta dzwiękowa nie ma szas złapac czestotliwości powyżej 20kHz.Dzięki teraz już zrozumiałem w tych 64us znajduje się informacja o synchronizacji poziomej, i "ilości, jasności pikseli w lini", Tak?

Link do komentarza
Share on other sites

O ilości pikseli to raczej nie. Pamiętaj, że jest to sygnał analogowy, ciągły, w zamyśle odtwarzany na analogowym telewizorze. Wielkość napięcia w danej chwili decyduje o jasności danego miejsca na ekranie - tak jest w podstawowej wersji sygnału czarno-białego i to musiało zostać utrzymane by nawet najstarszy telewizor prawidłowo czarno-biały obraz odtwarzał. Jeżeli spróbkujesz to cyfrowo, dostaniesz piksele ale nie ma sensu robić tego częściej jak ok 10MHz (dla czarno-białego) bo i tak pasmo sygnału to 5MHz. Dlatego przyjmując długość efektywnej części linii, tej niosącej obraz za ok. 54us dostaniesz max. 540 pikseli w linii. Reszta czasu "marnuje się" na wygaszanie przed i po oraz sam impuls HSYNC.

Link do komentarza
Share on other sites

Dlatego dałem to w czudzysłów 🙂, u Ciebie w ciągu 64us, a raczej 52us robisz 3 pomiary adc, dzięki czemu wylapie Ci 3 punkty o danej jasności w linii. Jeszcze jedno pytanko: u siebie w projekcie dałeś napięcie odniesienia dla komparatora równe 0.2v, w internecie wycztytałem ze wynosi ono 0.3v,czy to z powodu lepszej obróbki w programie? Wybacz moją niewiedzę na ten temat, ale akurat takich rzeczy uczę sie od nie dawna, ale myśle że od tego jest forum aby pomagać tym słabszym 🙂

Link do komentarza
Share on other sites

Poziomy napięć o których piszesz odnoszą się do standardowego sygnału, gdzie biały to 0.7V a poziom czerni to 0.3V. Nie mogę przecież ustawić poziomu odcięcia komparatora na czerń. Musi być niżej, by w sposób pewny detekował synchronizację. Poza tym jak już napisałem te napięcia odnoszą się do typowego sygnału. Moja kamerka dawała sygnał czerni na poziomie ok. 1V a biały to było coś ok. 3V. To oczywiście normalne, bo jej wyjście jest pewnie dopasowane do obciążenia 75R i po dołączeniu takiego opornika (do masy) wszystko wróciłoby do normy. Mi jednak te wysokie poziomy bardzo pasowały do przetwornika A/C (a szczerze mówiąc brakowało mi pasma wzmacniacza by podciągnąć mu wzmocnienie do x3 i zachować BW ponad 5MHz) a kabelek był króciutki i nie było problemów z niedopasowaniem. W pierwszym przybliżeniu wstawiłem normalną diodę i poziomem detekcji było 0.65V ale niestety szybki komparator wykrywał też sygnał burst który od góry "zjeżdżał" do tego poziomu. W PALu jest on zaraz za HSYNC i algorytm głupiał. Mogłem wstawić prosty filtr RC np. 2MHz - wyciąłby burst ale też lekko opóźnił zbocza synchronizacji więc ale wybrałem opcję obniżenia progu przez zmianę diody.

Nie masz za co przepraszać. Po prostu to zrób 🙂

Link do komentarza
Share on other sites

Witam. Temat trochę starawy ale bardzo ciekawy, więc myślę że fajnie było by go kontynuować. Dziwne że jeszcze nie został przedstawiony lf z taką kamerką. Może będę pierwszy 😉 .

Małe pytanko, czy lm324 nie będzie za wolny w funkcji detekcji sygnału synchronizacji?

Link do komentarza
Share on other sites

Małe pytanko pomocnicze: czy opona 205/50R16 nadaje się do mojego samochodu?

Nie wiesz? To skąd ja mam wiedzieć czy ten wzmacniacz nadaje się do jakiegoś Twojego układu?

Mała podpowiedź: jeden rzut oka do danych katalogowych - pierwsze trafienie przeglądarki na zapytanie "LM324" - i nie trzeba nawet wczytywać się w cyfry w tabelkach bo są proste przebiegi czasowe. Przy pracy małosygnałowej, liniowej LM324 potrafi zmienić napięcie na wyjściu o 200mV w 1us. Jeśli chcesz mieć na wyjściu amplitudę kilku woltów (praca z przesterowaniem, oparta już tylko o slew-rate), musisz się liczyć z czasem rzędu 10us. Nałóż sobie teraz na to impuls HSYNC, pomyśl jakich sygnałów potrzebujesz na wyjściu i sam sobie odpowiedz. Dla ułatwienia: czy gdzieś w danych katalogowych występuje zwrot "high speed comparator?".

Naprawdę szczerze kibicuję Twojemu LFowi ale przyłóż się bardziej bo odpowiedź na Twoje pytanie nie wymaga jakiegoś głębokiego doświadczenia ani wielu lat praktyki elektronicznej tylko minuty przy komputerze więc.. powodzenia 🙂

Link do komentarza
Share on other sites

Małe pytanko pomocnicze: czy opona 205/50R16 nadaje się do mojego samochodu?

Nie wiesz? To skąd ja mam wiedzieć czy ten wzmacniacz nadaje się do jakiegoś Twojego układu?

Miałem na myśli Pana układ. Pytałem by się upewnić, w nocie max to 1Mhz. Ponieważ zmontowałem na lm324 i nie otrzymuję prawidłowego sygnału synchronizacji pionowej.

Ale racja, najpierw powinienem zagłębić się bardziej w widmo sygnału PAL, lecz szukam i szukam czegoś konkretnego w internecie i znajduje same jakieś ogólne informację.

Może ktoś ma ciekawą stronę/link z szczegółowym opisem co w tym sygnale się dzieje?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.