Hi,
habe einen MCP3201 ADC an einem Atmega8.
Das problem ist, ich bekomme nie die richten werte, habe schon einiges probiert. Da er ja bytes einliest habe ich es erst mit einem array von bytes probiert und versucht diese zusammen zu fügen.
Dann habe ich probiert es direkt in ein Word zu schreiben. Irgendwie bekomme ich nie die richtigen ergebnisse.
Code:
Config Spi = Soft , Din = Pinc.4 , Ss = Portc.3 , Clock = Portc.5 , Speed = 1
Spiinit
Declare Function Readadc() As Integer
Do
Largein = Readadc()
Largein = Largein - 2048
Largein = Largein / 8
If Largein >= 0 Then Highval = Largein Else Highval = 0
If Largein < 0 Then Lowval = Abs(largein) Else Lowval = 0
If Highval > Timer0 And Out2 = 0 Then Out1 = 1 Else Out1 = 0
If Lowval > Timer0 And Out1 = 0 Then Out2 = 1 Else Out2 = 0
Loop
Function Readadc() As Integer
Spiin Bytes(1) , 2
Temp = Bytes(1)
Shift Temp , Left , 4 '10101010->101010100000 (left part of 12bit)
Outcome = Temp + Bytes(2) '101010100000 + 00001010 = 101010101010
Readadc = Outcome
End Function
Das ist der Code wos drauf ankommt. Wie liesst Spiin denn ein? Laut datenblatt des MCP bekomme ich erst MSB, wenn die 12-Bit ausgelesen sind geht es LSB weiter. Also steht ja in einem eingelesenen Word mehr als sollte und in zwei bytes auch, weshalb ich shift versucht habe aber nie das richtige ergebniss bekam...
Ich hoffe ihr könnt helfen.
MfG Vader
Lesezeichen