Vielen Dank für deine Erklärung, nur glaube ich, dass wir von verschiedenen ICs reden. Ich hab einen AS5048A, in deinem Link schreibst du aber von einem AS5043.
Wahrscheinlich hast du dich da verlesen, kann ja mal passieren.
Bei meinem IC soll man nämlich auch etwas senden können, nicht nur auslesen.
Das mit dem manuellen SS über zwei Bytes werd ich mal ausprobieren, das war ein guter Tipp.
Edit: das &hffff sollte eigentlich heißen: ich will auf das register &h3fff (angle-register) zugreifen, zusätzlich aber eben noch bit 14 (read) und bit 15 (parity) gesetzt -> wird zu &hffff
Edit²:
Hab das jetzt mal ausprobiert, hab die Adressen in Byte-Arrays geschrieben und die SS-Leitung auf einen anderen Pin gesetzt. Ergebnis ist immernoch das Gleiche wie vorher. Hier der Code:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 1 , Clockrate = 128
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , _
Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
Config Lcd = 20 * 4
Cursor Off
Cls
Config Portb.3 = Output
Portb.3 = 1
Spiinit
Dim Anglereg(2) As Byte
Dim Errorreg(2) As Byte
Anglereg(1) = &HFF
Anglereg(2) = &HFF
Errorreg(1) = &H40
Errorreg(2) = &H01
Dim Angle(2) As Byte
Wait 1
Portb.3 = 0
Angle(1) = Spimove(errorreg(1) , 2)
Portb.3 = 1
Do
Portb.3 = 0
Angle(1) = Spimove(anglereg(1) , 2)
Portb.3 = 1
Cls
Locate 1 , 1
Lcd Angle(1)
Locate 1 , 5
Lcd Angle(2)
Waitms 10
Loop
Edit³:
Ich glaub, ich habs jetzt:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 1 , Clockrate = 128
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , _
Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
Config Lcd = 20 * 4
Cursor Off
Cls
Config Portb.3 = Output
Portb.3 = 1
Spiinit
Dim Anglereg(2) As Byte
Dim Errorreg(2) As Byte
Anglereg(1) = &HFF
Anglereg(2) = &HFF
Errorreg(1) = &H40
Errorreg(2) = &H01
Dim Angle(2) As Byte
Wait 1
Portb.3 = 0
waitus 10
Angle(1) = Spimove(errorreg(1) , 1)
Angle(2) = Spimove(errorreg(2) , 1)
waitus 10
Portb.3 = 1
Do
Portb.3 = 0
waitus 10
Angle(1) = Spimove(anglereg(1) , 1)
Angle(2) = Spimove(anglereg(2) , 1)
waitus 10
Portb.3 = 1
angle(1)=angle(1) and &b00111111
Cls
Locate 1 , 1
Lcd Angle(1)
Locate 1 , 5
Lcd Angle(2)
Waitms 10
Loop
Sende die Bytes jetzt wirklich einzeln. Dachte eigentlich, wenn ich angle(1)=SPIMOVE(anglereg(1),2) angebe, dass er dann automatisch das Byte an der nächsten Stelle als nächstes sendet und auch ins Folgende schreibt, aber anscheinend hab ich das missverstanden. Nun lese ich ab 6 12x (ein bisschen verrauscht, letzte Stelle springt schön, muss ich wohl noch ein wenig filtern) und wenn ich den Magneten drehe 6 3x
Lesezeichen