新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC16F1933應用筆記

        PIC16F1933應用筆記

        作者: 時間:2016-11-25 來源:網絡 收藏
        1. 關于編譯器的9.8版本的使用。

        (1) 按照專業軟件文件夾9.8版本軟件及使用方法安裝即可。(記得OFF-LINE打勾)

        本文引用地址:http://www.104case.com/article/201611/321520.htm

        (2)需要在mplab ide中選擇HI-TECH Universal Toolsuite 然后路徑一樣指向picc.exe,這個時候編譯的圖標將變化為黑色和紅色。

        2. 關于配置位設置方法:如果是第一次操作的話,建議看著數據手冊進行在mplab ide菜單里面進行設置,配置完后,系統會根據你配置的,自動給出配置位的具體數據。記下然后,在程序里面最開始添加這樣兩行:

        __CONFIG(0x0FA4);

        __CONFIG(0x3AFF);

        這樣的好處是新建工程的時候,將這個源碼添加進去的話,就不用再次設置了,編譯器會根據這兩行程序進行自動設置。

        3. 關于16F1933的使用內部振蕩的系統時鐘設置

        除了32MHz的系統時鐘,都可以按照這樣的步驟:

        1)禁用4倍頻(SPLLEN = 0),設置使用8MHz內部振蕩IRCF<3:0>=1110,系統時鐘選擇位SCS<1:0>=1X或00

        2)等待高頻內部振蕩器就緒 HFIOFR = 1

        3)確定高頻內部振蕩器穩定 HFIOFS = 1 (精度至少為0.5%)

        例程:

        OSCCON = 0B01110000; // 8MHz,INTOSC

        while(!HFIOFR);

        while(!HFIOFS);

        4)如果需要設置32MHz,系統時鐘選擇為SCS<1:0>=1X,這里不能夠=00;

        例程:

        OSCCON = 0B11110000; // 32MHz,INTOSC

        while(!HFIOFR);

        while(!HFIOFS);

        4. 在定時器2,4,6中,有TMRX與PRX有區別,作用分別是什么?后預分頻有什么作用?

        只使用TMRX的時候,可以用來裝載一個初值來計數,直到溢出。

        只使用PRX的時候,可以裝載一個具體計數到次數,因為這里是當TMRX=PRX時,觸發定時器X中斷。使用PRX的好處是,可以在中斷中省掉一條重新裝載初值的語句,也就是實現了所謂的“自動重新裝載計數器初值”。

        后預分頻的作用為,當你定時進入中斷的周期為1ms,而后預分頻設置為1/X的話,那么你實際進入中斷的周期變為了Xms。由于定時器2,4,6不后預分頻輸出主要應用于CCP模塊,它用作CCP模塊在PWM模式下工作時的時基。

        5. 由于我的應用中需要高的pwm分辨率,所以將使用32MHz的系統時鐘

        如果周期相同,是否可以使用相同的定時器?是否周期不同則需使用不同的定時器?

        如果周期相同,則可以使用同一個定時器來產生PWM,周期不同的話必須使用不同的定時器。

        6. 關于I/O口初始化,初始化不正確的話相應的功能不能正常使用。

        是否一定要初始化ANSELA,ANSELB,APFCON這些關于I/O口相關的寄存器,他們各有什么用?

        在關于備份管腳datasheet中說明有沖突,引腳圖看上面CCP2可以配置到RC1或RB3,但是在具體說明寄存器作用的時候卻說RC0和RB5,到底哪個是正確的?

        ANSELA,ANSELB不配置對PWM產生沒有影響,但是建議配置。APFCON一定需要正確配置。

        當CCP2SEL =0時,PWM在RC1上面產生。

        當CCP2SEL =1時,PWM在RB3上面產生。

        當配置增強型PWM時,這個時候會用到P2BSEL,用來選擇P2B輸出管腳,CCP2/P2A可以配置到RC1或RB3,CCP2/P2B可以配置RC0和RB5。

        7. 試試占空比兩個極限值0%,100%的情況

        當采用PRX=0xFF的時候,設置占空比100%會出現毛刺的情況.因為這個時候4*(255+1)=1024=0x400,數據已經溢出.是不是當分辨率達到10bit的時候,就不能完全按照占空比100%輸出.

        問題?

        在使用PIC16F1933的時候,發現在采用10bit的PWM輸出占空比為100%的時候,會有很多毛刺產生,而不采用10bit的PWM輸出則沒有毛刺。

        個人分析了一下,我是采用定時器4來作為CCP1輸出PWM的時基,需要采用10bit的PWM則PR4=0xFF,按照數據手冊上面計算占空比的公式:100%=(CCPR4L:CCP4CON<5:4>)/(4*(PR4+1))

        CCPR4L:CCP4CON<5:4> = 4*(PR4+1) = 4*(0xFF+1)=0x400=0B100 0000 0000

        上面的寄存器是12bit的,而后面的計算結果為13bit的,是否這個原因造成輸出占空比100%的10bit PWM而產生很多毛刺,故在實際項目的時候如果需要達到滿占空比的話不能選擇PRX=0xFF,選擇PRX=0xFE。

        8. 在調試串口的時候發現,當上電或者下電的時候會出現串口發送幾個亂碼的情況,可能是由于復位端口沒有作為復位使用的原因,有待驗證。

        通過實驗表明上電和下電的時候有可能發生亂碼的原因是,在上電或者下電的過程中,可能在芯片確認上電電壓附近抖動,造成芯片誤判上電的情況出現而發生亂碼。在配置位中有個PWRTE的寄存器,為使能上電延時定時器的,將這個寄存器配置為1,這種情況消失。另出現這個情況跟復位端口作為輸入管腳沒有關系。

        9. 需要確認一個100us的函數,在非常短的延時上面可能用到。

        32MHz的情況下 i=255,11.0592MHz的情況下i=89;

        Void delay100us(void)

        {

        Uint8 i = 255;

        While(i--);

        }

        10. 關于DAC模塊,精度如何?測試是否能夠輸出外部電壓參考電壓?

        經過測試發現DAC輸出的電壓比理論值會小0.02V,ADC轉換出來的值也會有同樣的問題,閱讀手冊發現,固定電壓輸出的精度在±4%左右,由于這個方案對電壓精度要求很高,不能夠達到要求,需使用431作為外部參考。

        另可以按照手冊中的方法查看內部參考電壓到底是多少,也就是可以輸出到外部作為參考電壓。

        DACEN = 0;

        DACLPS = 1; // 選擇DAC正參考電壓源

        DACOE = 1; // DACOUT輸出

        DACPSS0 = 0; // 選擇FVR作為參考電壓,需設置FVRCON相應位

        DACPSS1 = 1;

        DACNSS = 0; // vss

        DACCON1 = 31;

        內部參考電壓設置為4.096時,實測值為4.089,這里表現出來精度不準還不明顯。

        當我內部參考電壓設置為4.096,DACCON1 = 20,的時候,本來應該輸出2.56V,實測2.543V,差了差不多0.02V



        關鍵詞: PIC16F1933應用筆

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 息烽县| 嘉黎县| 宁乡县| 偏关县| 鄄城县| 龙川县| 夏邑县| 南宁市| 洪雅县| 鄄城县| 香格里拉县| 景德镇市| 方山县| 青神县| 榆林市| 阳曲县| 女性| 长宁区| 盘锦市| 宁国市| 濉溪县| 九江县| 甘南县| 阿城市| 区。| 六盘水市| 新丰县| 黑河市| 博湖县| 天门市| 灌云县| 剑川县| 东山县| 萨嘎县| 无为县| 礼泉县| 天祝| 武义县| 宁阳县| 澄迈县| 自治县|