Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Kamerka PO6030k nie chce wysyłać danych z rejestrów

arekpalinski 02 Dec 2010 17:32 2730 22
Computer Controls
  • #1
    arekpalinski
    Level 2  
    Zakupiłem niedawno moduły kamer CAM-PPV401-VGA z procesorem obrazu PO6030k.

    Próbowałem skomunikować się z kamerką poprzez I2C, kamerka wystawia sygnał ACK w odpowiedzi na zaadresowanie jej zarówno do odczytu jak i zapisu, wystawia również sygnał ACK w odpowiedzi na przesyłany adres rejestru do odczytu/zapisu, jednakże po zaadresowaniu do odczytu jakiegokolwiek rejestru, zamiast zawartości rejestru kamera przesyła w większości przypadków 0x00 (czasem 0x06), ale nie zależy to od adresów rejestrów - odczytując te same rejestry kamera wysyła różne wartości w przy kolejnych próbach odczytania tego samego rejestru (reset procesora i kamery przed każdą kolejną próbą odczytu).
    Komunikacja przez I2C jest możliwa tylko, gdy na wejściu MCLK nie ma żadnego sygnału zegara, nie działa, gdy kamera jest w stanie STANDBY (choć według dokumentacji jest to możliwe).

    Bez zmienianych ustawień przez I2C (domyślne wartości rejestrów), kamerka wystawia na wyjściu dane, pixel clock oraz sygnały synchronizacji pionowej i poziomej, jednakże stan wysoki sygnałów synchronizacji jest na poziomie ok. 600 mV. Wszystkie pozostałe sygnały są na poziomie 3,3 V. Problem występuje niezależnie od częstotliwości taktowania kamerki (testowałem na 20 MHz, 400 kHz oraz 20 kHz).

    Kamerka jest na początku za każdym razem resetowana przez 10 ms, po tym linia resetu jest wysoka. Linia STANDBY jest cały czas niska.

    Kamerka jest zasilana napięciami:
    DVDD - 1,8 V
    HVDD - 3,3 V
    AVDD - 2,6 V

    Czy ktoś zaobserwował podobne działanie kamerki czy też coś robię źle?

    Arek
  • Computer Controls
  • #2
    godmode
    Level 14  
    Przed resetem należy podać 16 cykli zegara MCLK o częstotliwości 24MHz.
    Dopiero po pełnym power-up'ie możliwe jest odczytanie rejestrów.
  • #3
    arekpalinski
    Level 2  
    Czy do odczytu rejestrów konieczne jest podawanie zegara MCLK? Czy musi to być zegar o częstotliwości 24 MHz?

    Cała inicjalizacja kamerki wygląda teraz następująco:

    podanie do kamerki zegara 20 MHz,
    czekaj 1 ms ,
    RESET = 0,
    STANDBY = 0,
    czekaj 10 ms,
    RESET = 1;
    wyłączenie zegara.

    Teraz kamerka podaje na wyjście zawsze 0x60 niezależnie od rejestru z którego odczytuję dane.
    Wyłączenie zegara jest konieczne, żeby móc komunikować się po I2C (nie wiem czy jest to wina procesora - PIC24FJ192GB106, bo widziałem już trochę dziwnych rzeczy związanych z PIC-ami, czy też wina kamery).
  • Computer Controls
  • #4
    godmode
    Level 14  
    Nie rozumiem czemu Pan twierdzi, że konieczne jest zaprzestanie podawania zegara aby komunikować się po I2C - ja takiej informacji nigdzie nie znalazłem i nie rozumiem jaki to ma związek z procesorem jakiego Pan używa. No chyba, że ten PIC nie daje rady, co wcale nie jest dziwne jeśli ten uC nie ma kontrolera kamery. Podawanie 24MHz (MCLK oraz kolejny zegar PCLK=24MHz) i z taką częstotliwością odczytywanie danych z portów DATA zablokuje cały procek - tylko na to starczy mu czasu.

    Tutaj znajduje się dokumentacja:
    http://download.maritex.com.pl/pdfs/op/PO6030K-2.pdf

    strona 58:
    1) Podłączamy zasilanie
    2) RSTB=GND, podajemy 16 taktów zegara MCLK o częstotliwości 24MHz (w dokumentacji wyraźnie napisali, że tylko z takim zegarem kamera będzie działać)
    3) Po 16 taktach zegara RSTB=VCC, i dopiero wtedy rejestry kamery są wypełniane poprawną informacją, a wcześniej to jak jest zaznaczone niewiadomo co tam będzie.
    4) Po tym i tak trzeba odczekać jakiś czas żeby móc komunikować się po I2C - to wszystko jest na rysunku i w tekście.
  • #5
    m_nowy
    Level 2  
    Możliwe że wątek już przestarzały ale wtrące swoje trzy grosze.

    Nie jest prawdą, że ta kamera będzie pracowała z MCLK tylko i wyłącznie równym 24Mhz. Ja podaje jej MCLK = 750 khz i działa bardzo dobrze. Co prawda przy intensywnym oświetleniu obraz jest prześwietlony, jednak nie zmienia to faktu że kamera działa nawet z tak wolnym zegarem sterującym.

    Zauważyłem również, że interfejs I2C kamery nie działa w momencie gdy nie podajemy MCLK. Nawet jeżeli podamy najpierw 16 cykli zegara na początku w celu uzupełnienia rejestrów to później w momencie odłączenia MCLK kamera najzwyczajniej milczy.
  • #6
    daymoon
    Level 11  
    Czy jest tu ktoś na forum kto zakupił większą ilość złączy :

    Złącze Kyocera 24-5602-024-000-829 do modułu kamery CAM-PPV401-VGA

    Dystrybutor kamery firma Maritex załamuje ręce i nie potrafi ściągnąć tego złącza(od pół roku) tłumacząc , że musieli by zamówić większą ilość tzn. kilka tysięcy sztuk. W sumie dobrze ich rozumie, ekonomia rządzi....
    Ze względu na to że jest to dosyć ciekawy temat proszę nie przerzucać mojego postu na bazar ponieważ tam nikt mi nie pomoże.
  • #7
    tymon_x
    Level 30  
    daymoon wrote:
    Złącze Kyocera 24-5602-024-000-829 do modułu kamery CAM-PPV401-VGA

    Kontakt z firmą Kyocera, inaczej się nie da. Zrobiłem kilka płytek i Maritex taki numer wywinął. Powinni sprzedawać w komplecie, bo tak m.i. panowie z GSM wykupili te złącza :/ Spróbuj jeszcze na chińskich bazarach internetowych... został jak na razie zakup z zagranicą (np. EarthTronLLC).
    m_nowy wrote:
    Zauważyłem również, że interfejs I2C kamery nie działa w momencie gdy nie podajemy MCLK. Nawet jeżeli podamy najpierw 16 cykli zegara na początku w celu uzupełnienia rejestrów to później w momencie odłączenia MCLK kamera najzwyczajniej milczy.

    W przerzutnikach nie siedzą małe ludziki, co napędzają machinę, jakąś musi to być taktowane :D
  • #8
    al.bundy
    Level 1  
    daymoon wrote:
    Czy jest tu ktoś na forum kto zakupił większą ilość złączy :

    Złącze Kyocera 24-5602-024-000-829 do modułu kamery CAM-PPV401-VGA

    Dystrybutor kamery firma Maritex załamuje ręce i nie potrafi ściągnąć tego złącza(od pół roku) tłumacząc , że musieli by zamówić większą ilość tzn. kilka tysięcy sztuk. W sumie dobrze ich rozumie, ekonomia rządzi....


    Zdaje sie, ze teraz nie da sie kupic nawet kamery, bo sprzedaja ja razem ze zlaczem.

    Ja mam 4 zlacza - dwa typu 24-xxxxxxxxxxx i dwa typu 14-xxxxxxxxxxxx (te drugie wedlug dokumentacji tez powinny pasowac), zamowilem jako bezplatne probki od producenta.

    Odnosnie podlaczenia kamery, w jaki sposob najlepiej wytworzyc potrzebne tej kamerze napiecia 1.5 lub 1.8V, 2.8V majac do dyspozycji 3.3V lub 5V z mikrokontrolera ?
  • #9
    tymon_x
    Level 30  
    al.bundy wrote:
    Zdaje sie, ze teraz nie da sie kupic nawet kamery, bo sprzedaja ja razem ze zlaczem.

    Prosto ze źródła firmy Kyocera, kiedy wysłałem zapytanie o sample, okazało się że mają pójść z partią do Polski m.i. do Maritex'u. Brak zestawu złącza + kamera, jest tym razem spowodowany brakiem tego drugiego :D

    al.bundy wrote:
    Odnosnie podlaczenia kamery, w jaki sposob najlepiej wytworzyc potrzebne tej kamerze napiecia 1.5 lub 1.8V, 2.8V majac do dyspozycji 3.3V lub 5V z mikrokontrolera ?.

    Ja tam mam przetwornice w topologi buck do 3.3V, a dalej VLDO na AVDD 2.8V (LP3985), na rdzeń DVDD 1.5V (MCP1702) natomiast na IO (m.i. I2C) 3.3V HVDD (niestety więcej prądu żre).
  • #10
    schmitek
    Level 11  
    Witam,

    a czy Ktoś dysponuje biblioteką do eagla tych złącz (
    kyocera 24-5602-024-000-829 ) ?

    Pozdrawiam
    WS
  • #11
    galsan
    Level 12  
    Witam, przepraszam za może głupie pytanie, mam tą samą kamerkę z tymże złączem o którym mowa w temacie, który pin jest pierwszy? :-P bo kamera cudownie na przeciwległych rogach ma xGND i nie mogę sobie zmierzyć.. podejrzewam tylko, że jak patrzę face-to-face na kamerkę czyli obiektyw w moją stronę zwrócony to pierwszy pin to ten w lewym górnym rogu a ostatni w lewym (prawym?) dolnym?
  • #13
    daymoon
    Level 11  
    schmitek wrote:
    Witam,

    a czy Ktoś dysponuje biblioteką do eagla tych złącz (
    kyocera 24-5602-024-000-829 ) ?

    Pozdrawiam
    WS


    Ja kiedyś coś takiego tworzyłem , ale nie udało mi się zrobić płytki bo przerwy pomiędzy ścieżkami są tak małe że termotransfer wysiada , jeszcze raz bede próbował ale tym razem metoda oparta o POSITIV. Jak znajdę plik to wrzucę....
  • #14
    fogon
    Level 11  
    daymoon wrote:
    ścieżkami są tak małe że termo-transfer wysiada

    raster 0,4mm to wcale nie jest coś z przy czym termo-transfer wysiada...
    wystarczy dobra drukarka (1200dpi) i trochę wprawy we własnym sprzęcie do termo-transferu i i w domowym zaciszu bez większych problemów wszystko wychodzi.

    Jakby ktoś chciał to posiadam footprint'a pod to złącze do altiuma.
  • #15
    galsan
    Level 12  
    Wiem, że temat trochę już dawno rozpoczęty, ale nie chcę niepotrzebnie zakładać podobnego. Mam pytanie co do I2C. Dokumentacja podaje, że piny SDAT i SCLK są wewnętrznie podciągnięte do VDD. W takim razie gdyby nie podczas przeprowadzania transmisji i w ogóle bez podłączonego mastera zmierzyć napięcie na tych pinach, powinno ono wnosić właśnie to VDD, prawda? Męczę się trochę z tą kamerką bo (mam słabszy procek i nadzieję, że uda się ją faktycznie taktować mniejszym MCLK), przykładam woltomierz i pokazuje mi 0V, czasem 0,1V na SDAT.
  • #16
    fogon
    Level 11  
    Albo masz złą dokumentację albo źle interpretujesz zawarte w niej informację, "The SCLK and SDAT lines are pulled up to VDD by a 2kΩ off-chip resistor."
    Tak więc muszą być 2k rezystory przy każdej linii, generalnie wewnętrzne rezystory przy I2C to nie jest dobry pomysł i raczej z tego co mi wiadomo nie stosowana praktyka...no ale to inny temat...
    Co do MCLK to można taktować mniejszymi częstotliwościami bez problemów... jak w tygodniu znajdę chwilkę to sprawdzę zakres.
  • #17
    galsan
    Level 12  
    Dzięki, spróbuję więc podłączyć pull`upy, no kwestia interpretacji, jak piszą, że "are pulled up" to odbieram to tak, że są już podłączone ;-) Zastanawiam się jeszcze nad samym I2C, powyżej @m_nowy pisał, że kamera milczy gdy nie ma MCLK, trochę dziwne, czy faktycznie nie wystarczy SCLK od mastera.. I takie pytanie, mój procek (STM32F103) jest taktowany max 72MHz. I zastanawiam się jak taktować kamerkę, z doświadczenia przekonałem się że przy zew. generatorze 24MHz nie ma na to szans. Zastanawiałem się nad 8MHz bo dzięki MCO mogę wystawić sobie przebieg kwarcu na pin i chciałem obsługiwać przerwanie zewnętrzne od PCLK kamerki, tylko to chyba też do końca nie wyrabia. Widziałem, że ktoś gdzieś podawał kamerce takty strobując po prostu w pętli while.. w zasadzie to działa, tzn. wiem tyle, że wysyłane są właściwe przebiegi VSYNC i HSYNC (tyle tylko mogę sprawdzić na ruskim słabszym oscyloskopie), ale problem widzę w I2C, skoro muszę taktować kamerkę to na chwilę komunikacji I2C zamiera mi sygnał taktujący kamerkę jeśli strobuję w pętli.. :/

    EDIT:

    Podłączyłem te pull`upy, faktycznie ruszyła komunikacja, ale jest z nią problem. Kiedy czytam rejestry kamery zawsze dostaję tą samą wartość "96", jest to wartość która odpowiada rejestrowi DeviceID_H (high) który leży w grupie A rejestrów. Czyli tak jakby zawsze kamera dostawała adres 0 do odczytania.. Oto funkcja czytająca:

    Code: c
    Log in, to see the code


    EDIT:
    Ok, działa, mogłem od razu posłuchać kolegi @m_nowy, fakt, I2C nie działa bez MCLK.
  • #18
    fogon
    Level 11  
    Nie wiem jaki to problem, masz przecież MCO- który możesz ustawić np. 24MHz, albo PWM który możesz dowolnie ustawić... sprzętowo jest to obsłużone więc nie musisz się martwić "wyrabianiem" procesora. A taktowanie w pętli to jakiś chory pomysł, za przeproszeniem...jest to najgorsze i najmniej efektywne rozwiązanie, zwłaszcza że procek który używasz ma odpowiednie peryferia do tego.
    Można np. użyć przerwań od timera aby machać... ale znów po co jak lepiej sprzętowo.
    Co do obsługiwania przerwania od PCLK, to nie wiem co dokładnie chcesz robić ale warto jakąś pamięć a najlepiej bufor FIFO podłączyć żeby się nie martwić o "wyrabianie" się procesora.
  • #19
    galsan
    Level 12  
    No ok, ale jeśli sprzętowo będę taktował np. przez MCO to przecież muszę chyba wiedzieć kiedy odebrać dane, no i powiadamia mnie o tym PCLK, no a skoro PCLK to sygnał z zewnątrz czyli albo uruchomię przerwanie no albo czekam w pętli, da się to zrobić jakoś inaczej przy użyciu MCO?

    No bo wiadomo, że sprzętowo zawsze jest lepiej, ale te dane trzeba jakoś odbierać, jeśli chodzi o 24MHz to mogę nawet generator zewnętrzny podłączyć, bo mam taką opcję na płytce którą sobie zrobiłem z tym FIFO no to już gorzej
  • #20
    fogon
    Level 11  
    galsan wrote:
    ...I zastanawiam się jak taktować kamerkę, z doświadczenia przekonałem się że przy zew. generatorze 24MHz nie ma na to szans. Zastanawiałem się nad 8MHz bo dzięki MCO mogę wystawić sobie przebieg kwarcu na pin i chciałem obsługiwać przerwanie zewnętrzne od PCLK kamerki, tylko to chyba też do końca nie wyrabia. Widziałem, że ktoś gdzieś podawał kamerce takty strobując po prostu w pętli while...


    galsan wrote:
    No ok, ale jeśli sprzętowo będę taktował np. przez MCO to przecież muszę chyba wiedzieć kiedy odebrać dane, no i powiadamia mnie o tym PCLK, no a skoro PCLK to sygnał z zewnątrz czyli albo uruchomię przerwanie no albo czekam w pętli, da się to zrobić jakoś inaczej przy użyciu MCO?


    Ktoś tu strasznie miesza...
    rozdzielmy dwie sprawy... sygnał taktujący kamerkę (MCLK) i sygnał taktujący piksele (PCLK).
    Co do MCLK to obojętnie czy to zewnętrzny generator czy sygnał z uC nie ma to wpływu na późniejszy odbiór danych. Kamerka po prostu tak jak uC potrzebuje po prostu sygnału zegarowego, koniec.

    Odbiór danych możesz wykonywać na różne sposoby
    na pewno musisz mieć linię HSYNC, jeśli ta kamerka nie ma (a chyba nie ma) kodowania nowej ramki to też trzeba mieć inie VSYNC.
    no i podłączone te dwie linię do procka już wystarczą- np. przerwanie od VSYNC odblokowuję Ci przerwanie od HSYNC w którym w odpowiednich odstępach czasowych sczytujesz dane o pikselach. Po sczytaniu linii masz trochę czasu (zależnie od rozdzielczości jaką masz ustawioną) na zrobienie coś z tymi danymi...
    Problem jest tu odpowiedniej synchronizacji czasowej... dlatego warto też podłączyć linię PCLK. można tylko na liniach VSYNC i PCLK...

    Problem jaki tu jest to to co chcesz z tymi danymi robić... to determinuje odświeżanie i wielkość obrazu...bo skoro nie masz dodatkowej pamięci to najprawdopodobniej nie jesteś w stanie złapać całego obrazu(To zależy oczywiście od rozmiarów obrazu i pamięci procesora- nie wiem jaką 103 wybrałeś ale pewnie nie inwestowałeś w pamięć). Dlatego warto pomyśleć o liniowym przetwarzaniu- wykorzystywać przerwy między przesyłem kolejnych linii obrazu.

    Co do czekania w pętli... w pętli możemy tylko czekać na przerwanie, na nic więcej...chociaż powinniśmy procesorowi dać odpocząć i usypiać go a nie biednego trzymać w oczekiwaniu na przerwanie...
  • #21
    galsan
    Level 12  
    Kamera ma linię HSYNC, MCLK jest sygnałem wejściowym a PCLK wyjściowym, który informuje o tym że mamy do odczytania równoległy port na którym został wystawiony nowy piksel. moim zdaniem zrobienie odstępów czasowych jest trochę ryzykowne, bo czy nie zdarzy wbić się o parę mikro czy mili sekund za wcześnie lub za późno i coś zgubić? No i dlatego preferowałbym PCLK. Nie zależy mi na wydajności, chcę po prostu sczytać poprawnie obraz o rozdzielczości mniejszej niż VGA, mogę wybrać dowolną wielkość okna np. QQVGA. Nie można też korzystać z samego VSYNC i PCLK bo będzie się sczytywało piksele z poza okna zainteresowania (effective window), trzeba jeszcze posłużyć się HSYNC który jest zawsze w stanie wysokim gdy jesteśmy w obszarze okna zainteresowania. np. PCLK strobuje zawsze nawet na dummy pikselach, a HSYNC jest tam w stanie niskim. coś pokombinuję...
  • #22
    fogon
    Level 11  
    Można by było z VSYNC i PCLK tylko znów czasowo trzeba to odpowiednio zaprogramować, lecz znów jest problem żeby to zawsze było zsynchronizowane i nie gubiło niczego...
    Dlatego najlepiej 3 przerwania, wtedy masz nie musisz się martwić o synchronizację, kolejno przerwania VSYNC->HSYNC->PCLK
    zrób tak żeby się zagnieżdżały w ten sposób to nie będzie problemów...
    powodzenia...