Czujnik ruchu- mała matryca CCD. Pytania.

Dyskusje ogólne na temat "cyfrówki" czyli wszystko o TTL/CMOS, językach VHDL i VERILOG, bramkach, rejestrach, przerzutnikach... Dobre miejsce na pytania odnośnie uniwersalnych programatorów (np. Willem) a także podłączania własnych peryferiów do komputera PC.
ODPOWIEDZ
Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Czujnik ruchu- mała matryca CCD. Pytania.

Post autor: Jasam » 25 cze 2008, 18:11

Mam parę egzemplarzy układu ADNS2610 ,który jest czujnikiem ruchu stoswanym w myszach optycznych. Tutaj jest nota --> http://cp.literature.agilent.com/litweb ... 9774EN.pdf
O ile wywnioskowałem to ten układ komunikuje się za pomocą I2c. Znalazłem protokół przesyłu i rejestry (na przykład rejestr ruchu x i y, oraz co najciekawsze jeden rejestr moze byc wykorzystany do skanowania obrazu z niewielką rodzielczością- Można z niego rpzechwycić obraz 18*18 pikseli z wbu8dowanej w układ matrycy CCD). Chciałbym za pomocą procesora AVR (bascom) odczytywać z niego dane jak z pamieci eeprom. Tam jest rozpisane: który rejestr(bajt) jaką informację niesie. Nie moge tylko znalećc w nocie jaki jest adres bazowy do odczytu i zapisu tego układu (tak jak na przykłąd dla eepromu 160 i 161). Pomóżcie jeśli wiecie coś na ten temat proszę.

[ Dodano: 2008-06-25, 19:12 ]
Ten gość zrobił coś podobnego ale za pomoca komputera odczytywał dane z rejestru matrycy ccd tak, że mógł odczytywać obraz widziany przez tą prymitywnę "kamerę" --> http://spritesmods.com/?art=mouseeye

dla eepromu at24c256 moja funkcja odczytu wygląda tak:

Kod: Zaznacz cały

Function Czytaj(byval Adres As Word) As Byte
Local Msb As Byte
Local Lsb As Byte
Local Dane As Byte

Lsb = Adres And 255
Shift Adres , Right , 8
Msb = Adres And 255

I2cstart
I2cwbyte 160    'adres bazowy-zapis
I2cwbyte Msb    'adres
I2cwbyte Lsb       ' adres
I2cstart
I2cwbyte 161     ' adres bazowy-odczyt
I2crbyte Dane , Nack
I2cstop
Czytaj = Dane
End Function
Jeslibym chciał na przykład odczytać z rejestru drugiego (przesuniecie y) to jakby mozna przerobić tą funkcję? Nie rozumiem czemu nie widze w tej nocie adresów bazowych.

[ Dodano: 2008-06-25, 19:52 ]
Znalazłem coś co może pomoże wam mi pomóc. Ocyfrowałem część tego programu na komputer, który napisał ten gość. Nie potrafię odczytać z tego kodu adresu, ale może komuś kto bardziej się na tym zna się uda. To funkcja odczytu i procedura zapisu jak widać. Ale gdzie są adresy bazowe układu i adresy rejestrów? Proszę o wytłumaczenie jeśli ktoś to rozumie.

Kod: Zaznacz cały

Private Sub spisend(a As Integer, d As Integer)
Dim p, n, x As Integer
p = Val(portsel.Text)
a = a Or &H80
For x = 7 To 0 Step -1
    If (a And (2 ^ x)) <> 0 Then n = 8 Else n = 0
    Out p, n
    Out p, n + &H80
Next
For x = 7 To 0 Step -1
    If (d And (2 ^ x)) <> 0 Then n = 8 Else n = 0
    Out p, n
    Out p, n + &H80
Next
End Sub


Private Function spirecv(a As Integer)
Dim p, n, d, x As Integer
Dim t As Single
p = Val(portsel.Text)
a = a And &H7F
For x = 7 To 0 Step -1
    If (a And (2 ^ x)) <> 0 Then n = 8 Else n = 0
    Out p, n
    Out p, n + &H80
Next
Out p, n + &H80
Out p, n + &H80
n = 8: d = 0
For x = 7 To 0 Step -1
    Out p, n
    Out p, n + &H80
   ' t! = Timer + 0.0001: While t! > Timer: DoEvents: Wend
    d = d * 2
    If (Inp(p + 1) And &H20) <> 0 Then d = d + 1
Next
spirecv = d
End Function

Awatar użytkownika
Ertew
Użytkownik
Posty: 1414
Rejestracja: 03 lip 2005, 10:36
Lokalizacja: Leszno
Kontakt:

Post autor: Ertew » 28 cze 2008, 17:10

Transmisja I2C posiada linie SCL i SDA, jest wynalazkiem pewnej firmy i została opatentowana.

Ten układ posiada linie SCK i SDIO. Zasada komunikacji jest podobna, jednak nie może być identyczna z powodu patentu.

Z dokumentacji: http://cp.literature.agilent.com/litweb ... 9774EN.pdf wykika, że adres rejestru jest pierwszym bajtem wysyłanym przez magistrale do układu (na str. 18 jest ich lista). Adres kładu jest 7 bitowy (jak w I2C), jednak wybór zapis/odczyt jest dokonywany zmianą pierwszego, a nie ostatniego bitu (str. 12 i 13). Dane odczytujemy z podanych adresów, a zapisujemy używając adresów o 128 większych.

Jasam
Użytkownik
Posty: 422
Rejestracja: 27 mar 2007, 21:09

Post autor: Jasam » 29 cze 2008, 5:37

To wiem... Ale mi chodzi czy za pomocą komend do transmisjii I2c z boscoma można odczytać coś z tych rejestrów. A jesli nie i2crbyte to co?

ODPOWIEDZ