12-Bit aus SPI in Word speichern
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
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
ja das speed=1 habe ich rausgenommen, war nur ein test obs am zu schnellen clocken lag :>
Mode hatte ich nicht probiert. Hatte einen MCP-DAC, welcher mit der einstellung einwandfrei funktionierte, deshalb habe ich dies einfach genommen und auf input umgeschrieben. Wusste nich das es ein anderer mode war :\
Ich probiere das mal aus, sieht auch logisch aus, auch wenn ich ähnliches schon getestet habe, aber nur ähnlich ;)
Mit Bit0 als nicht zubeachtend meinst du bit1? Das ist laut DB das letzte?
Danke schonmal für die Hilfe
Edit:
Jaaa es funktioniert :D Danke danke danke
Habe das *256 aber durch ein shift,left,8 ersetzt. Hoffe das ist schneller ;)
Hier das ergebniss (pwm aus sinuskurve)
https://www.dropbox.com/s/fjk8k29iwo..._0086.JPG?dl=0
Edit2: Mode brauchte ich garnicht ;)