본문 바로가기

DSPIC_STUDY

(16)
dsPIC33 ADC 테스트 dsPIC33 ADC 테스트 ADC 변환 비트 모드 AD1CON1bits.AD12B =1; //AD변환 비트 값 설정: 12-bit, 1-channel ADC operation AD1CON1bits.ASAM = 1; //자동 AD변환 시작 AD1CON1bits.SiMSAM = 1 //CH0, CH1 .. 동시에 샘플링 AD1CON1bits.FORM 11 : signed factional 10 : fractional 01 : signed integer 00 : integer ADC 채널 선택 CHPS: ADC 채널 선택 When AD12B = 1, CHPS is: U-0, Unimplemented, Read as ‘0’ 1x =Converts CH0, CH1, CH2 and CH3 01 =Converts ..
[dsPIC33] SPI 테스트 [dsPIC33] SPI 테스트 dsPIC33 SPI 블록도 SPI모드 설정 SPI2CON1bits.SMP = 0; //한 주기 클럭 중간에서 데이터 출력 위상 설정 SPI2CON1bits.CKE = 0; //MODE 0,0 , 클럭이 LOW 상태에서 SPI2CON1bits.CKP = 0; //MODE 0,0 , 데이터 비트 중간에 High SPI클럭 설정 dsPIC33 SPI 초기화 코드 // SPI 초기화 함수 void SPI1_Init(void) { SPI2CON1bits.DISSCK = 0; //내부 시리얼 클럭 사용 설정 SPI2CON1bits.DISSDO = 0; //SPI모듈 SDO2 핀 사용 설정 SPI2CON1bits.MODE16 = 0; //송수신 전송 데이터 크기 : 8비트 설정 SP..
dsPIC33 - dsPIC Remap포트 설정(UART 테스트) dsPIC33FJ802MC 를 이용하여 여러가지 테스트를 하던중에 UART설정에 오류가 있는걸 확인했다. dsPIC33은 PPS기능을 제공해 Pin map을 PRx 핀에 원하는 형태로 설정(remap)할 수 있다. 입력과 출력에따라 설정 방법은 다른데 UART의 경우 RPINR18에 입력 RP를 설정하면 된다. //U1RX를 RP20에 입력으로 연결 RPINR18bits.U1RXR = 20; //RP19를 U1TX에 연결 RPOR9bits.RP19R = 3; PPS제어를 위해서는 UNLOCK_PPS() 해서 설정하고, 설정후에는 LOCK_PPS() 를 해 주어야 한다. 그리고 만약 포트가 ADC와 겹쳐있다면 ADC기능을 disable해 주어야 한다. #define U0_RXINIT() (AD1PCFGL ..
[dsPIC MotorDriver] PWM테스트 [dsPIC MotorDriver] PWM테스트 dspic의 PWM출력 핀은 GPIO와 공통으로 사용할 수 있도록 되어 있으므로 PWM기능으로 설정할 필요가 있다. PWMCON1레지스터의 PMODx, PENxH, PENxL 비트를 설정하면 된다. PWM1CON1 PMODx : PWM 출력모드 설정 1 = 개별모드 0 = Complementray PENxH : PWMxH I/O 동작설정 1 = PWM핀으로 사용 0 = I/O용으로 사용 PENxL : PWMxL I/O설정 1 = PWM핀으로 사용 0 = I/O용으로 사용 OVCON OVCON 레지스터는 각각의 PWM출력핀을 임의로 제어할 수 있는 오브라이드 기능을 설정하기 위한 레지스터이다. 1일때 PWM active상태. dsPIC33-SM EVM의 PW..
[dsPIC MotorDriver] QEI 테스트 [dsPIC MotorDriver] QEI 테스트 dsPIC33은 PPS기능을 제공해 Pin map을 PRx 핀에 원하는 형태로 설정할 수 있다. 입력과 출력에따라 설정 방법은 다른데 UART의 경우 RPINR18에 입력 RP를 설정하면 된다. //U1RX를 RP20에 입력으로 연결 RPINR18bits.U1RXR = 20; //RP19를 U1TX에 연결 RPOR9bits.RP19R = 3; PPS제어를 위해서는 UNLOCK_PPS() 해서 설정하고, 설정후에는 LOCK_PPS() 를 해 주어야 한다. 이 설정은 런타임시 한번만 가능한것 같다.
[dsPIC33 MotorDriver] 타이머 인터럽트 테스트 [dsPIC33 MotorDriver] 타이머 인터럽트 테스트 모터 제어기가 수행될 타이머 인터럽트는 가장 기본 사항이 될것같다. 일반적으로 사용되는 제어 주기인 1ms로 설정해 테스트 dsPIC의 타이머 인터럽트는 상당히 간단하다. 먼저 인터럽트 초기화 하고 클럭 소스의 설정을 위해 TCS비트를 설정하는데 0이면 내부 Tcy를 선택한다. Tcy는 Fosc/2 이므로 80Mhz/2 인 40Mhz가 된다. 그리고 이 클럭소스를 TCKPS비트 설정으로 1/8/64/256 으로 분주 할 수 있다. 타이머 인터럽트 PR1 레지스터 값과 일치할때 발생한다. dsPIC Timer 블록도 1ms 주기로 인터럽트 생성하기 하기 위한 PR1값 설정은 625이다. 계산법은 아래와 같다. 40Mhz / 64 = 625000..
dsPIC (Microchip MPLAB C30) 에서 printf 사용 하기 dsPIC (Microchip MPLAB C30) 에서 printf 사용 하기 엔지니어에게 있어서 가장 강력한 디버깅 무기라는 printf를 임베디드에서 사용하기란 쉽지 않다. 특히 컴파일러마다 버젼마다 옵션이 달라서 고생을 많이 하는데... Microchip사의 MPLAB C30의 경우 write()함수를 오버라이딩 하면 된다고 한다. #include 추가하고 아래 write()함수를 추가해 주면 된다. int write(int handle, void *buffer, unsigned int len) { int i; for (i = len; i; --i) { char c = *(char*)buffer++; U1TXREG = c; while(!U1STAbits.TRMT); } return(len); } 그..
dsPIC33 속도 테스트 - LED 토글 테스트 dsPIC33 속도 테스트 - LED 토글 테스트 LED토글링으로 dsPIC33 속도 측정을 했다. 여러가지 테스트를 해서 결론적으로 LED 속도는 56ns/6.6Mhz 이 출력된다. [다른 MCU속도 측정 결과] 에 비교하면 상당히 빠르다.. dsPIC33 속도 테스트를 위해 아래와 같이 LED토글 하는 코드를 작성했다. #define LED1_BIT BIT0 #define LED1_PORT PORTB #define Led1Init() _TRISB7 = 0 #define Led1Toggle() _RB7 ^= 1 main() { : while(1) { Led1Toggle(); } LED토글 속도 측정 결과 330ns/14Mhz 가 측정된다. 40MIP라기에는 너무 느리다. 어샘블 코드를 들여다보자 헉! ..