Bài 1: Cấu hình dao động


 DSPic 33 / PIC24 có 4 tùy chọn cấu hình dao động nội và ngoại
Sử dụng bộ nhân PLL để nâng cao giá trị tần số

 Bộ dao động hệ thống có các tùy chọn:

  • Bộ dao động chính Posc trên các chân OSC1 và OSC2
  • Bộ dao động phụ Sosc trên các chân SOSC1 và SOSC0.
  • Bộ dao động nhanh nội bộ RC với bộ chia tần số: FRC
  • Bộ dao động nội tần số thấp LPRC
  • Bộ dạo động chính với bộ nhân PLL
  • Bộ dao động nội với bộ nhân PLL
Các thanh ghi điều khiển
  • FOSCSEL: Thanh Ghi đang kí cấu hình ban đầu
bit 15 - 8 : mặc định là 1.
bit 7: IESO : 
  • 1 : Khởi động thiết bị với bộ dao động nội FRC, sau đó người dùng có thể chuyển sang  bộ dao động do người dùng chọn khi đã sẵn sàng.
  • 0: Khởi động thiết bị với bộ dao động do người dùng chọn
bit 6-3: mặc định là 1
bit 2-0: FNOSC: bit lựa chọn nguồn dao động ban đầu:
  •    111: dạo động RC nhanh với bộ chia Divide by  N
  •    110: dao động RC nhanh với bộ chia 16
  •    101: dao động công suất thấp  
  •    100: dao động thứ cấp / bộ dao động phụ
  •    011: bộ dao động chính với bộ nhân PLL
  •    010: bộ dao động chính (HS, XT, EC)
  •    001:Bộ dao động nội RC nhanh với bộ nhân FRCPLL
  •    000: Bộ dao động nội nhanh FRC : 7.37MHz.
Chúng ta có thể đăng kí thanh ghi này như sau:
  >> Đăng kí bằng Maccro:
        Được thực hiện ngay trên phần khai báo thư viện:
       _FOSCSEL( lựa chọn )
**
**   Các lựa chọn
**     FNOSC_FRC                Fast RC oscillator
**     FNOSC_FRCPLL         Fast RC oscillator w/ divide and PLL
**     FNOSC_PRI                 Primary oscillator (XT, HS, EC)
**     FNOSC_PRIPLL          Primary oscillator (XT, HS, EC) w/ PLL
**     FNOSC_SOSC             Secondary oscillator
**     FNOSC_LPRC             Low power RC oscillator
**     FNOSC_FRCDIV16    Fast RC oscillator w/ divide by 16
**     FNOSC_LPRCDIVN   Low power Fast RC oscillator w/divide by N
**
**   Two-speed Oscillator Startup :
**     IESO_OFF                  Disabled
**     IESO_ON                   Enabled


     FOSC: Thanh ghi đang kí cấu hình dao động
bit 15-8: mặc định là 1
bit 7-6: chế độ chuyển đồng hồ:

  •  1x : chuyển đồng hồ tắt.
  • 01: chuyển đồng hồ bật, FSCM bị tắt (chức năng giám sát)
  • 00: chuyển đồng hồ bật, FSCM bật
bit 5: PIN ngoại vi chọn bit cấu hình (ko đề cập)
bit 2: OSCIOFNC : lựa chọn chức năng cho chân OSC2
  •   1: OSC2 xuất ra xung dao động Fcy
  •  0:  OSC2 là chân i/o.
bit 1-0: lựa chọn chế độ dao động chính:
  •   11: chế độ dao động chính bị tắt
  •   10: chế độ dao động chính HS
  •   01: chế độ dao động chính XT
  •   00: chế độ dao động ngoại: EC
>>chúng ta sẽ đăng kí thanh ghi này bằng maccro:

_FOSC( các lựa chọn cách nhau bởi dấu & )
**
**   Clock switching and clock monitor:
**     FCKSM_CSECME         Both enabled
**     FCKSM_CSECMD         Only clock switching enabled
**     FCKSM_CSDCMD         Both disabled
**
**   Single configuration for remappable I/O:
**     IOL1WAY_OFF          Disabled
**     IOL1WAY_ON           Enabled
**
**   OSC2 Pin function:
**     OSCIOFNC_ON          Digital I/O
**     OSCIOFNC_OFF         OSC2 is clock O/P
**
**   Oscillator Selection:
**     POSCMD_EC            External clock
**     POSCMD_XT            XT oscillator
**     POSCMD_HS            HS oscillator
**     POSCMD_NONE          Primary disabled
CLKDIV : thanh ghi đang kí bộ chia dao động
Chúng ta sẽ chú ý tới các bit sau:

  • DOZE :14-12:bộ chia tần số Fcy: Dạo động của micro chip : Fcy = 1/2 Fosc
