Spi mcp4822
Spi mcp4822
#include <p18F4520.h>
#include <delays.h>
#include "..\tipos.h"
#include "..\int_defs_C18.h"
uint8 tabla[256]= {
0x80,0x83,0x86,0x89,0x8C,0x8F,0x92,0x95,0x98,0x9B,0x9E,0xA2,0xA5,0xA7,0xAA,0xAD,
0xB0,0xB3,0xB6,0xB9,0xBC,0xBE,0xC1,0xC4,0xC6,0xC9,0xCB,0xCE,0xD0,0xD3,0xD5,0xD7,
0xDA,0xDC,0xDE,0xE0,0xE2,0xE4,0xE6,0xE8,0xEA,0xEB,0xED,0xEE,0xF0,0xF1,0xF3,0xF4,
0xF5,0xF6,0xF8,0xF9,0xFA,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xFA,0xF9,0xF8,0xF6,
0xF5,0xF4,0xF3,0xF1,0xF0,0xEE,0xED,0xEB,0xEA,0xE8,0xE6,0xE4,0xE2,0xE0,0xDE,0xDC,
0xDA,0xD7,0xD5,0xD3,0xD0,0xCE,0xCB,0xC9,0xC6,0xC4,0xC1,0xBE,0xBC,0xB9,0xB6,0xB3,
0xB0,0xAD,0xAA,0xA7,0xA5,0xA2,0x9E,0x9B,0x98,0x95,0x92,0x8F,0x8C,0x89,0x86,0x83,
0x80,0x7C,0x79,0x76,0x73,0x70,0x6D,0x6A,0x67,0x64,0x61,0x5D,0x5A,0x58,0x55,0x52,
0x4F,0x4C,0x49,0x46,0x43,0x41,0x3E,0x3B,0x39,0x36,0x34,0x31,0x2F,0x2C,0x2A,0x28,
0x25,0x23,0x21,0x1F,0x1D,0x1B,0x19,0x17,0x15,0x14,0x12,0x11,0x0F,0x0E,0x0C,0x0B,
0x0A,0x09,0x07,0x06,0x05,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x05,0x06,0x07,0x09,
0x0A,0x0B,0x0C,0x0E,0x0F,0x11,0x12,0x14,0x15,0x17,0x19,0x1B,0x1D,0x1F,0x21,0x23,
0x25,0x28,0x2A,0x2C,0x2F,0x31,0x34,0x36,0x39,0x3B,0x3E,0x41,0x43,0x46,0x49,0x4C,
0x4F,0x52,0x55,0x58,0x5A,0x5D,0x61,0x64,0x67,0x6A,0x6D,0x70,0x73,0x76,0x79,0x7C};
http://artico.lma.fi.upm.es/numerico/antonio/blog/spi_mcp4822.c 1/2
15/3/2018 artico.lma.fi.upm.es/numerico/antonio/blog/spi_mcp4822.c
// CS line
#define DAC_CS LATCbits.LATC1
#define DAC_CS_dir TRISCbits.TRISC1
#define select_DAC DAC_CS=0
#define deselect_DAC DAC_CS=1
// SSPCON1bits.SSPEN=1; TRISC=0b00010000;
// SSPCON1bits.CKP=0; SSPSTATbits.CKE=1; // SPI mode (0,0)
// SSPSTATbits.SMP=0;
// SSPCON1 = (SSPCON1 & 0xF0) | speed;
}
void main()
{
uint16 d=0;
uint16 msg;
//uint8 b0,b1;
uint16 v;
// TRISC=0;
while(1)
{
msg = d + 0x1000; //b0=msg&0xFF; b1=msg>>8;
// select_DAC; spi_tx(b1); spi_tx(b0); deselect_DAC;
send_msg(msg);
v = tabla[d&0xFF]; v<<=4;
msg = v + 0x9000; //b0=msg&0xFF; b1=msg>>8;
//select_DAC; spi_tx(b1); spi_tx(b0); deselect_DAC;
send_msg(msg);
http://artico.lma.fi.upm.es/numerico/antonio/blog/spi_mcp4822.c 2/2