會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





PIC16F18323 ADC to PWM
新會員
註冊日期:
5月11日 22:49:19
所屬群組:
註冊會員
文章: 1
等級: 1; EXP: 0
HP : 0 / 0
MP : 0 / 0
離線
各位前輩好目前使用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:03
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project