This is an example code which can output 300Hz sine waveform using internal DAC on a microcontroller. DAC on a microcontroller has the 10bit resolution but I used only 32step when i make sine waveform


A device that I used is PIC16F1778 and developed on MPLAB X and XC8 v2.0 Compiler


unsigned int cnt=0; unsigned int sin[] = { 512, 611, 707, 796, 873, 937, 984, 1013, 1023, 1013, 984, 937, 873, 796, 707, 611, 512, 412, 316, 227, 150, 86, 39, 10, 0, 10, 39, 86, 150, 227, 316, 412 }; void main(void) { // initialize the device SYSTEM_Initialize(); DAC1CON0bits.DAC1FM = 0; // When using interrupts, you need to set the Global

// and Peripheral Interrupt Enable bits // Use the following macros to: // Enable the Global Interrupts //INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts //INTERRUPT_PeripheralInterruptEnable(); // Disable the Global Interrupts //INTERRUPT_GlobalInterruptDisable(); // Disable the Peripheral Interrupts //INTERRUPT_PeripheralInterruptDisable(); while (1) { // Add your application code // DAC1_Load10bitInputData(sin[cnt++]); //Loading 10bit data to DAC1 DAC1REFL = (uint8_t) sin[cnt]; DAC1REFH = (uint8_t)(sin[cnt++] >> 8); //Loading DAC1 double buffer data to latch. DACLDbits.DAC1LD = 1; __delay_us(100); if(cnt == 32) cnt = 0; } }


The waveform using DAC without Voltage Follower on MCU




The waveform using DAC with Voltage Follower on MCU



The sine waveform is made by polling mode in while loop. If you remove the delay function in while loop, you can see the 8.6kHz sine waveform. It might be maximum output frequency using this microcontroller.



Sinewave_Table.xlsx


PIC16F_DAC_TO_SINE.X.zip



2019/01/02 - [Embedded] - How can i select the optimization level of compiler on MPLAB X?

2019/01/02 - [Embedded] - How much optimize depend on optimization level of compiler?

2018/08/02 - [Embedded/MCU Basic] - XC8 Compiler optimization level


Posted by KennyShin
,

 

MCU(Microcontroller)의 미사용 핀은 어떻게 처리해야 할까?

 

 

Microchip사의 PIC16(L)F18345 디바이스 데이터시트에서는 아래와 같은 방법을 추천합니다.

 

첫번째 방법

미사용핀(Unused GPIO)는 출력으로 설정한 다음 Low로 출력되도록 한다.

 

두번째 방법

미사용핀(Unused GPIO)는 출력으로 설정한 다음 Low로 출력되도록 하고 1kOhm~10kOhm의 저항을 미사용 핀과 GND사이에 연결되도록 한다.

 

 

 

 

그러면 첫번째 방법을 사용할 것인가? 두번째 방법을 사용할 것인가?

 

이미 회로 디자인이 다 끝났으면 첫번째 방법을 사용하는 것을 추천합니다.

 

그런데 회로 디자인 변경이 가능한 일정이면 되도록

두번째 방법을 사용하여 Robust한 디자인을 할 수 있습니다.

 

 

데이터시트: PIC16(L)F18325/18345 Full-Featured, Low Pin Count MCUs with XLP Data Sheet

 

위에서 설명한 미사용핀 처리 방법은 모든 Microchip MCU에 적용할 수 있습니다.

Posted by KennyShin
,