Ich versuche den A-D Wandler über SPI zum laufen zu bringen aber beim lesen der Daten gibt es kein logisches Ergebnis.
Verschaltet habe ich:
IOW Pin 22 (MISO) ------- AD7714 Pin 21 (Dout)
IOW Pin 23 (MOSI) ------- AD7714 Pin 22 (Din)
IOW Pin 21 (SCK) ------- AD7714 Pin 1 (SCLK)
IOW Pin 4 (DRDY) ------- AD7714 Pin 20 (DRDY)
IOW Pin 24 (SS) -------- AD7714 Pin 19 (CS)
Lt. Datenblatt muss das Configurationsregister mit der Adresse des Registers beschrieben werden wohin die Daten
geschrieben oder gelesen werden.
1. Adresse in das Register schreiben.
2. Werte in das adressierte Register schreiben oder aus diesem Register lesen.
Die Messwerte werden aus dem Datenregister mit einer Länge von 3 Byte gelesen.
Bei dem Wandler soll das lesen und schreiben parrallel simultan erfolgen.
Muß ich nach jeden Schreibbefehl sofort lesen??
Ich habe keine Erfahrung mit SPI. Einen anderen Wandler MCP3421 mit I2C habe ich am laufen. Funktioniert einwandfrei.
Ich habe den Code zum Initialisieren des IOW24 und des AD7714 angefügt.
Bei der initialisierung des AD-Wandlers habe ich alternativen Code mal mit angefügt aber das funktioniert auch nicht.
Muss man beim Testen der möglichen Einstellungen Report ID 08 Byte Enable bit CPOL und CPHA jedesmal das USB-Kabel
trennen oder kann man die Einstellungen direckt übertragen??
Ich habe noch einen IOW56 und einen Dongel (IOW56) könnte es damit besser funktionieren weil lt. Datenblatt eine etwas
andere konfiguration möglich ist und die Geschwindigkeit wesentlich höher ist.???
Beim Schreib oder lesezugriff zeige ich das Ergebnis der Variablen "IOW" an. Ergebnis 8 oder 9 scheint ok zu sein.
Hoffe einer kann mir helfen. Vielen Dank in vorraus!!!
Code: Select all
SUB Init_IOW (BYVAL hdlg AS LONG)'IOW24 Initialisieren
IowHandles(0) = IowKitOpenDevice() 'IO-Warrior öffnen
IF IowHandles(0) = 0 THEN
MSGBOX "Kann IOW24 nicht Öffnen", 0, "Fehler"
END IF
Daten(0) = 8 'IOW24 SPI Anwählen
Daten(1) = 1 'SPI Ein
Daten(2) = 3 'Takt auswahl
Daten(3)=0:Daten(4)=0:Daten(5)=0:Daten(6)=0:Daten(7)=0:Daten(8)=0
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)'
END SUB
'-----------------------------------------------------------------------
SUB Init_AD7714_SPI (BYVAL hdlg AS LONG)'AD-Wandler Initialisieren
Daten(0) = 9 'Anwahl IOW24 Schreiben
Daten(1) = 1 'Flags IOW24 1 Byte senden
Daten(2) = 36 'Communicationsregister (Anwahl Filter High Register)
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
Daten(0) = 9
Daten(1) = 1
Daten(2) = 76 'Wert nach Filter High Register
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
Daten(0) = 9
Daten(1) = 1
Daten(2) = 52 'Communicationsregister (Anwahl Filter Low Register)
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
Daten(0) = 9
Daten(1) = 1
Daten(2) = 28 'Wert nach Filter Low Register
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
Daten(0) = 9
Daten(1) = 1
Daten(2) = 20 'Communicationsregister (Anwahl Mode Register)
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
Daten(0) = 9
Daten(1) = 1
Daten(2) = 32 'Wert nach Mode Register
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
'################## Alternativ ??? ###############################
Daten(0) = 9 'Anwahl IOW24 Schreiben
Daten(1) = 1 'Flags IOW24
Daten(2) = 36 'Communicationsregister (Anwahl Filter High Register)
Daten(3) = 76 'Wert nach Filter High Register
Daten(4) = 52 'Communicationsregister (Anwahl Filter Low Register)
Daten(5) = 28 'Wert nach Filter Low Register
Daten(6) = 20 'Communicationsregister (Anwahl Mode Register)
Daten(7) = 32 'Wert nach Mode Register
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
END SUB
'---------------------------------------------------------------------------
SUB Messwert_AD7714_lesen_mit_Flag (BYVAL hdlg AS LONG)'MessWerte Einladen
M001:
Daten(0) = 9
Daten(1) = 1 '1Byte
Daten(2) = 12 'Comunicationsregister Lesen 1Byte
Daten(3)=0:Daten(4)=0:Daten(5)=0:Daten(6)=0:Daten(7)=0:Daten(8)=0
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
Daten(0) = 9
Daten(1) = 1
Daten(2)=0:Daten(3)=0:Daten(4)=0:Daten(5)=0:Daten(6)=0:Daten(7)=0:Daten(8)=0
Iow = IowKitRead(iowHandles(0), 1, Daten(0), 8)
IF BIT (Daten(2),7) =1 THEN GOTO M001 'Bit 7Low? Daten Ok
Daten(0) = 9
Daten(1) = 3 'Schreiben 3Byte um 3Byte zu lesen
Daten(2) = 92 'Communicationsregister (Anwahl Lesen Datenregister)
Daten(3)=0:Daten(4)=0:Daten(5)=0:Daten(6)=0:Daten(7)=0:Daten(8)=0
Iow = IowKitWrite(iowHandles(0), 1, Daten(0), 8)
Daten(0) = 9
Daten(1) = 3 'Lesen Datenregister 3 Byte
Daten(2)=0:Daten(3)=0:Daten(4)=0:Daten(5)=0:Daten(6)=0:Daten(7)=0:Daten(8)=0
Iow = IowKitRead(iowHandles(0), 1, Daten(0), 8)
DatenL = Daten(2)
DatenM = Daten(3)
DatenH = Daten(4)
Messwert = DatenL
Messwert = Messwert + (DatenM * 255)
Messwert = Messwert + (DatenH * 65535)
END SUB