Một trong số vi mạch được sử dụng đó là kỹthuật vi điều khiển.. Vậy trong đồ án lần này chúng em quyết định chọn đề tài tìm hiểu dòng vi điều DsPIC cụ thể là DsPIC33fj12mc202 để hiểu đượ
Trang 21 Lý do chọn đề tài: 5
2 Mục đích: 5
3 Đối tượng nghiên cứu: 5
4 Phạm vi nghiên cứu: 6
Phần 2: NỘI DUNG 7
Chương 1: Tổng quan về Họ vđk dsPic33 và vđk DsPic33FJ12MC202 7
1 Họ VĐK DsPic 7
2 Trình dịch 7
3 DsPic33FJ12MC202 8
Chương 2: DsPic33FJ12MC202 và các module cơ bản 11
1 Cấu hình thạch anh 11
2 Các cổng vào ra I/O 13
3 Ngắt ngoài 15
4 Bộ đếm, bộ định thời 16
4.1 Bộ định thời/bộ đếm (Timer/Counter) là gì 16
4.2 Bộ định thời/bộ đếm trong dspic33fj12mc202 17
5 OutputCompare 25
5.1 Đặc điểm chung 25
5.2 Các thanh ghi liên quan 27
5.3 Trạng thái chân đầu ra 29
5.4 Cụ thể về chế độ thường sử dụng PWM mode (OCM =110) 29
6 UART, SPI, I2C 32
6.1 UART 32
6.2 SPI 35
6.3 I2C 38
Trang 3Chương 3: Ứng dụng lập trình và mô phỏng với các ngoại vi 48
1 Mở rộng ngõ ra với 74HC595 48
2 Giao tiếp với bàn phím ma trận 50
2.1 Kỹ thuật quét phím 50
2.2 Kỹ thuật đảo dây 52
3 Giao tiếp led 7 đoạn 54
4 Giao tiếp Lcd 16x2 qua PCF8574 58
5 Giao tiếp EEPROM25LC256 qua SPI 61
6 Giao tiếp với led Matrix 66
Phần 3: KẾT LUẬN 70
Trang 4LỜI MỞ ĐẦU
Ngày nay đại đa số các lĩnh vực sản xuất, điều khiển, giám sát, đo lường…
đều được trang bị hệ thống tự động hóa Một trong số vi mạch được sử dụng đó là kỹthuật vi điều khiển Nhờ tính năng ưu việt của bộ vi điều khiển như: khả năng lậptrình phù hợp với thiết kế nhỏ và lớn cũ như giao tiếp với các thiết bị ngoại vi và máytính đã đem lại sự hoàn hảo, độ chính xác và tính mềm dẻo cao thông qua giao tiếpgiữa người và máy
Vi điều khiển quản lý và điều khiển hoạt động của hệ thống qua phần mềm,nhờ vậy mà ta có thể mở rộng và thay đổi hoạt động một cách dễ dàng bằng cáchthay đổi một số thông số của chương trình Vi điều khiển hoạt động theo chươngtrình đã nạp sẵn, đọc các tín hiệu từ bên ngoài đưa vào sau đó lưu trữ và xử lý Trên
cơ sở đó đưa ra thông báo, tín hiệu điều khiển các thiết bị bên ngoài hoạt động theođúng thông số và yêu cầu của hệ thống Ngoài ra, vi điều khiển cũng có mặt trong cácsản phẩm công nghiệp và tiêu dùng như: lò vi ba, lò sưởi, máy giặt, hệ thống đèngiao thông… và trong nhiều thiết bị công nghiệp khác
Vậy trong đồ án lần này chúng em quyết định chọn đề tài tìm hiểu dòng vi
điều DsPIC cụ thể là DsPIC33fj12mc202 để hiểu được cấu tạo, nguyên lý hoạt động
va ứng dụng của một con vi điều điều khiển cụ thể
Đồ án gồm các phần:
Lời nói đầu
Phần I: Tổng quan đề tài
Phần II: Nội dung
Chương 1: Tổng quan về Họ vđk dsPic33 và vđkDsPic33FJ12MC202
Trang 5Chương 3: Ứng dụng lập trình và mô phỏng với các ngoại vi Phần III: Kết luận
Tài liệu tham khảo
Chúng em xin cảm ơn thầy Vũ Vân Hà đã hướng dẫn và cho phép chúng emđược thực hiện đề tài này trong đồ án 2 Với khoảng thời gian có hạn và kiến thứccòn hạn chế nên quá trình tìm hiểu còn nhiều thiết sót mong thầy nhận xét và góp ý
để kiến thức của chúng em được hoàn thiện hơn!
Chúng em xin chân thành cảm ơn!
Trang 6Phần I: TỔNG QUAN ĐỀ TÀI
1 Lý do chọn đề tài:
Ngày nay khoa học CN phát triển nhu cầu của con người ngày càng cao Việc nghiên cứu khoa học ngày càng được đầu tư để đáp ứng nhu cầu đó, các ngành công nghệ kỹ thuật điện tử đã có sự phát triển vượt bậc đưa khoa học vào kỷ nguyên mới Kỹ thuật vi xử lý vi điều khiển là một ứng dụng lớn của khoa học kỹ thuật vào cuộc sống phục vụ trực tiếp cho con người Ví dụ: Lập trình cho vi xử lý vi điều khiển điều khiển mạch đèn giao thông, hệ thống quản lý mạng, các thiết bị điện tử dân dụng…
Ở nhóm ngành Điện tử dân dụng hay thiết bị lập trình nhúng thì vi
xử lý vi điều khiển đã thâm nhập khá nhiều vào lĩnh vực này Để trang bị kiến thức về vi xử lí thì bắt đầu với những vi điều khiển có các module ngoại vi cơ bản, hiểu được cấu trúc phần cứng, lập trình trên thanh ghi là nền tảng để tiếp cận với các cấu trúc vi điều khiển phức tạp và có khả năng mạnh mẽ Do đó chúng em chọn vi điều khiển họ DsPic33 là một trong những dòng vi điều khiển phù hợp với nghiên cứu của sinh viên và cũng ứng dụng rất nhiều trong công nghiệp cũng như cuộc sống.
2 Mục đích:
Hiểu được cấu trúc của họ vi điều khiển DsPic33 nói chung và vi điều khiển dsPic33fj12mc202 nói riêng Biết cách lập trình dsPic trên phần mềm MpLAP của Microchip, giao tiếp vi điều khiển với các ngoại vi cơ bản.
Trang 73 Đối tượng nghiên cứu:
Vi điều khiển DsPic33FJ12MC202 Phần mềm MpLAB IDE.
Trang 8Cơ bản về dsPIC, chỉ xét riêng phần vi điều khiển, dsPIC giống như PIC24, làcác vi điều khiển 16-bit, dựa trên kiến trúc Harvard sửa đổi, với tập lệnh rút gọn (nhưvậy dsPIC và PIC24 cũng thuộc loại RISC: Reduced Instruction Set Computer).dsPIC hiện nay gồm có hai dòng: dsPIC30F và dsPIC33F.
DsPIC là một họ vi điều khiển số (Digital Signal Controller) 16-bit Sự khácbiệt của dsPIC so với các vi điều khiển khác là dsPIC được tích hợp các công cụ xử
lý tín hiệu số Tuy mới ra đời (từ năm 2005) nhưng dsPIC đã nhanh chóng chiếmđược thị phần lớn trong thị trường chip trên thế giới cũng như tại Việt Nam bởi chipdsPIC có tốc độ xử lý cao, trên phiến tích hợp các module chức năng phù hợp vớinhiều ứng dụng khác nhau, đồng thời giá thành của dsPIC tương đối thấp Những yếu
tố đó cho phép thực hiện các dự án trên dsPIC rất hiệu quả
2 Trình dịch
Ngôn ngữ lập trình cho dsPIC có hai loại cơ bản là ngôn ngữ ASM và ngôn ngữ
C Lập trình trên ASM cho phép tạo ra mã gọn nhẹ, tốc độ thực thi nhanh Tuy nhiên,nhược điểm của ngôn ngữ ASM là trình bày phức tạp, khó khăn cho việc thực hiệncác giải thuật tính toán đối với người lập trình không chuyên Trong khi đó ngôn ngữ
C với cấu trúc rõ ràng, khả năng module hóa cao, thực hiện thuật toán một cách trựcquan sáng sủa đã thực sự trở thành một ngôn ngữ lý tưởng cho lập trình hệ nhúng
Trang 9Hiện nay trình biên dịch sử dụng ngôn ngữ C cho dsPIC được nhiều hãng cung cấp,như MikroC của MikroElectronika, MPLAB C30 của Microchip, CCS của CCS Inc Ngoài hai ngôn ngữ căn bản ASM và C ở trên, lập trình tạo mã cho dsPIC còn
có thể thực hiện theo dạng sơ đồ khối chức năng thông qua thư viện EmbeddedTarget for Microchip dsPIC của MATLAB & SIMULINK Cũng giống như các thưviện Target for C6000/C2000, Target for Infi neon C166 trong MATLAB, thư việnEmbedded Target for Microchip dsPIC cung cấp các sơ đồ khối chức năng trên chipnhư ADC, PWM, UART cho phép người lập trình sử dụng sơ đồ khối SIMULINK
để thực hiện các nội dung lập trình cho dsPIC
Trong những trình biên dịch kể trên, MPLAB C30 là trình biên dịch do chínhhãng Microchip cung cấp Với trình biên dịch MPLAB C30, người lập trình sẽ nắmvững được tổ chức phần cứng và phần mềm trên hệ nhúng dsPIC từ đó có thể pháttriển những firmware riêng cho dự án của mình hoặc sử dụng những firmware dochính hãng cung cấp
3 DsPic33FJ12MC202
Đặc điểm chính:
Hình 1.1: Xác minh sản phẩm
Trang 10Thuộc dòng dsPic33
FJ: flash program memory 3.3V
MC2: motor control family
Tốc độ CPU tối đa: 40 MIPS
Dung lượng RAM: 1 Kbytes
Phạm vi điện áp hoạt động: 3,0V đến 3,6V
Có 21 chân I/O
Điện áp chân đầu ra: từ 3,0V đến 3,6V (tối đa 5V chế độ open drain)
Dòng điện cho phép trên tất cả các chân: 4mA
Trang 11Chương 2: DsPic33FJ12MC202 và các module cơ bản
1 Cấu hình thạch anh
DsPic33 có 4 nguồn dao động: POSC, FRC, LPRC, SOSC
Bộ PLL
Bộ DOZE chạy ở chế độ tiết kiệm điện
Bộ giám sát lỗi dao động FSCM (Fail Safe Clock Monitor)
Hình 2.1: sơ đồ khối dao động
Bộ dao động vào của dsPIC33 thông qua bộ chia (nhân tần số) PLL, sau đódùng 2 chu kỳ để thực hiện 1 lệnh, dsPIC33 cho phép dao động FOSC tới 80MHz vàchạy ở tối đa 40MIPS Như vậy: tần số xung lệnh Fcy = Fosc/2, với Fosc là xung
Trang 12nhịp sau PLL.
Hình 2.2: biểu đồ thời gian xung lệnhViệc cấu hình bộ nhân chia PLL để đạt được tần số mong muốn cần thực hiện theo nguyên tắc sơ đồ sau:
HÌnh 2.3: Sơ đồ bộ PLL
Trang 13Trong đó: PLLDIV, PLLPRE, PLLPOST là các nhóm bít nằm trong 2 thanh ghi CLKDIV, PLLFBD, Fin = Fosc.
Giá trị Fcy = Fpllo được tính như sau:
VD: khởi tạo nguồn dao động sử dụng thạch anh ngoài là 8Mhz, tạo Fcy = 40MhzLựa chọn nguồn động được trình MPLAB hỗ trợ cấu hình trên giao diện
Tính toán bộ PLL:
2 Các cổng vào ra I/O
Trang 14Tất cả các chân của thiết bị (ngoại trừ VDD, VSS, MCLR và OSC1/CLKI,AVDD, AVSS) được chia sẻ giữa các thiết bị ngoại vi và cổng I/O song song(21pin).
Hình 2.4: Sơ đồ cấu trúc cổng vào ra
Tất cả các pin đều có 3 thanh ghi liên kết trực tiếp với chúng nếu là chức năng
số (digital)
TRIS register (TRISx) xác định chân nào là 1 chân input hay chânoutput: nếu bit nào trong thanh ghi bằng 0 thì pin đó là output, bằng 1 thì
là input
Trang 15 PORT register (PORTx): đọc giá trị từ input
x = A hoặc B
Điện trở trong PULLUP: tương ứng với các chân có chức năng Input ChangeNotification nằm trong 2 thanh ghi CNPU1 và CNPU2 tương ứng với 21 tín hiệuCNx
Ngoài ra DsPic33f còn hỗ trợ chế độ đầu ra Open-drain (để hở) ở một số pin.Chế độ này được điều khiển bởi thanh ghi ODCx được liên kết với mỗi Port Chophép điện áp ra cao hơn VDD bằng việc kéo lên nguồn 5V qua điện trở ngoài
Cấu hình chân Analog: các chân có chức năng ANx (x = 0 5 tương ứng với 6kênh đầu vào tương tự) được cấu hình bởi thanh ghi AD1CFGL có giá trị mặc địnhban đầu là 0x0000, sẽ là ở chế độ analog Và khi đọc giá trị trong thanh ghi PORT sẽbằng 0
VD: khởi tạo chân RB1 làm output, có điện trở kéo bên trong.
_TRISB1 = 0; //output
3 Ngắt ngoài
Có 3 ngắt ngoài là INT0, INT1, INT2
Trong đó INT0 mặc định là chân RB7 INT1 và INT2 có thể lựa chọn chânthông qua cấu hình thanh ghi RPINRx
Các bước cấu hình ngắt ngoài:
Chọn chân ngắt ngoài
Trang 16 Chọn bảng vector ngắt //thanh ghi INTCONx
Chọn ngắt theo sườn lên hay sườn xuống //thanh ghi INTCONx
Trang 17Xung nhịp đưa vào đếm có thể là một trong hai loại:
Xung nhịp bên trong IC: Đó là xung nhịp được tạo ra nhờ kết hợp mạch daođộng bên trong IC và các linh kiện phụ bên ngoài nối với IC Trong trường hợp sửdụng xung nhịp loại này, người ta gọi là các bộ định thời (timers) Do xung nhịp bênloại này thường đều đặn nên ta có thể dùng để đếm thời gian một cách khá chính xác.Xung nhịp bên ngoài IC: Đó là các tín hiệu logic thay đổi liên tục giữa 02 mức0-1 và không nhất thiết phải là đều đặn Trong trường hợp này người ta gọi là các bộđếm (counters) Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bênngoài như đếm các sản phầm chạy trên băng chuyền, đếm xe ra/vào kho bãi
Một khái niệm quan trọng cần phải nói đến là sự kiện “tràn” (overflow) Nóđược hiểu là sự kiện bộ đếm đếm vượt quá giá trị tối đa mà nó có thể biểu diễn vàquay trở về giá trị 0 Với bộ đếm 8 bit, giá trị tối đa là 255 (tương đương với FF trong
hệ Hexa) và là 65535 (FFFFH) với bộ đếm 16 bit
4.2 Bộ định thời/bộ đếm trong dspic33fj12mc202
Trong dspic33fj12mc202 (hoặc dspic33fj12mc201) cung cấp 3 bộ đinh thờiTimer 16 bit: Timer1, Timer2, Timer3
Cả 3 bộ timer đều có thể hoạt động ở chế độ 16 bit, ngoài ra còn có thể ghép nốitimer2 vào 3 để tạo timer23 32 bit
* Timer1
Là 1 bộ hẹn giờ 16-bit, có 3 chế độ:
16-bit Timer (chế độ timer)
16-bit Synchronous Counter (chế độ counter đồng bộ)
16-bit Asynchronous Counter (chế độ counter không đồng bộ)
Timer1 cũng hỗ trợ các chức năng như: chọn hệ số chia cho xung nhịp đầu vào,chạy trong chế độ sleep hay CPU idle, ngắt timer…
Trang 18Hình 2.5: Sơ đồ khối bộ timer1Theo sơ đồ trên, để hoạt động timer1 cần cấu hình một số bit sau:
Đặt bit TON (= 1) trong thanh ghi T1CON
Chọn hệ số chia prescale bằng các bit TCKPS <1: 0> trong thanh ghiT1CON
Đặt chế độ Đồng hồ và Chế độ Ghép bằng cách sử dụng TCS và bitTGATE trong thanh ghi T1CON
Đặt hoặc xóa bit TSYNC trong T1CON để chọn hoạt động đồng bộ hoặckhông đồng bộ
Đưa giá trị thời gian hẹn giờ hay chu kì vào thanh ghi PR1
Nếu ngắt được yêu cầu, thiết lập cho phép ngắt bit, T1IE Sử dụng cácbit ưu tiên, T1IP <2: 0>, để đặt ưu tiên ngắt
Trang 19 Khi hoạt đông giá trị trong thanh ghi TMR1 sẽ đếm tăng từ 0, nếu bằnggiá trị trong thanh ghi PR1 thì sẽ set cờ T1IF lên 1, đồng thời reset giá trịtrong TMR1.
Người lập trình cần xóa bit T1IF để nhận biết sự thay đổi cho lần tiếptheo, hoặc cho ngắt
bit 15 TON: Bật timer1 (bắt đầu đếm)
1 = Bắt đầu Timer 16 bit
0 = Dừng Timer 16 bit
bit 14 Chưa dùng: mặc định bằng 0
bit 13 TSIDL: Dừng ở chế độ Idle
1 = Ngừng hoạt động mô-đun khi thiết bị chuyển sang chế độ Idle
0 = Tiếp tục hoạt động mô-đun ở chế độ Idle
bit 12-7 Chưa dùng: mặc định bằng 0
bit 6 TGATE: bit Kích hoạt Timer1 Gated Time Accumulation (tich lũy thời
gian)
Khi TCS = 1: Bit này bị bỏ qua
Khi TCS = 0: 1 = Tích lũy thời gian được kích hoạt
Trang 200 = tích lũy thời gian không được kich hoạt
bit 5-4 TCKPS <1: 0>: Chọn hệ số chia Clock Prescale
bit 2 TSYNC: chọn Đồng bộ hóa đầu vào với xung ngoài bên ngoài
Khi TCS = 1: 1 = Đồng bộ hóa đầu vào đồng hồ bên ngoài
0 = Không đồng bộ hóa đầu vào đồng hồ bên ngoài
Khi TCS = 0: Bit này bị bỏ qua
bit 1 TCS: Chọn Nguồn xung nhịp
1 = Đồng hồ bên ngoài từ pin T1CK (sườn lên)
0 = Đồng hồ bên trong (FCY)
bit 0 Chưa dùng: mặc định bằng 0
Nếu sử dụng ngắt timer1 thì sẽ cấu hình trong bit T1IE thanh ghi IEC0 và bitT1IF trong thanh ghi IFS0
Trang 21T1IE = 0: không kich hoạt yêu cầu ngắt
= 1: kich hoạt yêu cầu ngắt
T1IF: cờ ngắt cần được xóa trong chương trình phục vụ ngắt
Ngoài ra còn có thể đặt lại mức ưu tiên cho ngắt bằng 3bit T1IP<3:0> trongthanh ghi IPC0
VD: sử dụng timer1 để đảo trạng thái chân RB0 sau mỗi 0.5s =500ms
Cách làm: sử dụng timer1 tạo ngắt mỗi 1ms, trong ISR sẽ đếm lên 1, khi nàobiến đếm bằng 500 thì đảo trạng thái bit LATB0,
Ví dụ Fcy = 40Mhz, chọn hệ số chia prescale 1:8 nên tần số đưa vào timer là40/8 = 5 MHz
Để tạo trễ 1 ms thì thời gian nạp vào PR1= 1 10^-3 * 5 * 10^-6 = 5000
Hàm khởi tạo:
Trang 22Trong ISR:
Kết quả mô phỏng:
Trang 23Hình 2.6: mô phỏng sử dụng timer1
*Timer2 và Timer3
Ở chế độ 16bit thì timer2 hoặc timer3 đều tương tự như timer1
Các thanh ghi liên quan:
Timer2: T2CON
Timer3: T3CON
Ngắt: IEC0 và IFS0
*Ở chế độ 32 bit: ghép 2 timer2 và timer3 thành timer23
Trong thanh ghi T2CON của timer2 có bit T32
T32 = 0: timer 2 và timer3 hoạt động như 2 timer 16bit
= 1: time2 và timer3 hoạt động như timer 32 bit
Các bít còn lại cấu hình tương tự như timer1
Trang 24Sơ đồ khối thể hiện hoạt động của timer23
Hình 2.7: Sơ đồ khối bộ timer2,3
Thanh ghi nạp giá trị đếm là PR3 (16bit cao) va PR2 (16bit thấp)
Nếu kích hoạt yêu cầu ngắt thì sẽ cấu hình ngắt của time 3: T3IE và cờ ngắt
Trang 25VD: hàm khởi tạo timer23 32 bit
Giá trị đếm lúc này là 0x0001ffff là 1 giá trị 32 bit
5 OutputCompare
5.1 Đặc điểm chung
Module Output compare so sánh giá trị của bộ đếm thời gian (timer) với giá trịcủa một hoặc hai thanh ghi so sánh tùy thuộc vào hoạt động chế độ được chọn Trạngthái của pin đầu ra thay đổi khi giá trị bộ đếm thời gian khớp với giá trị đăng ký.Module tạo ra một xung đầu ra đơn hoặc
chuỗi xung đầu ra, bằng cách thay đổi trạng thái của chân đầu ra trên các sựkiện so sánh phù hợp
Nó cũng có thể tạo ra các ngắt khi so sánh các sự kiện trùng khớp
Trang 26Mô-đun So sánh đầu ra có nhiều chế độ hoạt động:
1 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp One-Shot tích c c m c th p ực mức thấp ức thấp ấp
2 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp One-Shot tích c c m c cao ực mức thấp ức thấp
3 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp đảo trạng thái o tr ng thái ạng thái
4 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp One-Shot có tr ễ
5 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp xung liên t c ục
6 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp PWM không có b o v l i ảo trạng thái ệ lỗi ỗi
7 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp PWM có b o v l i ảo trạng thái ệ lỗi ỗi
Hình 2.8: Biểu đồ khối của module output compare
Như vậy ở đây chỉ có timer2 hoặc timer3 được sử dụng
2 thanh ghi so sánh với giá trị của timer là OcxRS và OcxR
X = 1, 2 do dsPic33fj12MC202 có 2 bộ output compare
Chân đầu ra là được lựa chọn là outPut pinmap như sau
Trang 27Chế độ của Output compare 1->7 được lựa chọn bởi 3bit OCM<2:0> được nhưdưới đây.
Compare
5.2 Các thanh ghi liên quan
* thanh ghi điều khiển
Trang 28bit 13 OCSIDL: dừng trong chế độ nghỉ hay không
1 = dừng trong chế độ CPU nhàn rỗi
0 = tiếp tục hoạt động ở chế độ Nhàn rỗi CPU
bit 4 OCFLT: Bit trạng thái điều kiện lỗi PWM
1 = Điều kiện lỗi PWM đã xảy ra (chỉ xóa trong phần cứng)
0 = Không có lỗi PWM xảy ra (bit này chỉ được sử dụng khi OCM <2:0> = 111)
bit 3 OCTSEL: bit chọn Timer
1 = Timer3 là nguồn đồng hồ cho Output Compare x
0 = Timer2 là nguồn đồng hồ cho Output Compare x
bit 2-0 OCM <2: 0>: bit chọn chế độ
*2 thanh ghi để nạp giá trị so sánh với giá trị đếm trong timer
Trang 295.3 Trạng thái chân đầu ra
Hình 2.9: trang thái chân đầu ra trong OC
5.4 Cụ thể về chế độ thường sử dụng PWM mode (OCM =110)
Trang 30Hình 2.10: giản đồ xung hoat động của OC chế đô PWM
Tại thời điểm số
1 Giá tr h s i u ch (duty cycle) c a chu kì ị hệ số điều chế (duty cycle) của chu kì đầu tiên được viết vào ệ lỗi ố điều chế (duty cycle) của chu kì đầu tiên được viết vào đ ều chế (duty cycle) của chu kì đầu tiên được viết vào ế độ One-Shot tích cực mức thấp ủa chu kì đầu tiên được viết vào đầu tiên được viết vào u tiên được viết vào c vi t v o ế độ One-Shot tích cực mức thấp ào thanh ghi OcxR tr ước khi enable PWM mode c khi enable PWM mode.
2 Duty cycle th c a chu khi th 2 ức thấp ủa chu kì đầu tiên được viết vào ức thấp được viết vào c vi t v o trong thanh ghi OcxRS ế độ One-Shot tích cực mức thấp ào
3 Ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp PWM được viết vào c ch n, chân ra Ocx l m c th p n u OcxR = 0, l ọn, chân ra Ocx là mức thấp nếu OcxR = 0, là ào ức thấp ấp ế độ One-Shot tích cực mức thấp ào
m c cao n u OcxR khác 0 ức thấp ế độ One-Shot tích cực mức thấp
4 Timer được viết vào c enable v b t ào ắt đầu đếm tăng đầu tiên được viết vào đế độ One-Shot tích cực mức thấp u m t ng ăng
5 Trong ch ế độ One-Shot tích cực mức thấp độ One-Shot tích cực mức thấp so sánh, chân Ocx m c th p ở mức thấp ức thấp ấp
6 ở mức thấp th i i u cu i chu kì, giá tr trong OcxRS đ ểu cuối chu kì, giá trị trong OcxRS được sao vào trong thanh ố điều chế (duty cycle) của chu kì đầu tiên được viết vào ị hệ số điều chế (duty cycle) của chu kì đầu tiên được viết vào được viết vào c sao v o trong thanh ào ghi OcxR Chân Ocx l m c 1 n u OcxR = 0, l m c 0 n u OcxR ào ức thấp ế độ One-Shot tích cực mức thấp ào ức thấp ế độ One-Shot tích cực mức thấp khác 0
7 duty cycle cho chu kì th 3 ức thấp được viết vào c ghi v o thanh ghi OcxRS ào
VD: tạo xung có duty cycle = 0.5 trên chân RB2 sử dụng OC1
Tạo chu kì 1ms Giá trị trong PR2 của timer2 là 5000
Giá trị so sánh OC1RS là 2500 nên duty = 0.5
Trang 31Kết quả mô phỏng:
Trang 32Hình 2.11: Mô phỏng PWM trong OutputCompare
6 UART, SPI, I2C
6.1 UART
Dspic33FJ12MC202 chỉ có 1 bộ truyền thông không đồng bộ UART1
a Đặc điểm chung
Truyền nhận song công qua 2 chân UxTX và UxRX
Lựa chọn chế độ data 8 bit, chọn bít kiểm tra chẵn lẻ hoặc không
1 hoặc 2 bit stop
Điều khiển phần cứng qua 2 tín hiệu UxCTS và UxRTS
Baurate từ 10Mbps đến 38bps tại 40 MIPS
4 bộ đệm truyền nhận FIFO
b Các thanh ghi liên quan
Thanh ghi chọn chế độ UART
Bit 15: UARTEN enable hoặc disable module uart
Bit 1,2 PDSEL<1:0>: chọn bít chẵn lẻ
Bit 0: STSEL: chọn bit stop
Thanh ghi trạng thái
Trang 33URXEN: enable hoặc disable nhận uart
UTXEN: enable hoặc disable truyền uart
URXSEL<1:0>: chọn chế độ báo ngắt 1byte, 2 byte hay 4 byte
URXDA: bít báo trạng thái dữ liệu khả dụng
Thanh ghi nhận dữ liệu UxRXREG
Thanh ghi truyền dữ liệu UxTXREG
Thanh ghi cấu hình Baurate UxBRG
Công thức tính toán baurate:
Trong đó Fp = Fcy là tần số xung lệnh
Truyền nhận uart
Trang 34Hình 2.12: sơ đồ khối truyền uart
Các bước cấu hình truyền uart
1 Khởi tạo baurate
2 Chọn chế độ data 8 hay 9 bit, có bít chẵn lẻ không, 1 hay 2 bit stop
3 Có thể cấu hình ngắt truyền trong thanh ghi IEC0x
4 Mức ưu tiên ngắt nếu sử dụng ngắt
5 Enable UART module bằng việc set UARTEN bit (UxMODE<15>)
6 Enable truyền qua việc set UTXEN (UxSTA<10>)
7 UxTXIF nên được xóa trong chương trình ISR
8 Load dữ liệu vào trong thanh ghi UxTXREG
Trang 35Hình 2.13: sơ đồ khối nhận uart
Các bước cấu hình nhận uart tương tự như nhận uart
6.2 SPI
a Đặc điểm chung
SPI (Serial Peripheral Interface) module là giao tiếp nối tiếp đồng bộ được sửdụng cho giao tiếp với ngoài vi và thiết bị vi xử điều khiển khác Các thiết bị này cóthể là EEPROM, thanh ghi dịch, chuyển đổi ADC…