Driver for MCP23S17 using SPI bus CODE: MCP23S17.bas
|
|
Driver for AD9833 using SPI bus CODE: ad9833.bas 'AD9833 module example code D0=16:D1=5:D2=4:D3=0:D4=2:D5=14:D6=12:D7=13:D8=15:D9=3:D10=1 SCK=D5:MISO=D6:MOSI=D7:SS=D8 ' AD9833 ref datasheet 'http://www.analog.com/media/en/technical-documentation/data-sheets/AD9833.pdf ' MCP41010 ref datasheet ' http://ww1.microchip.com/downloads/en/DeviceDoc/11195c.pdf FSY = D8 ' pin for AD9833 chip select(FSY) pin on module pin(FSY) = 1 Pin.Mode FSY, output POT_CS = D0 ' pin for MCP41010 chip select (CS) pin on module pin(POT_CS) = 1 Pin.Mode POT_CS, output 'set frequency couunter on PIN 5 (D1) Counter.setup 1, D1, 1 'set SPI to mode 3 spi.setup 1000000, 3 AD9833_reset AD9833_level 150 freq = 1000 wave = 2 ' sine level = 150 ' output level AD9833_SetFreq freq, wave 'define simple web page cls sp$ = string$(5, " ") a$ = "" a$ = a$ + "FREQUENCY " + textbox$(freq) + "<br><br>" a$ = a$ + "OUTPUT LEVEL " a$ = a$ + "<input type='number' data-var='level' onkeypress='cmdKeypress(event)'" a$ = a$ + "onchange='cmdChange(event)' min='0' max='255' value='150'><br><br>" a$ = a$ + button$("Sine", sine) + sp$ + button$("Triangle", triangle) + sp$ a$ = a$ + button$("Square", square) a$ = a$ + "<br><br>" a$ = a$ + "Counter parameters<br>" a$ = a$ + "Counter <input type='text' data-var='counter.count(1)'><br>" a$ = a$ + "Frequency <input type='text' data-var='counter.freq(1)'><br>" a$ = a$ + "Period <input type='text' data-var='counter.period(1)'>" html a$ onHtmlChange change_values autorefresh 1000 wait sine: wave = 2 AD9833_SetFreq freq, wave return triangle: wave = 1 AD9833_SetFreq freq, wave return square: wave = 3 AD9833_SetFreq freq, wave return change_values: AD9833_SetFreq freq, wave AD9833_level level return '--------- FUNCTIONS ---------------------- ' set the potentiometer level from 0 to 255 sub AD9833_level(level) local a pin(POT_CS) = 0 a = SPI.Word(level or &h1100) pin(POT_CS) = 1 end sub 'reet the AD98333 sub AD9833_reset local a Pin(FSY) = 0 a = SPI.WORD(&h2100) ' reset and B28 a = spi.word(&hc000) ' phase = 0 Pin(FSY) = 1 end sub ' sets the frequency (Hz) and waveform output ' mode is 1 for triangle, 2 for sine, 3 for square Sub AD9833_SetFreq(Freq, mode) Local a, f, f1, f2, m oscillator = 25000000 'Crystal frequency f = (Freq * (1 << 28)) \ oscillator f1 = (f And &H3FFF) Or &H4000 f2 = (f >> 14) Or &H4000 Pin(FSY) = 0 select case mode case 1 m = &h02 ' triangle (bit MODE) case 2 m = 0 ' sine case else m = &h28 ' square ( bits OPBITEN and DIV2) end select a = SPI.WORD(&H2000 or m) ' B28 no reset + wave mode a = spi.word(f1) ' 14 bits MSB a = spi.word(f2) ' 14bits LSB Pin(FSY) = 1 End Sub | |
Examples >