#define SSD1306_RST PIN_D4
#include <18F4520.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 8MHz)
#use I2C(MASTER, I2C1, FAST = 400000, stream = SSD1306_STREAM) // Initialize I2C
// Include SSD1306 OLED driver source code
#include <SSD1306OLED.c>
#define SPI_MODE_0 (SPI_L_TO_H | SPI_XMIT_L_TO_H)
#define SPI_MODE_1 (SPI_L_TO_H)
#define SPI_MODE_2 (SPI_H_TO_L)
#define SPI_MODE_3 (SPI_H_TO_L | SPI_XMIT_L_TO_H)
#define CS_PIN PIN_B4 //Chip Select
#define CLK_PIN PIN_B5 //Serial Clock
#define DI_PIN PIN_B6 //Serial Data In
#define Up PIN_A0
#define Down PIN_A1
#define Select PIN_A2
// End specification for pins
void DigPot();
void initializeDigPot();
unsigned short t=0;
unsigned int16 Mask=0x7000|Mask;
void initializeDigPot(int InitialValue)
//----------------------------------------------
{
setup_spi(SPI_MASTER | SPI_MODE_3 | SPI_CLK_DIV_16 );
output_high(CS_PIN);
}
void DigPot(int Mask)
//----------------------------------------------
//used for MCP41xxx Microchip digital pot
// 0x00 = wiper at PB0, 0xFF wiper at PA0
{
output_low(CS_PIN);
delay_us(1);
spi_write(Mask);
delay_us(1);
for (t=0; t<16; t++){
delay_cycles(2);
if((Mask&0x8000) == 0) output_low(DI_PIN);
else output_high(DI_PIN);
output_high(CLK_PIN);
Delay_us(5);
output_low(CLK_PIN);
Mask = Mask << 1;
}
output_high(CS_PIN);
}
void main()
{
initializeDigPot();
while(1)
{
digpot(1024);
output_high(CS_PIN);
Delay_us(5);
}
return;
}