Skocz do zawartości

[Czujniki] Czujnik przesunięcia z myszki optycznej


Elvis

Pomocna odpowiedź

Schemat z datasheetu jest następujący:

To co wydaje mi się, że zrobiłem na zdjęciach zamieszczonych w poprzednim poście wygląda chyba następująco:

Jeżeli chodzi o kod, to próbowałem różnych modyfikacji (załączam przykładowe dwie):

- w pierwszej czytałem bezpośrednio rejestry dx oraz dy z innych adresów,
- w drugiej sprawdzałem, czy jestem w stanie zapisać zmiany w jakimś rejestrze i potem je odczytać ( z kiepskim skutkiem).

Pozdrawiam,
Karol

P.S.

Dodam tylko, że z podłączenie wydaje mi się raczej w porządku, ponieważ dioda świeci oraz reaguje na ruch zwiększając jasność.

kod modyfikacja 2.txt

kod modyfikacja.txt

kod podstawowy.txt

Link do komentarza
Share on other sites

Ale stary temat...

W każdym razie jeśli odczytujesz 255 z rejestrów dx, dy, to wcale nie taka zła wartość. Kodowanie jest U2, więc 255 to po prostu -1, czyli całkiem niewielkie przesunięcie.

Problem z tym detektorem jest taki, że zwraca on za każdym razem przesunięcie względem poprzedniego odczytu. Więc jeśli nie pobierzesz wyniku, a detektor wczyta następną wartość, to utracisz wyniki uzyskane wcześniej. O ile widzę, po każdym odczycie wysyłasz dane przez RS-232. Pamiętaj, że taka transmisja trwa strasznie długo. Więc wszystkie odczyty w tym czasie będą zgubione. W moim programie odczytywałem w pętli 100 razy dane z czujnika, i dopiero wtedy wysyłałem dane przez RS. Dzięki temu wyniki chociaż czasem były w miarę dokładne. Oczywiście najlepiej byłoby wykorzystać przerwania i nie gubić danych.

Link do komentarza
Share on other sites

Dzięki za odpowiedź. Oczywiście spróbuję wykorzystać powyższą wskazówkę i dam znać jak poszło.. Rozumiem, że podczas "diagonostyki" kodu nie powinienem wpisywać funkcji odczytu rejestru bezpośrednio w Serial.print(). Ale niestety wartości dx oraz dy nie zmieniają się w ogóle, już na samym początku. Pierwotny program najpierw odczytuje i przetwarza dane, a później je wysyła, więc odczyty mogą być zgubione ale powinny być przynajmniej różne. I też nie wiem jak odnieść się do tego, że zmieniają się te wartości rejestrów, które nie powinny.

Link do komentarza
Share on other sites

Niestety chyba nie w tym problem. Zrobiłem następujący eksperyment:

- główną część programu, bez "serial.print" zamknąłem w pętli do 100,
- w ww. pętli zapisuję odczytane wartości rejestrów dx, dy ( w różnych wersjach są to 0x03, 0x02 lub 0x17, 0x18 lub 0x43, 0x42),

- następnie w kolejnej pętli wypisuję te wartości przez serial.print i czekam 10 s.

Oczywiście tak zmodyfikowany program nie ma zastosowania, posłużył tylko do diagnostyki problemu. To czekanie 10 s zrobiłem dla wygody. Gdyby problemem było przepełnianie, to według mnie tylko pierwsza wartość w tablicach dx i dy powinna być błędna. Pozostałe powinny wynosić 0 (lub przynajmniej wartość stałą) jeżeli myszka się nie porusza i dawać różne odczyty w zależności od prędkości poruszania myszką.

Tymczasem wynik jest następujący:

0x03 - czyta stałą wartość 255

0x02 - waha się ok. 70

0x17 - czyta stałą wartość 133

0x18 - czyta stałą wartość 0

0x43 - czyta stałą wartość 255

0x42 - czyta stałą wartość 0

W załączeniu przesyłam kod i proszę o ew. dalsze sugestie 🙂

mysz_forbot_02.txt

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

Moze sprobuj wyrzucic:

WriteAddr(CONF,LORES);

[ Dodano: 10-04-2015, 14:06 ]

Sprobuj jeszcze odczytac rejestry: 0x01 i 0x41. Wartosc PID jaka tam powinna byc jest w dokumentacji. Jesli odczytasz cos innego, znaczy ze jest problem z komunikacja.

Link do komentarza
Share on other sites

Mocno uprościłem kod i skupiłem się na komunikacji (sam odczyt). Z rejestru 0x01 odczytuje mi "10000000" jeżeli mysz jest w spoczynku i "1xxxxxxx" (gdzie x=0 lub 1) jeżeli poruszam myszą. Product ID wg dokumentacji jest w 3 pierwszych bitach i powinien wynosić 000, także nie bangla 😕

Próbowałem też modyfikować funkcję ReadAddr() (trochę w ciemno, bo nie wiem co może być źle, na przykład zmieniałem typy argumentów na "byte" 😋) albo przenieść jej zawartość na sztywno do void loop().... i nic 😕

mysz_forbot_12.txt

Link do komentarza
Share on other sites

Możesz jeszcze spróbować wyrzucić opóźnienie przed odczytem. Albo chociaż najpierw zmieniać pin na wejście, a później czekać.

Ale myślę, że powinieneś dokładnie sprawdzić wszystkie połączenia, upewnić się, że sck to sck, a data to data. Ewentualnie sprawdź, czy to na pewno ten układ, który powinien być. Najlepiej byłoby podłączyć oscyloskop i sprawdzić, co się dzieje na liniach.

Link do komentarza
Share on other sites

Rowniez zamierzam sprobowac zastosowac nyszy optyczne zamiast enkoderow. Do tej pory udalo mi sie przerobic optyke w myszy Logitech. Usunalem plastikowa soczewke, a zamiast niej zamocowalem obiektyw od kamery plytkowej. Odleglosc od obiektywu do podloza wynosi okolo 3 cm. Istniejacy czerwony LED pozostawilem, jednak do oswietlenia powierzchni dolutowalem 2 biale LEDy dodatkowo swiecace wprost w dol. Kursor na ekranie porusza sie prawie 10x wolniej niz w przypadku myszy przed przerobka. Mysz dziala przy oddalaniu obiektywu od podloza od 3 do 5 cm. NIe zawsze dziala nad ciemna powierzchnia, mmozliwe, ze musze dodac jeszcze 2 LEDy z przeciwnej strony obiektywu.

test myszy optycznych.avi

827941332_myszzobiektywem.thumb.JPG.3d20c7414421b28b36c1f18c1dbd8383.JPG

570970512_myszzprzetwornikiemADNS2610.thumb.JPG.92e35b44c3618dc8eee26943dd28fc57.JPG

1359185217_Dodatkowe2LEDy.thumb.JPG.bb8669a2fcff1abe982962c25360cf22.JPG

486571761_Dokreconenowenogimyszy.thumb.JPG.cd8c5f36308a2cee0b89acd288073caf.JPG

Link do komentarza
Share on other sites

Marekk, dodam dla formalności, że w niektórych przeglądarkach nie działa już podgląd wgrywanych filmów jako załączniki (brak kompatybilności z niektórymi wtyczkami). Najlepiej filmy umieszczać po wcześniejszym wgraniu ich np. na YouTube 🙂

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.