Swordfish Basic
Штатные модули работы с SPI под сомнение не ставим, ибо а) пробовал не использовать модули и делать на асме (с аюсолютно тем же результатом) и б) два других компонента на плате — ОЗУ и SD-карта отлично работают. И вообще все всегда работало. Проблема только с этим ЦАП.
Код
Program Test
Device = 18F2550
Clock = 24
Config //8M crystal
PLLDIV = 2, //4M for PLL
USBDIV = 2, //48M use PLL/2
CPUDIV = OSC3_PLL4, //For PLL - 24M
FOSC = HSPLL_HS, //HS with PLL
VREGEN = ON,
MCLRE = OFF,
PWRT = ON,
BOR = OFF, //!!!
BORV = 2, //!!!
WDT = OFF,
WDTPS = 32 //128 msec
//#option WDT = false
Const ipLow = 1
Const ipHigh = 2
#option SPI_SCK = PORTB.1
#option SPI_SDI = PORTB.0
#option SPI_SDO = PORTC.7
Include "System"
Include "Utils"
Include "SPI"
Dim ACT_LED As PORTB.5
Dim ADC_nCS As PORTC.2
//////////////////////////////////////////////////////////
Sub InitHW()
//Set all ports to digital operation
SetAllDigital()
//Set port pins direction
Output(ACT_LED)
Output(ADC_nCS)
//Deselect chip
ADC_nCS = 1
End Sub
Sub InitSPI()
SPI.SetAsMaster(spiOscDiv16) //24M/16=1.5Mbps
SPI.SetSample(spiSampleMiddle) //Default
End Sub
///////////////
Sub ADC_SetSPImode()
SPI.Enabled = false
SPI.SetClock(spiIdleLow, spiFallingEdge) //SPI mode 1
SPI.Enabled = true
End Sub
Sub ADC_Write(Data As Word)
ADC_nCS = 0
SPI.WriteByte(Data.Byte1)
SPI.WriteByte(Data.Byte0)
ADC_nCS = 1
End Sub
Sub ADC_Init()
//Set 1.024 volts reference and Fast mode
ADC_Write(%1001000000000001)
End Sub
Sub ADC_OutAB(A As Word, B As Word)
Dim Temp As Word
//
//Write B to Buffer
Temp = (B And $0FFF) Or %0001000000000000
ADC_Write(Temp)
//Out A as A and Buffer as B
Temp = (A And $0FFF) Or %1000000000000000
ADC_Write(Temp)
End Sub
//***********************************************
//************ Start of program *****************
//***********************************************
InitHW
InitSPI
//
ACT_LED = 0
//
ADC_SetSPImode()
ADC_Init()
//Main loop
While True
ADC_OutAB(4095, 4095)
Delayms(100)
Wend
End
Я так подозреваю, что следующим пунктом будут попрошены осциллограммы?