[Microchip]/dsPIC2016. 8. 29. 01:13

dsPic33 내부 클럭 사용시 설정하기

dsPic33 내부 클럭 사용시 설정하기



외부 8Mhz 클럭 사용시 설정

_FOSCSEL(FNOSC_PRIPLL); // 제1 오실레이터(XT, HS, EC)와 PLL 사용

_FOSC(FCKSM_CSECME & OSCIOFNC_OFF  & POSCMD_XT);

// OSC2 핀 클럭 출력, 제1 오실레이터 XT 크리스탈 모드

//클럭 스위칭(Clock Switching)과 Fail Safe Clock Monitor 사용 설정

_FWDT(FWDTEN_OFF); // 왓치독 타이머 사용 중지



void SystemInit(void)

{

//Fcy(인스트럭션 클럭) 클럭 계산 : 4.3.4절 동작 주파수 계산 참조

//Fcy = Fosc / 2 = [ Fxtal X M / (N1 x N2 ) ] / 2

//Fcy = [ 8MHz X 40 / ( 2 X 2 ) ] / 2 = 80MHz / 2 = 40MHz (40MIPS)


PLLFBD=38; // M=40

CLKDIVbits.PLLPOST=0; // N1=2

CLKDIVbits.PLLPRE=0; // N2=2

OSCTUN=0; // FRC 클럭 사용, 튜닝시 필요


RCONbits.SWDTEN=0;       //왓치독 타이머 사용 중지 


while(OSCCONbits.LOCK!=1); //PLL LOCK 까지 기다림


}





내부 RC OSC 사용시 설정

_FOSCSEL(FNOSC_FRC & IESO_OFF);

_FOSC(FCKSM_CSECMD & OSCIOFNC_ON & POSCMD_NONE); 

_FICD(ICS_PGD2 & JTAGEN_OFF);

_FGS(GWRP_OFF & GCP_OFF);

_FWDT(FWDTEN_OFF); // 왓치독 타이머 사용 중지




void SystemInit(void)

{

//Fcy(인스트럭션 클럭) 클럭 계산 : 4.3.4절 동작 주파수 계산 참조

//Fcy = Fosc / 2 = [ Fxtal X M / (N1 x N2 ) ] / 2

//Fcy = [ 8MHz X 40 / ( 2 X 2 ) ] / 2 = 80MHz / 2 = 40MHz (40MIPS)



     PLLFBD = 38;   // M = 76

     CLKDIVbits.PLLPOST = 0;     // N2 = 2

     CLKDIVbits.PLLPRE=0;     // N1=2


     __builtin_write_OSCCONH(0x01);

     __builtin_write_OSCCONL(0x01);

     while (OSCCONbits.COSC != 0b001);


while (OSCCONbits.LOCK != 1);

}


Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC2016. 8. 17. 03:24

dsPIC33 EVM - I2C 테스트

dsPIC33 EVM - I2C 테스트




dspic33_i2c.pdf


dsPIC33 EVM  보드의 I2C는 RG2(SCL), RG3(SDA)에 연결되어 있다.





dsPIC33 I2C 초기화 코드

void i2c_init(unsigned int Speed)

{

OpenI2C1( I2C_ON, I2C_BRG );

}




dsPIC33 I2C Read/Write 소스 코드

unsigned char i2c_read_byte(unsigned char Addr, unsigned char reg)
{
unsigned char data = 0;
unsigned char SlaveAddress = Addr;
char i2cData[10];
int DataSz;
int Index = 0;
i2cData[0] = (SlaveAddress << 1) | 0;
i2cData[1] = reg;
DataSz = 2;
StartI2C1();
IdleI2C1();
while( DataSz )
{
MasterWriteI2C1( i2cData[Index++] );
IdleI2C1();
DataSz--;
if( I2C1STATbits.ACKSTAT )
break;
}
RestartI2C1();
i2c_wait(10);
IdleI2C1();
MasterWriteI2C1( (SlaveAddress << 1) | 1 );
IdleI2C1();
data = MasterReadI2C1();
StopI2C1();
IdleI2C1();
return data;
}
void i2c_write_byte(unsigned char Addr, unsigned char reg, unsigned char data)
{
unsigned char SlaveAddress = Addr;
char i2cData[10];
int DataSz;
int Index = 0;
char status;
i2cData[0] = (SlaveAddress << 1) | 0;
i2cData[1] = reg;
i2cData[2] = data;
DataSz = 3;
StartI2C1();
IdleI2C1();
while( DataSz )
{
MasterWriteI2C1( i2cData[Index++] );
IdleI2C1();
DataSz--;
if( I2C1STATbits.ACKSTAT )
break;
}
StopI2C1();
IdleI2C1();
}






















