CHƢƠNG 2 NÚT MẠNG
2.2. Giới thiệu vi điều khiển CC1010
2.2.1 Các đặc điểm chính:
- Thu phát không dây 300-1000 MHz.
- Dòng tiêu thụ rất thấp (9,1 mA trong chế độ nhận). - Độ nhạy cao (-107 dBm).
- Có thể lập trình cho công suất đầu ra tới +10 dBm. - Tốc độ truyền RF có thể đạt 76.8 kbit/s.
- Cần rất ít thành phần ngoài - Đo đƣợc cƣờng độ RF (RSSI) - Tƣơng thích họ VĐK 8051
- 32 kB Flash, 2048 + 128 Byte SRAM
- 3 kênh ADC 10 bit, 4 timers / 2PWMs, 2 UARTs, RTC, Watchdog, SPI, mã hoá DES, 26 cổng I/O
- Có khả năng gỡ lỗi sử dụng chƣơng trình dịch Keil μVision2 IDE qua cổng nối tiếp
- Điện áp 2.7 - 3.6 V
- 64-lead TQFP (Thin Quad Flat Pack)
2.2.2 Cổng
Có 4 cổng I/O P0, P1, P2, P3 với 26 chân cổng. Mỗi cổng có 2 thanh ghi tƣơng ứng: thanh ghi cổng P0, P1, P2, P3 và thanh ghi hƣớng (P0DIR, P1DIR, P2DIR, P3DIR). Mỗi bit trong thanh ghi Px có một bit hƣớng tƣơng ứng trong thanh ghi PxDIR.y. Đặt PxDIR.y = 1 sẽ làm cho Px.y là cổng nhận dữ liệu (input) và đặt PxDIR.y = 1 sẽ làm cho Px.y là cổng xuất dữ liệu (output)
2.2.3 Ngắt
CC1010 có tổng cộng 15 nguồn ngắt, chia sẻ 12 đƣờng ngắt. Mỗi ngắt có một mức ƣu tiên, vector ngắt, cờ cho phép ngắt và cờ báo ngắt.
Bảng 1. Ngắt và các tham số Ngắt Mức ƣu tiên tự nhiên Điều khiển mức ƣu tiên Vector ngắt Cờ cho phép ngắt Cờ ngắt
Ngắt Flash/debug 0 - 0x33 EICON.PDIE EICON.PDIF
Ngắt ngoài 0 1 IP.PX0 0x03 IE.EX0 TCON.IE0
Ngắt Timer 0 2 IP.PT0 0x0B IE.ET0 TCON.TF0
Ngắt ngoài 1 3 IP.PX1 0x13 IE.EX1 TCON.IE1
Ngắt Timer 1 4 IP.PT1 0x1B IE.ET1 TCON.TF1
Ngắt truyền nối tiếp 0 5 IP.PS0 0x23 IE.ES0 SCON0.TI 0
Ngắt nhận nối tiếp 0 SCON0.RI 0
Ngắt truyền nối tiếp 1 6 IP.PS1 0x3B IE.ES1 SCON1.TI 1
Ngắt nhận nối tiếp 1 SCON1.RI 1
Ngắt truyền/nhận RF 7 EIP.PRF 0x43 EIE.RFIE EXIF.RFIF
Ngắt Timer 2 8 EIP.PT2 0x4B EIE.ET2 EXIF.TF2
Ngắt ADC 9 EIP.PAD 0x53 EIE.ADIE
và ADCON2. ADCIE EXIF.ADIF và ADCON2. ADCIF
Ngắt mã hoá/giải mã DES EIE.ADIE và CRPCON. CRPIE EXIF.ADIF và CRPCON. CRPIF
Ngắt Timer 3 10 EIP.PT3 0x5B EIE.ET3 EXIF.TF3
Ngắt thời gian thực 11 EIP.PRTC 0x63 EIE.RTCIE EICON.RTCIF
2.2.3.1 Mặt nạ ngắt
IE.EA là cờ cho phép ngắt toàn bộ các ngắt, ngoại trừ ngắt Flash/Debug. Khi cờ IE.EA đƣợc thiết lập, mỗi ngắt bị che bởi cờ cho phép ngắt đƣợc liệt kê ở bảng 1. Khi cờ IE.EA bị xoá, tất cả các ngắt bị che, ngoại trừ ngắt Flash/Debug, có bit che ngắt riêng, EICON.FDIE.
2.2.3.2 Xử lý ngắt
Khi một ngắt đƣợc cho phép xảy ra, CPU nhảy tới địa chỉ phục vụ ngắt tƣơng ứng với ngắt đó (ISR), nhƣ chỉ ra ở bảng 1. CC1010 thực hiện ISR để hoàn thành trừ khi một ngắt khác có mức ƣu tiên cao hơn xảy ra. Mỗi ISR kết thúc với lệnh RETI. Sau khi thực hiện lệnh RETI, CC1010 quay trở lại lệnh tiếp theo sau lệnh đã đƣợc thực hiện trƣớc khi xảy ra ngắt. Nếu lệnh đang thực hiện là RETI, hay đang ghi vào các thanh ghi IP, IE, EIP, EIE, CC1010 hoàn thành thêm một lệnh trƣớc khi phục vụ ngắt.
2.2.3.3 Thứ tự ƣu tiên
Các ngắt có 2 giai đoạn ƣu tiên: mức ngắt và mức tự nhiên. Mức ngắt đƣợc ƣu tiên trƣớc mức tự nhiên.
Mức ngắt có 2 mức: thấp và cao. Ngắt có mức ƣu tiên là cao sẽ có thể ngắt ngang chƣơng trình phục vụ ngắt có mức ƣu tiên thấp hơn. Nếu các ngắt có cùng
mức ƣu tiên mà cùng xảy ra đồng thời, ngắt nào có mức ƣu tiên tự nhiên thấp nhất sẽ đƣợc phục vụ trƣớc.
2.2.4 Biến đổi ADC
Bộ biến đổi ADC của CC1010 có độ phân dải 10 bit, đƣợc điều khiển bởi các thanh ghi ADCON và ADCON2. Có ba kênh vào ADC, đƣợc chọn bởi
ADCON.ADADR. Thanh ghi này cũng đƣợc sử dụng để chọn chân AD1 nhƣ là điện áp tham chiếu ngoài (khi sử dụng AD0). Khi chân AD1 đƣợc dùng nhƣ tham chiếu ngoài, chỉ có hai lối vào ADC đƣợc sử dụng. Đầu ra ADC là đơn cực, nghĩa là giá trị 0 tƣơng ứng với 0V và 1023 tƣơng ứng với điện áp tham chiếu (1.25 V hoặc VDD phụ thuộc vào bit ADCREF). Điện áp tham chiếu analog đƣợc điều khiển bởi
ADCON.ADCREF. ADCON.AD_PD cần đặt bằng 1 khi không sử dụng ADC để tiết kiệm năng lƣợng. Biến đổi ADC đƣợc bắt đầu sau 5µs sau khi xoá bit điều khiển ADCON.ADCRUN khi sử dụng VDD hay nguồn tham chiếu ngoài, hoặc 100 µs khi sử dụng tham chiếu trong 1.25V.
2.2.5 Bộ định thời
CC1010 có 4 bộ định thời Timer 0, Timer 1, Timer 2, Timer 3 hoạt động nhƣ là bộ định thời hay bộ đếm (Timer/Counter) trong đó Timer2 và Timer3 còn có thể hoạt động nhƣ bộ điều chế độ rộng xung (PWM - Pulse Width Modulation).
2.2.5.1 Time 0/ Timer 1
Timer/Counter 0 và 1 có thể đƣợc lập trình và hoạt động độc lập theo 4 chế độ, đƣợc điều khiển bởi các thanh ghi TMOD và TCON. Các chế độ có thể nhƣ sau:
- 13 bit Timer/Counter (Mode 0)
- 16 bit Timer/Counter (Mode 1)
- 8 bit Timer/Counter tự động nạp lại (Mode 2) - 2 Timer 8 bit (chỉ dùng cho Timer 0, Mode 0)
Chi tiết về các chế độ, cách điều khiển sử dụng 2 thanh ghi TCON và TMOD xin xem thêm phần Tài liệu tham khảo [6].
2.2.5.2 Timer 2/ Timer 3
Ngoài tính năng nhƣ là bộ định thời, Timer 2 và 3 có thể đƣợc sử dụng nhƣ bộ điều chế độ rộng xung PWM. Nếu xoá bit TCON2.M2/TCON2.M3 thì sẽ là bộ định thời. Nếu thiết lập bit TCON2.M2/TCON2.M3 thì sẽ là PWM. Khi đó chân P3.4 và chân P3.5 là chân phát xung đầu ra tƣơng ứng cho Timer2/Timer3. Chu kỳ TnPWM đối với Timer n nhƣ sau:
fsystem TnPRE TnPW M 255.( 1)
Trong đó thời gian ở trạng thái cao Tnh là:
fsystem e Tn Tn
TnhPWM .( Pr 1)
Điều này có nghĩa là trong chế độ PWM, nếu Tn = 0 thì có mức thấp ở đầu ra và nếu Tn = 255 thì có mức cao.
Trong đó giá trị các thanh ghi Tn và TnPRE đƣợc đặt từ trƣớc.
2.2.6 Bộ thu phát không dây (RF Transceiver) 2.2.6.1 Miêu tả chung 2.2.6.1 Miêu tả chung
Bộ thu phát CC1010 UHF RF đƣợc thiết kế cho những ứng dụng tiêu thụ năng lƣợng thấp và điện áp thấp. Mạch thu phát đƣợc dành cho ISM (công nghiệp, khoa học và y học) và SRD (Short Range Device) dải tần 315, 433, 868 và 915 MHz, nhƣng có thể dễ dàng lập trình để hoạt động trong dải tần 300-1000 MHz. Các thông số chính của CC1010 có thể đƣợc lập trình thông qua các thanh ghi chức năng đặc biệt (Special Function Registers - SFRs), làm cho CC1010 rất mềm dẻo và
dễ sử dụng bộ thu phát vô tuyến. Rất ít các thành phần tích cực đòi hỏi cho hoạt động của bộ thu phát RF.
Một sơ đồ khối đƣợc đơn giản hoá của bộ thu phát RF đƣợc thể hiện ở hình 2.1. Chỉ các chân tín hiệu analog đƣợc thể hiện cùng với bus dữ liệu SFR bên trong để thiết lập giao tiếp RF và để truyền và nhận dữ liệu.
Trong chế độ nhận, tín hiệu vào RF đƣợc khuếch đại bởi bộ khuếch đại ồn thấp (low-noise amplifier LNA) và đƣợc chuyển thành trung tần (intermediate frequency - IF) bởi bộ trộn (MIXER). Trong giai đoạn trung tần (IF STAGE) tín hiệu đƣợc khuếch đại và lọc trƣớc khi đƣa tới bộ giải điều chế (DEMOD). Nhƣ một lựa chọn, một tín hiệu RSSI hay IF sau khi trộn đƣợc đƣa vào AD2. Sau khi giải điều chế, tín hiệu số đƣợc đƣa tới thanh ghi RFBUF. Ngắt có thể đƣợc sinh ra theo mỗi bit hay mỗi byte nhận đƣợc (EXIF.RFIF).
Trong chế độ truyền, dao động đƣợc điều khiển bởi điện áp (VCO) đƣợc đƣa trực tiếp tới khuếch đại công suất (PA). Đầu ra RF là khoá dịch chuyển tần số (frequency shift keyed - FSK) bởi luồng bit đƣợc đƣa tới thanh ghi RFBUF. Ngắt có thể đƣợc sinh ra cho mỗi bit hay byte đƣợc truyền (EXIF.RFIF). Mạch chuyển
bên trong T/R làm cho giao tiếp với antenna dễ dàng và sử dụng rất ít thành phần ngoại vi.
Bộ tổ hợp tần số tạo ra dao động bên trong đƣợc đƣa tới MIXER trong chế độ nhận và PA trong chế độ truyền. Bộ tổ hợp tần số bao gồm một dao động thạch anh (XOSC), bộ nhận biết pha (phase detector - PD), bơm nạp (CHARGE PUMP), bộ lọc (internal loop filter - LPF), VCO, và các bộ chia tần (/R và /N). Một tinh thể ngoài có thể đƣợc nối vào XOSC. VCO chỉ cần một cuộn cảm ngoài.
2.2.6.2 Mạch ứng dụng RF
Bộ thu phát RF đòi hỏi rất ít các ngoại vi. Một mạch ứng dụng điển hình đƣợc thể hiện ở hình 2.2. Các giá trị của các thành phần này xin xem thêm phần Tài liệu tham khảo [6].
Tương ứng vào/ra
Cặp C31/L32 là đầu vào cho nơi nhận của bộ nhận, và nội trở của L32 có tác dụng định thiên (bias) một chiều. C41, L41 và C42 đƣợc sử dụng để tƣơng ứng với bộ truyền có trở kháng 50 Ohm. Một bộ chuyển mạch trong T/R làm cho nó có khả năng cùng nối với đầu vào và đầu ra và thích hợp với bộ thu phát 50Ω trong cả hai chế độ RX và TX. VCO đƣợc tích hợp hoàn toàn trừ cuộn cảm L101.
Lọc
Các thành phần bên ngoài (ví dụ RF LC hay lọc răng cƣa) có thể đƣợc sử dụng để cải tiến hiệu năng cho các ứng dụng riêng biệt. Nếu lọc răng cƣa đƣợc sử dụng, nó chỉ có tác dụng cho RX (phải sử dụng chuyển mạch ngoài RX/TX).
Nguồn cung cấp
Các tụ tách và lọc nguồn cần đƣợc sử dụng (không chỉ ra trong mạch ứng dụng). Các tụ này càng gần chân nguồn càng tốt. Vị trí và kích thƣớc của tụ tách và lọc nguồn là rất quan trọng để đạt đƣợc độ nhạy tốt nhất.
Chú ý rằng các giá trị hợp thành cho 868 và 915 MHz có thể là nhƣ nhau. Tuy nhiên, rất quan trọng là cách bố trí đƣợc tối ƣu hoá để lựa chọn cuộn cảm VCO để làm cho tần số hoạt động đƣợc chính xác. Cuộn cảm VCO phải đƣợc đặt rất sát và đối xứng với các chân tƣơng ứng (L1 và L2). Chipcon cung cấp cách bố trí tham khảo để đạt đƣợc hiệu năng cao nhất.
2.2.6.3 Điều khiển bộ thu phát RF và quản lý năng lƣợng
Thanh ghi RFMAIN điều khiển chế độ hoạt động (RX hay TX), sử dụng hai thanh ghi tần số và các chế độ tiết kiệm năng lƣợng (power down). Theo cách này CC1010 có đƣợc sự mềm dẻo để quản lý công suất RF để đạt đƣợc chính xác năng lƣợng tiêu thụ đòi hỏi và các ứng dụng chỉ sử dụng pin. Các chế độ tiết kiệm năng lƣợng khác nhau đƣợc điều khiển thông qua các bit riêng biệt trong thanh ghi
RFMAIN. Các bit này điều khiển phần RX, TX, bộ tổ hợp tần số và dao động thạch anh. Sự điều khiển riêng biệt này có thể dùng để tối ƣu hoá làm cho dòng tiêu thụ thấp nhất có thể trong các ứng dụng nào đó. Một thứ tự bật nguồn điển hình để đạt đƣợc dòng tiêu thụ thấp nhất đƣợc thể hiện ở hình 2.3. Hình vẽ giả thiết rằng tần số A dùng cho RX và tần số B dùng cho TX. Nếu không gặp trƣờng hợp này, đảo lại thiết lập F_REG.
2.2.6.4 Điều chế dữ liệu và các chế độ dữ liệu
Có bốn chế độ dữ liệu khác nhau đƣợc xác định cho truyền và nhận, có thể lập trình đƣợc qua MODEM0.DATA_FORMAT. Các chế độ này khác nhau ở cách mã hoá dữ liệu, cách dữ liệu đến và đi đƣợc và đƣợc chấp nhận, và liệu có sự đồng bộ hoá luồng bit hay không. Định dạng dữ liệu cần đƣợc chọn trƣớc khi bộ thu phát RF hoạt động. Hai trong số các chế độ, chế độ đồng bộ NRZ và chế độ đồng bộ Manchester, truyền hay nhận dữ liệu có tốc độ baud đƣợc thiết lập trong
MODEM0.BAUDRATE. Modem thực hiện việc đồng bộ hoá luồng bit trong suốt quá trình nhận. Trong chế độ Manchester modem cũng thực hiện mã hoá và giải mã Manchester. Các chế độ NRZ và Manchester chấp nhận và truyền dữ liệu theo cả hai cách một bit hay một byte trong cùng một thời điểm, lập trình đƣợc qua
RFCON.BYTEMODE. Trong hầu hết các ứng dụng có hai chế độ đƣợc khuyên
RX hay TX Bật RX: RFMAIN: RXTX=0, F_REG=0 RX_PD=0, FS_PD=0 CURRENT=”RX current” Chờ 250 s Bật TX: PA_POW=00h RFMAIN: RXTX=1, F_REG=1 TX_PD=0, FS_PD=0 CURRENT=”RX current” Chờ 250 s Chế độ RX Chế độ TX Tắt RX: RFMAIN: RX_PD=1, FS_PD=1 Tắt TX: RFMAIN: TX_PD=1, FS_PD=1 PA_POW=00h Tắt RF Tắt RF Hình 2.3. Tuần tự bật thu phát RF
dùng. Dữ liệu truyền đi hay nhận về đƣợc đặt trong thanh ghi RFBUF. Trong quá trình truyền hay nhận cần biết có dữ liệu đến hay đi, từng bit hay từng byte phụ thuộc vào RFCON.BYTEMODE, đƣợc báo hiệu bằng cách tạo ra (EXIF.RFIF.) Phụ thuộc vào liệu ngắt RF đƣợc cho phép hay không (EIE.RFIE), việc truyền hay nhận dữ liệu có thể đƣợc điều khiển bởi chƣơng trình phục vụ ngắt hay có thể đƣợc thực hiện bằng cách hỏi (polling). Trong quá trình nhận khi sử dụng chế độ NRZ
hay Manchester, nhận biết tín hiệu dẫn đƣờng bằng phần cứng và nhận biết dấu hiệu bắt đầu một frame có thể sử dụng các thanh ghi PDET và BSYNC. Hai chế độ khác, Transparent mode và UART mode, chỉ đơn giản là truyền số liệu FSK modem và thanh ghi RFBUF và UART0, cho phép lựa chọn tốc độ và mã hoá dữ liệu. Khi sử dụng UART0 trong chế độ UART chân P3.1 không đƣợc sử dụng cho UART output và có thể sử dụng nhƣ một cổng I/O. Chipcon khuyên rằng các chế độ đồng bộ đƣợc sử dụng. Các chế độ dữ liệu khác bỏ qua mạch quyết định dữ liệu của bộ thu phát RF và không hỗ trợ chế độ bytemode. Chế độ Transparent mode chỉ dùng để kiểm thử.
Mã hoá Manchester
Trong chế độ Manchester data clock đƣợc truyền cùng với dữ liệu. '1' đƣợc mã hoá bằng tần số cao f1 theo sau là tần số thấp hơn f0. '0' đƣợc mã hoá bằng tần số thấp f0 theo sau là tần số cao hơn f1. Điều này đƣợc minh hoạ ở hình 2.4.
2.2.6.5 Tốc độ Baud
Tốc độ từ 0.6 kBaud tới 76.8 kBaud đƣợc thiết lập trong bit điều khiển
MODEM0.BAUDRATE. MODEM0.XOSC_FREQ cũng phải đƣợc thiết lập tuỳ vào tinh thể thạch anh đang sử dụng. Tốc độ baud đƣợc tính theo công thức sau:
kbaud MHz fxosc FREQ XOSC BAUDRATE RF BAUDRATE 6 . 0 . 6864 . 3 . 1 _ _ 2
RF_BAUDRATE là tốc độ tính theo kBaud, BAUDRATE và XOSC_FREQ là các bit điều khiển trong MODEM0. Sử dụng một trong các thạch anh chuẩn đặt trong
MODEM0.XOSC_FREQ sẽ tạo ra các tốc độ chuẩn 0.6, 1.2, 2.4, 4.8, 9.6, 19.2, 38.4 hay 76.8 kBaud. Các tần số thạch anh khác nhau sẽ xác định các tốc độ khác nhau nhƣ miêu tả ở trên. Tốc độ baud tới 19.2 kBaud có thể đƣợc tạo ra cho bởi bất kỳ tần số thạch anh nào. Tốc độ lớn hơn 19.2 kBaud cần có thêm các sự kết hợp nhƣ bảng 2.
Bảng 2. Tốc độ baud theo tần số thạch anh
MODEM0. BAUDRATE /XOSC fxosc (MHz) RF_BAUDRATE (kBaud) 3.6864 7.3728 11.0592 14.7456 18.4320 22.1184 0.6 0/0 0/1 0/2 0/3 0/4 0/5 1.2 1/0 1/1 1/2 1/3 1/4 1/5 2.4 2/0 2/1 2/2 2/3 2/4 2/5 4.8 3/0 3/1 3/2 3/3 3/4 3/5 9.6 4/0 4/1 4/2 4/3 4/4 4/5
19.2 5/0 5/1 5/2 5/3 5/4 5/5
38.4 NA 5/0 NA 5/1 NA 5/2
76.8 NA NA NA 5/0 NA NA
2.2.6.6 Truyền và nhận dữ liệu
Trong chế độ Transparent hay UART dữ liệu đi hay đến đƣợc đƣa trực tiếp tới bộ điều chế trong chế độ truyền và đƣợc nhận trực tiếp trong chế độ nhận. Trong các chế độ NRZ và Manchester, dữ liệu đƣợc lƣu tại RFBUF nhƣ đƣợc minh hoạ ở hình 2.5. Việc lƣu nhƣ vậy có những ảnh hƣởng cần đƣợc xem xét khi nhận hay truyền dữ liệu, nhất là trong chế độ bytemode.
Quá trình truyền
Khi truyền dữ liệu theo bytemode (RFCON.BYTEMODE=1), một thanh ghi 8-bit sẽ dịch từng bit tới bộ điều chế, MSB (bit cao nhất) trƣớc tiên, và chu kỳ phụ thuộc vào tốc độ đƣợc lựa chọn. Khi thanh ghi dịch này rỗng sẽ nạp một byte mới từ RFBUF tiếp tục dịch bit. Nội dung của thanh ghi RFBUF không đổi sau khi thanh ghi dịch lấy dữ liệu từ nó. Một ngắt đƣợc tạo ra (EICON.RFI) và RFBUF có