111 = FCY chia cho 128
110 = FCY chia cho 64
101 = FCY chia cho 32
100 = FCY chia cho 16
011 = FCY chia cho 8 (mặc định)
010 = FCY chia cho 4
001 = FCY chia cho 2
000 = FCY chia cho 1
  • FRCDIV: 10 - 8: bộ chia bộ dạo động nội FRC

111 = FRC chia cho 256

110 = FRC chia cho 64

101 = FRC chia cho 32
100 = FRC chia cho 16
011 = FRC chia cho 8
010 = FRC chia cho 4
001 = FRC chia cho 2
000 = FRC chia cho 1 (mặc định)
>>Ngoài ra chúng ta có thể thiết lập bộ tỉ lệ dao động với công thức
            Fosc = F(mặc định)*M/(N1*N2)
trong đó : 
   N1: được đặt bởi bít PLLPRE:
với N1 = CLKDIVbits.PLLPRE +2 với 
CLKDIVbits.PLLPRE từ 0 đến 31.
   N2: được đặt bởi bit PLLPOST
       11: Fout / 8
        01:         /4
        00:         /2
M được đặt ở bit PLLDIV trong thanh ghi PLLFBD
với M = _PLLDIV +2 : _PLLDIV từ 0 đến 511;
>> Thanh ghi OSCTUN: đăng kí điều chỉnh dao động
Được thực hiện bởi các bit:TUN<5:0>
011111 = Tần số trung tâm + 11.625% (8.23 MHz)
011110 = Tần số trung tâm + 11,25% (8,20 MHz)



000001 = Tần số trung tâm + 0.375% (7.40 MHz)
000000 = Tần số trung tâm (danh định 7.37 MHz)
111111 = Tần số trung tâm - 0.375% (7.345 MHz)



100001 = Tần số trung tâm - 11.625% (6.52 MHz)

100000 = Tần số trung tâm - 12% (6.49 MHz)

Bộ dao động bên ngoài: Posc có các chế độ:
* XT mode: khai báo khi sử dụng thạch anh có tần số từ 3.5 -10 MHz.
* HS mode: khai báo khi sử dụng thạch anh có tần số từ 10 - 40 Mhz

Ví dụ về code sử dụng dao động ngoại:
// Select Internal FRC at POR
_FOSCSEL(FNOSC_FRC);
// Enable Clock Switching and Configure Posc in XT mode
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);
int main()
{
// Configure PLL prescaler, PLL postscaler, PLL divisor
PLLFBD=30; // M = 32
CLKDIVbits.PLLPOST = 0; // N2 = 2
CLKDIVbits.PLLPRE = 0; // N1 = 2
// Initiate Clock Switch to Primary Oscillator with PLL (NOSC = 0b011)
__builtin_write_OSCCONH(0x03);
__builtin_write_OSCCONL(0x01);
// Wait for Clock switch to occur
while (OSCCONbits.COSC! = 0b011);
// Wait for PLL to lock
while(OSCCONbits.LOCK! = 1) {};
}


Ví dụ về code sử dụng dao động nội:
// Select Internal FRC at POR
_FOSCSEL(FNOSC_FRC);
// Enable Clock Switching and Configure
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF);
int main()
{
// Configure PLL prescaler, PLL postscaler, PLL divisor
PLLFBD = 41; // M = 43
CLKDIVbits.PLLPOST=0; // N2 = 2
CLKDIVbits.PLLPRE=0; // N1 = 2
// Initiate Clock Switch to Internal FRC with PLL (NOSC = 0b001)
__builtin_write_OSCCONH(0x01);
__builtin_write_OSCCONL(0x01);
// Wait for Clock switch to occur
while (OSCCONbits.COSC! = 0b001);
// Wait for PLL to lock
while(OSCCONbits.LOCK! = 1) {};
}



Nhận xét

Bài đăng phổ biến từ blog này

Bài 5: Ngắt Timer 1

Bài 4: giao tiếp IC ghi dịch 74HC595

Bài 3: Ngắt ngoài (interrupt external)