ich arbeite bei einem Projekt mit dem 7705, sollte soweit von der Ansteuerung her gleich sein ... der Deine hat halt nur einen Kanal.
Ach so, die Ref-Spannung muss auch da sein und sauber (!)
Bei mir hängt der DRDY auf Int0, also nicht wundern.
Dieser wird bei mir auf fallende Flanke getriggert.
die Initalisierung:
Code:
Sub Ad7705_init(ad_channel)
Local Subbyte As Byte
Local Subbyte_2 As Byte
Local Subword As Word
Disable Int0
Ddrd = Ddrd And &B11111110
' clock
Ad7705_sel = 1
Ad7705_spi_array(1) = &H20
Ad7705_spi_array(1) = Ad7705_spi_array(1) Or Ad_channel
'Ad7705_spi_array(2) = &H11
Ad7705_sel = 0
Waitms 1
Spiout Ad7705_spi_array(1) , 2
Waitms 1
Ad7705_sel = 1
Ad7705_spi_array(1) = &H10
Ad7705_spi_array(1) = Ad7705_spi_array(1) Or Ad_channel
Ad7705_spi_array(2) = &H44
Ad7705_sel = 0
Waitms 1
Spiout Ad7705_spi_array(1) , 2
Waitms 1
Ad7705_sel = 1
Do
Loop Until Pind.0 = 0 'drdy
Do
Loop Until Pind.0 = 1 'drdy
Ad7705_spi_array(1) = &H10
Ad7705_spi_array(1) = Ad7705_spi_array(1) Or Ad_channel
Ad7705_spi_array(2) = &H44
Ad7705_sel = 0
Waitms 1
Spiout Ad7705_spi_array(1) , 2
Waitms 1
Ad7705_sel = 1
Enable Int0
End Sub
Die Daten gibts mit:
Code:
Function Ad7705_read(ad_channel)
Local Sub_tempword As Word
Ad7705_sel = 1
Ad7705_spi_array(1) = &H38 'ad7705_data_register_read
Ad7705_spi_array(1) = Ad7705_spi_array(1) Or Ad_channel
Call Write_ad7705_byte(ad7705_spi_array(1))
Ad7705_read = Read_ad7705_word()
End Function
Reset für den ADC:
Code:
Sub Adc_interface_reset()
Disable Int0
Ad7705_sel = 0
Waitms 3
Ad7705_spi_array(1) = &HFF
Ad7705_spi_array(2) = &HFF
Ad7705_spi_array(3) = &HFF
Ad7705_spi_array(4) = &HFF
Spiout Ad7705_spi_array(1) , 4
Waitms 3
Ad7705_sel = 1
Enable Int0
End Sub
und ganz wichtig, den Clock nicht vergessen, ohne geht da nix.
Bei mir erzeuge ich die mit nem Mega128 und Timer ... nicht besonders schön, spart aber zusätzliche Bauteile.
Lesezeichen