PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SPI an der C-Control, ist es so richtig?



Amiwerewolf
30.11.2007, 20:16
läuft das programm so?
ich hab keine SPI komponente da um es zu testen!



'//////////////////////////////////////
'
' Basic++
' Controller: C-Control I Unit M2.0
' Station2
' Beschreibung: Ansteuerung einer SPI-Komponente
' Datum: 30.11.07
'
'//////////////////////////////////////

OPTION CC2.0


DEFINE SLCK AS BIT 'später durch PORT ersetzten
DEFINE SDI AS BIT 'später durch PORT ersetzten
DEFINE SDO AS BIT 'später durch PORT ersetzten
DEFINE CS1 AS BIT 'später durch PORT ersetzten

DEFINE data as byte

#main
init_spi() 'SPI INITIALISIERN
spi(12) 'Byte 12 an Bus senden
data = spi(0) 'Byte am Bus lesen
print data 'gelesenes byte ausgeben
END

SUB init_spi() 'SPI Initialisieren
CS1 = ON 'SPI Slave 1 dekativieren
'CSn = OFF 'ggf. weitere Slaves deaktiveren
SLCK = ON 'Clock Initialisieren
pause 1
END SUB

FUNCTION spi(spiodata as byte [3]) 'R/W auf SPI
DEFINE spicount as byte
DEFINE spiidata as byte [4]
DEFINE spiibit as bit [32]
DEFINE spiobit as bit [24] 'letztes Bit aus spiodata [BYTE3]
FOR spicount = 0 to 8
nop(200)
SLCK=0 'Abfallende Flanke des Clocks
nop(100)
SDO = spiobit 'SDO Bit Setzen
spiodata = spiodata shl 1 'Daten vorbereiten
nop(200)
spiidata = spiidata shl 1 'Daten vorbereiten
SLCK=1 'Steigende Flanke des Clocks
nop(100)
spiibit = SDI 'Daten Einlesen
NEXT
RETURN spiidata
END SUB

SUB nop(nop_time as byte) 'Prozessorwartezeit
DEFINE nop_timecounter AS Byte
FOR nop_timecounter = 1 to nop_time)
NEXT
END SUB
[/code]

Dierk
06.12.2007, 07:56
Habe leider gerade keine SPI Komponente zur Hand und habe mich eigentlich noch nie mit SPI beschäftigt. Sieht aber recht einfach aus.
In der Function SPI würde ich aber die Bytes nicht festnageln und besser define ref at verwenden.


FUNCTION spi(spiodata as byte) 'R/W auf SPI
DEFINE spicount as byte
DEFINE spiidata as byte
DEFINE spiibit ref spiidata at bit[8]
DEFINE spiobit ref spiodata at bit[8] 'letztes Bit aus spiodata
FOR spicount = 0 to 8
nop(200)
SLCK=0 'Abfallende Flanke des Clocks
nop(100)
SDO = spiobit 'SDO Bit Setzen
spiodata = spiodata shl 1 'Daten vorbereiten
nop(200)
spiidata = spiidata shl 1 'Daten vorbereiten
SLCK=1 'Steigende Flanke des Clocks
nop(100)
spiibit = SDI 'Daten Einlesen
NEXT
RETURN spiidata
END SUB

Amiwerewolf
06.12.2007, 22:05
ich habs angefangen fest zu setzten weil ich um ein FAT16 dateisytem aufzuauben viele variablen brauchen werde, evtl. eine c-control alein dazu benutzen weil sie damit ausgelastet ist!

qayqay
14.03.2008, 16:22
hallo, ich habe deinen code für ccontrol an spi gelesen. ich kenne mich mit dem protokoll nicht aus, benötige es aber zur nutzung eines sprachbausteins. wie ich den design guide (http://www.techs-store.com/support/manual/isd1700/isd1700_eman.pdf . hier seite 39) verstehe, muss ich für "play" einen command-und ein data-byte eingeben, also 0x40 und 0x00. könntest du mir freundlicherweise helfen, wie ich deinen code verändern muss um dies zu erreichen?

ich hab mal angefangen mit: DEFINE ScK port[7] 'später durch PORT ersetzten
DEFINE SDo port[6] 'später durch PORT ersetzten
DEFINE ss port[8] 'später durch PORT ersetzten
DEFINE data as byte
DEFINE spicount as byte
DEFINE spiobit as bit [16]'letztes Bit aus spiodata [BYTE2]

#main
init_spi() 'SPI INITIALISIERN
spi(40h) 'Byte 12 an Bus senden
ss=1 'gelesenes byte ausgeben
END

SUB init_spi() 'SPI Initialisieren
ss = ON 'SPI Slave 1 dekativieren
'ss = OFF 'ggf. weitere Slaves deaktiveren
SCK = ON 'Clock Initialisieren
pause 1
END SUB

FUNCTION spi(spiodata as byte [2])
FOR spicount = 0 to 8
nop(200)
SCK=0 'Abfallende Flanke des Clocks
nop(100)
SDO = spiobit 'SDO Bit Setzen
spiodata = spiodata shl 1 'Daten vorbereiten
nop(200)
SCK=1 'Steigende Flanke des Clocks
nop(100)
NEXT
END SUB

SUB nop(nop_time as byte) 'Prozessorwartezeit
DEFINE nop_timecounter AS Byte
FOR nop_timecounter = 1 to nop_time
NEXT
END SUB

was muss ich ändern?