dsPIC33 EVM을 이용한 I2C 온습도 센서 테스트 예제



Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC2013. 3. 17. 10:35

DSPIC33EP64MC504 70 MIPS Motor Control and General Purpose Family

DSPIC33EP64MC504 70 MIPS Motor Control and General Purpose Family

 

70MIPS DSPIC (DSPIC33E)이 출시되었다. CORTEX-M3와 dspic 중 어떤것이 매리트 있을까?

 

데이터 버스 너비 : 16bit
프로그램 메모리 크기 : 64KB
데이터 RAM 크기 : 8KB
최대 클록 주파수 : 32KHz
프로그래밍 가능한 I/O의 수 : 35
타이머 수 : 7
장치 MIPS : 70 MIPs

CAN (#, type) 1 ECAN

PWM Resolution bits 6
Motor Control PWM Channels 6
Quadrature Encoder Interface (QEI) 1

2-UART
2-SPI
2-I2C

Posted by nexp
TAG DSPIC

댓글을 달아 주세요

[Microchip]/dsPIC2011. 12. 4. 22:45

[dsPIC EVM] MP3 Module (VS1033) 테스트

[dsPIC EVM] MP3 Module (VS1033) 테스트



[NET EVM] 보드를 이용하면 W5100과 같은 이더넷 모듈이나 TFT LCD 모듈을 연결하여 테스트 할수 있고 VS1033과 같은 MP3 모듈을 연결하여 네트웍 라디오를 테스트 해 볼 수 있다.





ADC0 -> RB0



dsPIC33 MP3모듈 HAL Driver 코드
//-----------------------------------------------------------------------------
// VS1033 모듈 HAL
#define VS_DREQ_BIT      BIT6
#define VS_DREQ_PORT     PORTB

#define VS_CS_BIT      BIT4
#define VS_CS_PORT      PORTB

#define VS_XDCS_BIT      BIT5
#define VS_XDCS_PORT     PORTB

#define VS_RST_BIT      BIT3
#define VS_RST_PORT      PORTB

#define VS1003_CS_H()      Sbi(VS_CS_PORT, VS_CS_BIT)
#define VS1003_CS_L()      Cbi(VS_CS_PORT, VS_CS_BIT)

#define vs1003_enable()      VS1003_CS_L()
#define vs1003_disable()     VS1003_CS_H()

#define VS1003_XDCS_H()      Sbi(VS_XDCS_PORT, VS_XDCS_BIT)
#define VS1003_XDCS_L()      Cbi(VS_XDCS_PORT, VS_XDCS_BIT)


#define VS1003_RESET_H()     //Sbi(VS_RST_PORT, VS_RST_BIT)
#define VS1003_RESET_L()     //Cbi(VS_RST_PORT, VS_RST_BIT)

#define IsVs1003DataReady()     (GPIOA->IDR&VS_DREQ_BIT)

#define VS_SendByte       SPI1_WriteReadByte
#define VS_InitSpi()      SPI1_Init()
#define VS_SpiSpeed_Low()        SPI1_SetSpeed(SPI_SPEED_1MHZ)
#define VS_SpiSpeed_High()     SPI1_SetSpeed(SPI_SPEED_4MHZ)


#define MP3_PORT_INIT()      Cbi(TRISB, BIT3|BIT4|BIT5);Sbi(TRISB, BIT6);\
                                         VS1003_CS_H();VS1003_XDCS_H();VS1003_RESET_H()
//-----------------------------------------------------------------------------



dsPIC33 SD Card HAL Driver 코드
#define _SPI1_ENABLE    1

//-----------------------------------------------------------------------------
// SD Card HAL
#define _DEBUG_FAT_FILE                 1

#define MMC_CS_PORT      LATB
#define MMC_CS_BIT      BIT7

#define MMC_CS_INIT()     TRISB=0;MMC_CS_HIGH();

#define MMC_CS_HIGH()     Sbi(MMC_CS_PORT, MMC_CS_BIT)
#define MMC_CS_LOW()     Cbi(MMC_CS_PORT, MMC_CS_BIT)
#define MMC_ASSERT_INIT()    MMC_CS_INIT();MMC_CS_HIGH()
#define MMC_ASSERT()     MMC_CS_LOW()
#define MMC_DEASSERT()     MMC_CS_HIGH()


#define MMC_SpiInit()     SPI1_Init()
#define MMC_SendByte     SPI1_WriteReadByte
#define MMC_Send(Data)      SPI1_WriteByte(Data)
#define MMC_Recv()      SPI1_WriteReadByte(0xFF)
#define MMC_RecvP(Data)     MMC_Send(0xFF); (*(Data)=SPI1_ReadByte())
#define MMC_SPISpeed     SPI1_SetSpeed

#define SPI_Mode3()

#define FAT_MAX_NUM_FILE          50

#define FCLK_SLOW()             MMC_SPISpeed(SPI_SPEED_1MHZ) 
#define FCLK_FAST()             MMC_SPISpeed(SPI_SPEED_MAX)
//-----------------------------------------------------------------------------
Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC2011. 9. 30. 22:12

[dsPIC33 EVM] W5200 TCP/IP Loopback 전송 속도 테스트

[dsPIC33 EVM] W5200 TCP/IP Loopback 전송 속도 테스트



dsPIC33을 이용하여 SPI방식의 하드웨어 TCP/IP W5200 (W5100)의 전송 속도를 테스트 했다.

SPI클럭 13Mhz 에서 최대로 나오며 2.5Mbps 정도 출력 된다.

[3] iInChip Send: 2.3772 Mbps(6596649 bytes, 21.1710 sec)
iInChip Recv: 2.4131 Mbps(6596649 bytes, 20.8568 sec)
------------------------------------------------------------
[4] iInChip Send: 2.3933 Mbps(6596649 bytes, 21.0288 sec)
iInChip Recv: 2.4132 Mbps(6596649 bytes, 20.8557 sec)
------------------------------------------------------------





[NET EVM] 보드에서 W5200 핀맵





dsPIC33 W5100 HAL 드라이버 코드 소스
//-----------------------------------------------------------------------------
// W5100 HAL
#define W5100_CS_PORT     PORTG
#define W5100_CS_BIT     BIT9


#define W5100_RST_PORT     PORTF
#define W5100_RST_BIT     BIT6

#define IINCHIP_RSToff()    Cbi(W5100_RST_PORT, W5100_RST_BIT) 
#define IINCHIP_RSTon()     Sbi(W5100_RST_PORT, W5100_RST_BIT)


#define IINCHIP_CSoff()     Cbi(W5100_CS_PORT, W5100_CS_BIT)
#define IINCHIP_CSon()     Sbi(W5100_CS_PORT, W5100_CS_BIT)

#define W5100_IO_INIT()     Cbi(TRISG, W5100_CS_BIT);Cbi(TRISF, W5100_RST_BIT);

#define IINCHIP_SPI_MAX_SPEED()   SPI1_SetSpeed(SPI_SPEED_MAX)
#define IINCHIP_SPI_INIT()    SPI1_Init();IINCHIP_SPI_MAX_SPEED()
//#define IINCHIP_SpiSendData    SPI0_WriteByte
#define IINCHIP_SpiSendData    SPI1_WriteReadByte
#define IINCHIP_SpiRecvData    SPI1_WriteReadByte
//-----------------------------------------------------------------------------


Posted by nexp

댓글을 달아 주세요