:::


Browsing this Thread:   1 Anonymous Users






PIC16F18323 ADC to PWM
#1
新會員
新會員


查看用戶資訊
各位前輩好目前使用PIC16F18323 ADC功能以及CCP功能來控制PWM DUTY

目前遇到困難在我的ADC接受外部是用可變電阻調變0~100K

但是在式波器上PWM顯示DUTY的部分卻不是線性調變

下面這邊是我的PWM輸出,而adc 以及CCPREG兩個都是選擇從右邊數
而我的RP2沒有帶入255,是用其他值去計算出來的目前已計算過為79

系統Osc 32Mhz,pwm freq :100khz


PR2 = (_XTAL_FREQ/(PWM_freq*4*1)) - 1;

void duty(unsigned int adcvaule)
{
if(adcvaule<1023) //total 10bit data
{
//adc 10bit conver back*duty formula duty cycle
//adc converter Vin=ADdata*(Vref+ - Vref-)/1023(2^10 bits)
adcvaule=(((float)adcvaule)/1023)*(4*(PR2+1)); //duty cycle * 4*pr2+1
// adcvaule = ((float)adcvaule/1023)*(_XTAL_FREQ/(PWM_freq*1));
//CCP1 select FMT0 H 2bit L 8bit
// duty reg is CCPR1H CCPR1L
//define CCPW is total CPPR1H<1:0>+CCPR1L<7:0> sum of the 10 bits reg
// CCPR1H<1:0> is using CCPW <9:8> bits
// CCPR1L<7:0> is using CCPW <7:0> bits
CCPR1H =(adcvaule>>8);// put duty first data still at 0 & 1 need to put at 8&9
CCPR1L = (adcvaule & ADRESL); //CCPR1L has 8 bit use or left it and leave the last over 2bit

}
}

發表於: 5/13 20:29
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You can attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

http://elearning.microchip.com.tw/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

課程 - 台北教育訓練中心
課程 - 新竹教育訓練中心
課程 - 高雄教育訓練中心
教育訓練中心介紹
購買 - 實驗工具
臺灣實驗板介紹與資源