Witam!! Potrzebuję odczytać zawartość rejestrów układu ADNS-2051 (sensor firmy Agilent z myszki optycznej). Komunikacja z układem odbywa się za pomocą linii SCLK i SDIO. W internecie znalazłem program do komunikacji z układem ADNS-2610 (układ bardzo podobny tylko inne adresy rejestrów). Program po lekkiej modyfikacji niestety nie chce się komunikować a ADNS-2051. Nie mogę odczytać ani zapisać żadnego rejestru. Docelowo program ma znajdować adres najjaśniejszego pixela za pomocą opcji pixel dump. Jestem raczej początkującym programistą więc proszę kogoś o sprawdzenie poniższego programu i wskazanie gdzie tkwi błąd. Poniżej zamieszczam link do datasheeta ADNS-2051.
http://www.chem.duke.edu/~boris/datasheets/ADNS-2051%20optical%20mouse%20sensor.pdf
http://www.chem.duke.edu/~boris/datasheets/ADNS-2051%20optical%20mouse%20sensor.pdf
$regfile = "m16def.dat"
$crystal = 8000000
Ddr_sck Alias Ddrd.6
Ddr_sdio Alias Ddrd.7
Port_sck Alias Portd.6
Port_sdio Alias Portd.7
Pin_sdio Alias Pind.7
Declare Sub Adns2610_init()
Declare Sub Adns2610_write_byte(byval Write_byte As Byte)
Declare Function Adns2610_read_byte() As Byte
Declare Sub Adns2610_write_operation(byval Address_byte As Byte , Byval Data_byte As Byte)
Declare Function Adns2610_read_operation(byval Address_byte As Byte) As Byte
Config Lcd = 16 * 2
Call Adns2610_init()
Dim Read_adress As Byte
Dim Read_data As Byte
Read_data = 0
Read_adress = 0
Cursor Off
Do
Read_data = Adns2610_read_operation(&H07)
Lcd Read_data
Waitms 200
Cls
Loop
End
Sub Adns2610_init:
Ddr_sck = 1
Ddr_sdio = 1
Port_sck = 1
Port_sdio = 1
Call Adns2610_write_operation(&H00 , &H80)
Call Adns2610_write_operation(&H00 , &H01)
End Sub
Sub Adns2610_write_byte(byval Write_byte As Byte)
Local I As Byte
Ddr_sdio = 1
For I = 7 To 0 Step -1
Port_sck = 0
Port_sdio = Write_byte.i
Waitus 1
Port_sck = 1
Waitus 1
Next I
Ddr_sdio = 0
Port_sdio = 0
End Sub
Function Adns2610_read_byte() As Byte
Local I As Byte
Local Data_byte As Byte
Waitus 250
For I = 7 To 0 Step -1
Port_sck = 0
Waitus 1
Port_sck = 1
Data_byte.i = Pin_sdio
Next I
Adns2610_read_byte = Data_byte
End Function
Sub Adns2610_write_operation(byval Address_byte As Byte , Byval Data_byte As Byte)
Address_byte = Address_byte Or &B10000000
Call Adns2610_write_byte(address_byte)
Call Adns2610_write_byte(data_byte)
End Sub
Function Adns2610_read_operation(byval Address_byte As Byte) As Byte
Call Adns2610_write_byte(address_byte)
Adns2610_read_operation = Adns2610_read_byte()
End Function