Cơ bản về PIC16F877A

Một phần của tài liệu Thiết kế phần cơ sở của robot tự hành (Trang 49)

5.1.1 Pic là gì?

PIC là viết tắt của “Programable Intelligent Computer”, tạm dịch là “ Máy tính thông minh khả trình” do hãng Microchip Technology ñặt tên cho vi ñiều khiển ñầu tiên của họ và phát triển thành dòng họ vi ñiều khiển PIC sau này.

Vi ñiều khiển ñược sử dụng trong robot là PIC16F877A. Các vi ñiều khiển thuộc dòng PIC tỏ ra rất ổn ñịnh, các khối chức năng ñược hỗ trợñầy ñủ và giúp người dùng tiết kiệm thời gian thiết kế mạch cũng như lập trình. Hiện nay các loại vi ñiều khiển dòng PIC ñược sử dụng rất nhiều trong công nghiệp. Tiêu biểu nhất trong dòng vi ñiều khiển cấp trung của họ PIC là 16F877A.

Hình 5.1 – Sơñồ chân của PIC16F877A 5.1.2 ðặc ñim ni bt ca PIC16F877A:

• Cấu trúc tập lệnh ñơn giản: 35 lệnh ñơn.

• CPU thiết kế theo kiến trúc RISC.

• Tần số hoạt ñộng lớn nhất: DC – 20MHz.

Flash Program Memory: 8K x 14 words.

Data Memory (RAM) : 368 x 8 bytes.

EEPROM Data Memory: 256 x 8 bytes.

• Nạp chương trình và sửa lỗi onboard.

• Chế tạo theo công nghệ CMOS.

Chương 5: Các linh kiện sử dụng trong khối phần cứng

Hình 5.2 – Sơñồ khối của PIC16F877A

5.1.3 Các cng vào ra:

Vi ñiều khiển PIC16F877A có 5 cổng vào ra bao gồm:A, B, C, D, E. Trong ñó:

Cổng A:

• Vào ra 6 bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi TRISA. Nếu bit TRISAx=1 thì chân RAx sẽñược ñinh nghĩa là lối vào và ngược lại.

• Thanh ghi lưu trạng thái các chân của cổng A là thanh ghi PORTA.

• Chân RA4 của cổng A ñược có thể ñược sử dụng ñể ñưa dao ñộng ñầu vào cho Timer0 (T0CKI).

• Các chân còn lại của cổng A có thể ñược khai báo ñểñược dùng như lối vào tương tự. Các thanh ghi liên quan ADCON0, ADCON1.

Bảng 5.1 – Cấu hình cổng A

Cổng B:

• Vào ra số có ñộ rộng 8bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi TRISB. Nếu bit TRISBx=1 thì chân RBx sẽ ñược ñinh nghĩa là lối vào và ngược lại.

• Thanh ghi lưu trạng thái các chân của cổng B là thanh ghi PORTB

• 3 chân của cổng B là : RB3,RB6,RB7 còn ñược sử dụng làm chân lập trình PGM, PGC,PGD.

• 4 chân từ RB7:RB4 có ngắt on-change.

Bảng 5.2 – Cấu hình cổng B

Cổng C :

• Vào ra số có ñộ rộng 8bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi TRISC. Nếu bit TRISCx=1 thì chân RCx sẽ ñược ñinh nghĩa là lối vào và ngược lại.

• Thanh ghi lưu trạng thái các chân của cổng C là thanh ghi PORTC. • Các chân của cổng C ñều có bộñệm triger smitt.

Chương 5: Các linh kiện sử dụng trong khối phần cứng

Bảng 5.3 – Cấu hình cổng C

Cổng D :

• Vào ra số có ñộ rộng 8bit, có ñịnh hướng. Khai báo ñịnh hướng vào ra ở thanh ghi TRISD. Nếu bit TRISDx=1 thì chân RDx sẽ ñược ñinh nghĩa là lối vào và ngược lại.

• Thanh ghi lưu trạng thái các chân của cổng D là thanh ghi PORTD.

Bảng 5.4 – Cấu hình cổng D

Cổng E :

• Cổng E chỉ có 3 chân vào ra, có bộñệm triger smitt.

• Cổng E có thể ñược dùng như lối vào ra số hoặc tương tự. Thiết lập tại các thanh ghi TRISE, ADCON1.

Bảng 5.5 – Cấu hình cổng E 5.1.4 Các khi Timer:

Vi ñiều khiển PIC16F877A có 3 bộ timer:

Timer 0:

• Là bộñếm 8bit, có thể ghi ñọc.

• Timer0 có 2 chếñộ hoạt ñộng là : ñịnh thời hoặc ñếm.

• Khi hoạt ñộng Timer ñếm tiến từ giá trị ñược ghi trong thanh ghi TMR0 ñến 256. Khi ñếm ñến 256 cờ tràn TMR0IF sẽñc bật lên.

Time = (FOSC/4) x Prescale x ( 256 – TMR0 )

• Bit T0CS : chọn nguồn dao ñộng cho Timer0

=1 nguồn dao ñộng ñược ñưa vào từ chân T0CKI.(Chế ñộñếm) =0 nguồn dao ñộng hệ thống

• Bit T0SE : Ở chếñộñếm, chọn sườn xung =1 sườn xuống.

