Difference between revisions of "PIC32MX: I2C DAC"

From Mech
Jump to navigationJump to search
Line 18: Line 18:
== Code ==
== Code ==


Our code:
''
#include <HardwareProfile.h>
#include <HardwareProfile_NU32.h>
#include <plib.h>


// Configuration Bit settings
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 50 KHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
//
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2

// DEFINES

#define SYSCLK (80000000) // set system clock to 80MHz
#define PBCLK (SYSCLK/1000) // set PBCLK to 80 KHz

#define Fsck 50000
#define BRG_VAL ((PBCLK/2/Fsck)-2)

#define Nop() asm( "nop" ) //allows for a pause command

// a simple puase command
void i2c_wait(unsigned int cnt)
{
while(--cnt)
{
Nop();
Nop();
}
}

/////////////////////////////////////////////
/////////////////////////////////////////////

int main(void)

{
ODCA = 0xC000;
unsigned char SlaveAddress;
char i2cData[3];
//Enable channel using default values
OpenI2C1( I2C_EN, BRG_VAL );
SlaveAddress = 0x58;
i2cData[0] = ((SlaveAddress ));
i2cData[1] = 0x05; //command line
i2cData[2] = 0xFF; //end command

while(1) // run the code over and over again
{



StartI2C1(); //Send the Start Bit (begin of data send)
IdleI2C1(); //Wait to complete
MasterWriteI2C1 (i2cData[0]); //address
IdleI2C1();
AckI2C1(); //ask for acknowledge bit before continuing
MasterWriteI2C1 (i2cData[1]); //command line
IdleI2C1();
AckI2C1();
MasterWriteI2C1(i2cData[2]); //output
IdleI2C1();
AckI2C1();
StopI2C1(); //end of data send


<pre>
#include <HardwareProfile.h>
#include <HardwareProfile_NU32.h>
#include <plib.h>
// Configuration Bit settings
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 50 KHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
//
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2
// DEFINES
#define SYSCLK (80000000) // set system clock to 80MHz
#define PBCLK (SYSCLK/1000) // set PBCLK to 80 KHz
#define Fsck 50000
#define BRG_VAL ((PBCLK/2/Fsck)-2)
#define Nop() asm( "nop" ) //allows for a pause command
// a simple puase command
void i2c_wait(unsigned int cnt)
{
while(--cnt)
{
Nop();
Nop();
}
}
/////////////////////////////////////////////
/////////////////////////////////////////////
int main(void)
{
ODCA = 0xC000;
unsigned char SlaveAddress;
char i2cData[3];
//Enable channel using default values
OpenI2C1( I2C_EN, BRG_VAL );
SlaveAddress = 0x58;
i2cData[0] = ((SlaveAddress ));
i2cData[1] = 0x05; //command line
i2cData[2] = 0xFF; //end command
while(1) // run the code over and over again
{
StartI2C1(); //Send the Start Bit (begin of data send)
IdleI2C1(); //Wait to complete
MasterWriteI2C1 (i2cData[0]); //address
IdleI2C1();
AckI2C1(); //ask for acknowledge bit before continuing
MasterWriteI2C1 (i2cData[1]); //command line
IdleI2C1();
AckI2C1();
MasterWriteI2C1(i2cData[2]); //output
IdleI2C1();
AckI2C1();
StopI2C1(); //end of data send
}
}
}
</pre>
}''

Revision as of 21:56, 15 February 2010

Original Assignment

Do not erase this section!

Your assignment is to interface to the MAX518 I2C digital to analog converter (DAC).

Overview

Note: PROJECT NOT FULLY FUNCTIONAL!

On this page we will present code and a wiring schematic that allows for the PIC32MX to speak to an 8-bit Digital to Analog Converter. In particular, our project used the ____ DAC.

While we were able to send data to the DAC, we were NOT able to elicit output from said DAC.

Circuit

Include a schematic and give any part numbers. A photo of your circuit is OK, but not as a replacement for a schematic.

Code

Our code:

 
#include <HardwareProfile.h> 
#include <HardwareProfile_NU32.h> 
#include <plib.h> 
 
 
// Configuration Bit settings 
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV) 
// PBCLK = 50 KHz 
// Primary Osc w/PLL (XT+,HS+,EC+PLL) 
// WDT OFF 
// Other options are don't care 
// 
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF 
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_2 
 
// DEFINES 
 
#define SYSCLK	(80000000) // set system clock to 80MHz 
#define PBCLK  (SYSCLK/1000) // set PBCLK to 80 KHz 
 
#define Fsck	50000 
#define BRG_VAL 	((PBCLK/2/Fsck)-2) 
 
#define Nop() asm( "nop" )  //allows for a pause command 
 
// a simple puase command 
void i2c_wait(unsigned int cnt) 
{ 
	while(--cnt) 
	{ 
		Nop(); 
		Nop(); 
	} 
} 
 
///////////////////////////////////////////// 
///////////////////////////////////////////// 
 
int main(void) 
 
{	 
	ODCA = 0xC000; 
	unsigned char SlaveAddress; 
	char i2cData[3]; 
	//Enable channel using default values 
	OpenI2C1( I2C_EN, BRG_VAL ); 
	SlaveAddress = 0x58; 
	i2cData[0] = ((SlaveAddress )); 
	i2cData[1] = 0x05; //command line 
	i2cData[2] = 0xFF; //end command 
 
while(1) // run the code over and over again 
{ 
 
 
 
	StartI2C1();	//Send the Start Bit (begin of data send) 
	IdleI2C1();		//Wait to complete 
	MasterWriteI2C1 (i2cData[0]); //address 
	IdleI2C1(); 
	AckI2C1(); //ask for acknowledge bit before continuing 
	MasterWriteI2C1 (i2cData[1]); //command line 
	IdleI2C1(); 
	AckI2C1(); 
	MasterWriteI2C1(i2cData[2]); //output 
	IdleI2C1(); 
	AckI2C1(); 
	StopI2C1();  //end of data send 
 
} 
}