=0 sườn lên. • Bit PSA : Chọn prescale

=1 prescale ñược dùng cho watchdog. =0 prescale ñược dùng cho timer0. • Bit PS2:PS0 : chọn tỉ lệ chia cho Prescale

Chương 5: Các linh kiện sử dụng trong khối phần cứng

Bảng 5.6 – Cấu hình Prescale Timer0

Hình 5.3 – Sơñồ khối Timer0

Timer1:

• Là bộ ñếm 16 bit, có thể ghi ñọc. Giá trị timer ñược lưu trong 2 thanh ghi là TMR1L và TMR1H.

• Khác với timer0, timer1 có bit bật và tắt timer. • Timer1 có thể ñược dùng ñểñinh thờI cho khối CPP.

• Khi Timer 1 ñược bật, timer sẽ ñếm từ giá trị ñược ghi trong 2 thanh ghi TMR1L và TMR1H tới 0xFFFF, khi ñó cờ tràn TMR1IF ñược bật.

• Time = (FOSC/4) x Prescale x ( 0xFFFF – (( TMR1H x 0xFFFF ) + TMR1L)).

• Bit T1OSCEN: Chọn nguồn dao ñộng =1: sử dụng dao ñộng ngoài.

=0: sử dụng nguồn dao ñộng hệ thống.

• Bit TMR1CS=1 timer1 hoạt ñộng như bộñếm, xung vào từ chân RC1. • Bit TMR1ON: bật tắt timer1.

=1 Bật. =0 Tắt.

• Bit T1CKPS1: T1CKPS0 : Chọn số chia cho prescale. 0:0 chia 1 0:1 chia 2 1:0 chia 4 1:1 chia 8 Timer2: Hình 5.5 – Sơñồ khối Timer2

Chương 5: Các linh kiện sử dụng trong khối phần cứng

• Là bộ ñếm 16 bit, có thể ghi ñọc. Giá trị timer ñược lưu trong 2 thanh ghi là TMR1L và TMR1H.

• Timer2 có bit bật và tắt timer.

• Timer1 có thểñược dùng ñểñinh thời cho khối PWM.

• Khi Timer 1 ñược bật, timer sẽ ñếm từ giá trị ñược ghi trong 2 thanh ghi TMR2L và TMR2H tới 0xFFFF, khi ñó cờ tràn TMR2IF ñược bật.

• Timer 2 có cả prescale lẫn postscale.

• Các bit TOUTPS3: TOUTPS0 : Chọn thỉ lệ chia cho postscale. • TMR2ON : bit bật tắt timer2.

• T2CKPS1: T2CKPS1 : Chọn tỉ lệ cho prescale

5.1.5 Các khi PWM:

PIC16F877A có 2 khốI PWM nằm trong 2 khối CCP

Hình 5.6 – Sơñồ khối PWM

• ðộ rộng xung là dữ liệu 10 bit ñược lưu trong 2 thanh ghi CCPR1L và OCPCON<5:4>

• Chu kì ñược quyết ñịnh bởI giá trị ghi trong thanh ghi PR2 và Timer2. PWM period = [( PR2 + 1 ) x 4 x TOSC x ( TMR2 prescale value )

Hình 5.7 – Xung ra từ PWM

Các bước cài ñặt cho PWM:

• Ghi chu kì vào thanh ghi PR2.

• Ghi ñộ rộng xung vào 2 thanh ghi CCPR1L và CCP1CON<5:4> • Chọn chân ra là chân RC2. Bằng cách xoá bit TRISC2.

• Ghi giá trị prescale của timer2. Cho phép Timer2. • Cấu hình CCP ñể sử dụng PWM.

Bảng 5.7 – Cấu hình khối CCP 5.1.6 Khi ADC:

Khối ADC của PIC16F877A là loại ADC xấp xỉ liên tiếp có 10 bit lối ra. ðiện áp tham chiếu lựa chọn ñược bằng phần mềm, có thể là ñiện áp hệ thống, hoặc ñiện áp tham chiếu ngoài ñược ñưa và từ chân RA2 và RA3.

Khi việc biến ñổi A/D hoàn tất cờ ADIF sẽñược bật. Khối biến ñổi A/D có 4 thanh ghi là :

• Kết quả biến ñổi Byte cao: ADRESH • Kết quả biến ñổi Byte thấp: ADRESL

Chương 5: Các linh kiện sử dụng trong khối phần cứng

Hình 5.8 – Sơñồ khối ADC

• Thanh ghi ADCON0:

o Chọn nhịp xung ñồng hồ cho ADC.

Bảng 5.8 – Cấu hình xung nhịp cho ADC

o Các bit CHS2:CHS1:CHS0 : chọn kênh cho ADC 000 : kênh 0 ( AN0 )

001: kênh 1 ( AN1 ) 010: kênh 2 ( AN2 ) 011: kênh 3 ( AN3 ) 100: kênh 4 ( AN4 )

101: kênh 5 ( AN5 ) 110: kênh 6 ( AN6 ) 111: kênh 7 ( AN7 )

o Bit GO/DONE : khi ADGO=1, ADC bắt ñầu biến ñổi.

o Bit ADON: bật tắt ADC.

Một phần của tài liệu Thiết kế phần cơ sở của robot tự hành (Trang 49)