Giám sát và điều khiển thiết bị qua đường PSTN

M ỤC L ỤC Lời nói đầu . 2 Lời cảm ơn . 3 Nhận xét giáo viên hướng dẫn 4 Nhận xét giáo viên phản biện . 5 Giới thiệu đề tài . 6 Chương 1-Giới thiệu tổng quan mạng điện thoại 9 1.1. Giới thiệu tổng quát về tổng đài . 9 1.2. Giới thiệu tổng quát về máy điện thoại . 12 Chương 2 - Giới thiệu linh kiện . 18 2.1. Vi điều khiển AVR . 18 2.2 IC MT8888 . 53 2.3 IC LM358 . 64 2.4 IC MAX232 . 67 Chương 3-Sơ đồ thiết kế và giải thuật . 69 3.1. Sơ đồ thiết kế . 69 3.1.1 Sơ đồ khối . 69 3.1.2 Sơ đồ nguyên lý . 69 3.2. Giải thuật . 76 3.2.1 Module PSTN-RS232 . 76 3.2.2 Module trạm . 80 Chương 4-Kết luận và hướng phát triển đề tài . 83 4.1 Kết luận . 83 4.2 Hướng phát triển đề tài . 83 Tài liệu tham khảo . 84 1 LỜI NÓI ĐẦU Trong lĩnh vực kỹ thuật ngày nay thì lĩnh vực điện tử đóng vai trò vô cùng quan trọng trong thời đại công nghiệp hoá hiện đại hoá đất nước. Nói đến lĩnh vực điện tử thì chúng ta không thể không nhắc đến ngành kỹ thuật điện tử viễn thông. Đó là chiếc chìa khoá vàng mở ra một kỷ nguyên mới, nhờ nó ta có thể thu thập nhiều thông tin từ mọi nơi trên hành tinh để phục vụ cuộc sống. Tuy chỉ mới thâm nhập vào nước ta gần đây nhưng công nghệ điện tử đã phát triển rất nhanh và ngày càng giữ vai trò quan trọng trong nền công nghiệp hoá nước nhà. Hệ thống viễn thông, dịch vụ khách hàng, thông tin di động, nhắn tin càng phát triển với tính hiện đại và tự động hóa ngày càng cao. Với sự phát triển nhanh chóng của ngành công nghệ điện tử, thì việc điều khiển các thiết bị điện tự động ngày càng nhiều, chúng ta cần sử dụng các chip điều khiển để lập trình chúng hoạt động theo ý muốn. Hiện nay, do nhu cầu trao đổi thông tin của người dân là vô cùng lớn nên mạng điện thoại ngày càng được mở rộng không chỉ dừng lại ở việc liên lạc thông tin mà còn thêm nhiều tính năng và dịch vụ khác. Một trong những tính năng đó là sử dụng mạng điện thoại để truyền tín hiệu điều khiển, nó đã giúp tiết kiệm được rất nhiều thời gian cho công việc. Chính vì vậy mà tôi quyết định chọn đề tài “Giám sát và điều khiển thiết bị qua đường PSTN”. Song, do giới hạn về thời gian cũng như kiến thức nên nội dung còn nhiều thiếu sót. Rất mong sự đóng góp ý kiến của quý thầy cô và các bạn sinh viên để tập đồ án được hoàn thiện hơn. Xin chân thành cảm ơn ! 2 LỜI CẢM ƠN Trong thời gian hoàn thành xong đề tài, tôi đã được sự giúp đỡ của quí bậc thầy cô và bạn bè nên đề tài đã được hoàn thành đúng thời gian. Tôi xin chân thành cảm ơn đến: Thầy Trần Minh Hồng, đã hết lòng quan tâm, giúp đỡ tận tình và tạo mọi điều kiện để tôi có thể hoàn thành đồ án này. Xin chân thành gửi lời cảm ơn đến quí thầy cô trong Khoa Điện Tử đã cung cấp cho tôi những kiến thức nền, chuyên môn làm cơ sở để tôi có thể hoàn thành đồ án này. Tôi cũng xin chân thành cảm ơn đến các bạn sinh viên và các bậc anh chị đã giúp đỡ về nhiều mặt: ý kiến, tài liệu ., để tôi có thể hoàn thành đồ án đúng thời gian .

pdf102 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2356 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Giám sát và điều khiển thiết bị qua đường PSTN, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
c hiện phép cộng 2 thanh ghi bằng instruction ADD như sau: 31 ADD R1,R2 Bạn thấy trong dòng lệnh trên, 2 thanh ghi R1 và R2 được sử dụng trực tiếp với tên của chúng, dòng lệnh trên khi được dịch sang opcode để download vào chip sẽ có dạng: 0000110000010010 trong đó 00001=1 tức thanh ghi R1 và 00010 = 2 chỉ thanh ghi R2. Sau phép cộng, kết quả sẽ được lưu vào thanh ghi R1. Tất cả các instruction sử dụng RF làm toán hạng đều có thể truy nhập tất cả các RF một cách trực tiếp trong 1 chu kỳ xung clock, ngoại trừ SBCI, SUBI, CPI, ANDI và LDI, các instruction này chỉ có thể truy nhập các thanh ghi từ R16 đến R31. Thanh ghi R0 là thanh ghi duy nhất được sử dụng trong instruction LPM (Load Program Memory). Các thanh ghi R26, R27, R28, R29, R30 và R31 ngoài chức năng thông thường còn được sử dụng như các con trỏ (Pointer register) trong một số instruction truy xuất gián tiếp. Chúng ta sẽ khảo sát vấn đề con trỏ sau này. Hình 3 mô tả các chức năng phụ của các thanh ghi. 32 Tóm lại 32 RF của AVR được xem là 1 phần của CPU, vì thế chúng được CPU sử dụng trực tiếp và nhanh chóng, để gọi các thanh ghi này, chúng ta không cần gọi địa chỉ mà chỉ cần gọi trực tiếp tên của chúng. RF thường được sử dụng như các toán hạng (operand) của các phép toán trong lúc lập trình. Phần 2: là phần nằm ngay sau register file, phần này bao gồm 64 thanh ghi được gọi là 64 thanh ghi nhập/xuất (64 I/O register) hay còn gọi là vùng nhớ I/O (I/O Memory). Vùng nhớ I/O là cửa ngõ giao tiếp giữa CPU và thiết bị ngoại vi. Tất cả các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở đây. Xem lại ví dụ trong bài 1, trong đó tôi có đề cập về việc điều khiển các PORT của AVR, mỗi PORT liên quan đến 3 thanh ghi DDRx, PORTx và PINx, tất cả 3 thanh ghi này đều nằm trong vùng nhớ I/O. Xa hơn, nếu muốn truy xuất các thiết bị ngoại vi khác như Timer, chuyển đổi Analog/Digital, giao tiếp USART…đều thực hiện thông qua việc điều khiển các thanh ghi trong vùng nhớ này. Vùng nhớ I/O có thể được truy cập như SRAM hay như các thanh ghi I/O. Nếu sử dụng instruction truy xuất SRAM để truy xuất vùng nhớ này thì địa chỉ của chúng được tính từ 0x0020 đến 0x005F. Nhưng nếu truy xuất như các thanh ghi I/O thì địa chỉ của chúng đựơc tính từ 0x0000 đến 0x003F. Xét ví dụ instruction OUT dùng xuất giá trị ra các thanh ghi I/O, lệnh này sử dụng địa chỉ kiểu thanh ghi, cấu trúc của lệnh như sau: OUT A, Rr, trong đó A là địa chỉ của thanh ghi trong vùng nhớ I/O, Rr là thanh ghi RF, lệnh OUT xuất giá trị từ thanh ghi Rr ra thanh ghi I/O có địa chỉ là A. Giả sử chúng ta muốn xuất giá trị chứa trong R6 ra thanh ghi điều khiển hướng của PORTD, tức thanh ghi DDRD, địa chỉ tính theo vùng I/O của thanh ghi DDRD là 0x0011, như thế câu lệnh của chúng ta sẽ có dạng: OUT 0x0011, R6. Tuy nhiên trong 1 trường hợp khác, nếu muốn truy xuất DDRD theo dạng SRAM, ví dụ lệnh STS hay LDS, thì phải dùng địa chỉ tuyệt đối của thanh ghi này, tức giá trị 0x0031, khi đó lệnh OUT 33 ở trên được viết lại là STS 0x0031, R6. Để thống nhất cách sử dụng từ ngữ, từ bây giờ chúng ta dùng khái niệm “địa chỉ I/O” cho các thanh ghi trong vùng nhớ I/O để nói đến địa chỉ không tính phần Register File, khái niệm “địa chỉ bộ nhớ” của thanh ghi là chỉ địa chỉ tuyệt đối của chúng trong SRAM. Ví dụ thanh ghi DDRD có “địa chỉ I/O” là 0x0011 và “địa chỉ bộ nhớ” của nó là 0x0031, “địa chỉ bộ nhớ” = “địa chỉ I/O” + 0x0020. Vì các thanh ghi trong vùng I/O không được hiểu theo tên gọi như các Register file, khi lập trình cho các thanh ghi này, người lập trình cần nhớ địa chỉ của từng thanh ghi, đây là việc tương đối khó khăn. Tuy nhiên, trong hầu hết các phần mềm lập trình cho AVR, địa chỉ của tất cả các thanh ghi trong vùng I/O đều được định nghĩa trước trong 1 file Definition, bạn chỉ cần đính kèm file này vào chương trình của bạn là có thể truy xuất các thanh ghi với tên gọi của chúng. Giả sử trong ví dụ ở bài 1, để lập trình cho chip Atmega8 bằng AVRStudio, dòng thứ 2 chúng ta sử dụng INCLUDE "M8DEF.INC" để load file định nghĩa cho chip ATMega8, file M8DEF.INC. Vì vậy, trong sau này khi muốn sử dụng thanh ghi DDRD bạn chỉ cần gọi tên của chúng, như: OUT DDRD,R6. Phần 3: RAM tĩnh, nội (internal SRAM), là vùng không gian cho chứa các biến (tạm thời hoặc toàn cục) trong lúc thực thi chương trình, vùng này tương tự các thanh RAM trong máy tính nhưng có dung lượng khá nhỏ (khoảng vài KB, tùy thuộc vào loại chip). Phần 4: RAM ngoại (external SRAM), các chip AVR cho phép người sử dụng gắn thêm các bộ nhớ ngoài để chứa biến, vùng này thực chất chỉ tồn tại khi nào người sử dụng gắn thêm bộ nhớ ngoài vào chip. Phần 5: EEPROM (Electrically Ereasable Programmable ROM) là một phần quan trọng của các chip AVR mới, vì là ROM nên bộ nhớ này không bị xóa ngay cả khi không cung cấp nguồn nuôi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữ liệu. Như trong hình 1, phần bộ nhớ EEPROM được tách riêng và có địa 34 chỉ tính từ 0x0000. Sơ đồ tổ chức bộ nhớ 2.1.4 Các Thanh Ghi 1. Thanh ghi SREG (STATUS REGISTRY). Nằm trong vùng nhớ I/O, thanh ghi SREG có địa chỉ I/O là 0x003F và địa chỉ bộ nhớ là 0x005F (thường đây là vị trí cuối cùng của vùng nhớ I/O) là một trong số các thanh ghi quan trọng nhất của AVR, vì thế mà tôi dành phần này để giới thiệu về thanh ghi này. Thanh ghi SREG chứa 8 bit cờ (flag) chỉ trạng thái của bộ xử lí, tất cả các bit này đều bị xóa sau khi reset, các bit này cũng có thể được đọc và ghi bởi chương trình. Chức năng của từng bit được mô tả như sau: 35 • Bit 0 – C (Carry Flag: Cờ nhớ): là bit nhớ trong các phép đại số hoặc logic, ví dụ thanh ghi R1 chứa giá trị 200, R2 chứa 70, chúng ta thực hiện phép cộng có nhớ: ADC R1, R2, sau phép cộng, kết quả sẽ được lưu lại trong thanh ghi R1, trong khi kết quả thực là 270 mà thanh ghi R1 lại chỉ có khả năng chứa tối đa giá trị 255 (vì có 8 bit) nên trong trường hợp này, giá trị lưu lại trong R1 thực chất chỉ là 14, đồng thời cờ C được set lên 1 (vì 270=100001110, trong đó 8 bit sau 00001110 =14 sẽ được lưu lại trong R1). • Bit 1 – Z (Zero Flag: Cờ 0): cờ này được set nếu kết quả phép toán đại số hay phép Logic bằng 0. • Bit 2 – N (Negative Flag: Cờ âm): cờ này được set nếu kết quả phép toán đại số hay phép Logic là số âm. • Bit 3 – V (Two’s complement Overflow Flag: Cờ tràn của bù 2): hoạt động của cờ này có vẻ sẽ khó hiểu cho bạn vì nó liên quan đến kiến thức số nhị phân (phần bù), chúng ta sẽ đề cập đến khi nào thấy cần thiết. • Bit 4 – S (Sign Bit: Bit dấu): Bit S là kết quả phép XOR giữa 1 cờ N và V, S=N xor V. • Bit 5 – H (Half Carry Flag: Cờ nhờ nữa): cờ H là cờ nhớ trong 1 vài phép toán đại số và phép Logic, cờ này hiệu quả đối với các phép toán với số BCD. • Bit 6 – T (Bit Copy Storage): được sử dụng trong 2 Instruction BLD (Bit LoaD) và BST (Bit STorage). Tôi sẽ giải thích chức năng Bit T trong phần giới 36 thiệu về BLD và BST. • Bit 7 – I (Global Interrupt Enable) : Cho phép ngắt toàn bộ): Bit này phải được set lên 1 nếu trong chương trình có sử dụng ngắt. Sau khi set bit này, bạn muốn kích hoạt loại ngắt nào cần set các bit ngắt riêng của ngắt đó. Hai instruction dùng riêng để Set và Clear bit I là SEI và CLI. Chú ý: tất cả các bit trong thanh ghi SREG đều có thể được xóa thông qua các instruction không toán hạng CLx và set bởi SEx, trong đó x là tên của Bit.Ví dụ CLT là xóa Bit T và SEI là set bit I. Tôi chỉ giải thích ngắn gọn chức năng của các bit trong thanh ghi SREG, cụ thể chức năng và cách sử dụng của từng bit chúng ta sẽ tìm hiểu trong các trường hợp cụ thể sau này, người đọc có thể tự tìm hiểu thêm trong các tài liệu về INSTRUCTION cho AVR. Tôi cung cấp thêm 1 bảng tóm tắt sự ảnh hưởng của các phép toán đại số, logic lên các Bit trong thanh ghi SREG. 2. Thanh ghi MCUCR: MCUCR là một thanh ghi 8 bit nhưng đối với hoạt động ngắt ngoài, chúng ta chỉ quan tâm đến 4 bit thấp của thanh ghi này (4 bit cao dùng cho Power manager và Sleep Mode), 4 bit thấp là các bit Interrupt Sense Control (ISC), 2 bit ISC11, ISC10 dùng cho INT1 và ISC01, ISC00 dùng cho INT0. Hãy nhìn vào bảng tóm tắt bên dưới để biết chức năng của các bit trên, đây là bảng “chân trị” của 2 bit ISC11, ISC10. Bảng chân trị cho các bit ISC01, ISC00 hoàn toàn tương tự. 37 Thật dễ dàng để hiểu chức năng của các bit Sense Control, ví dụ bạn muốn set cho INT1 là ngắt cạnh xuống (Falling Edge) trong khi INT0 là ngắt cạnh lên (Rising Edge), hãy đặt dòng lệnh MCUCR =0x0B (0x0B = 00001011 nhị phân) trong chương trình của bạn. 3. Thanh ghi GICR: Thanh ghi điều khiển ngắt thông thường – GICR (General Interrupt Control Register) (trên các chip AVR cũ, như các chip AT90Sxxxx, thanh ghi này có tên là thanh ghi mặt nạ ngắt thông thường GIMSK, bạn tham khảo thêm datasheet của các chip này nếu cần sử dụng đến). GICR cũng là 1 thanh ghi 8 bit nhưng chỉ có 2 bit cao (bit 6 và bit 7) là được sử dụng cho điều khiển ngắt, cấu trúc thanh ghi như bên dưới (trích datasheet). Bit 7 – INT1 gọi là bit cho phép ngắt 1(Interrupt Enable), set bit này bằng 1 nghĩa bạn cho phép ngắt INT1 hoạt động, tương tự, bit INT0 điều khiển ngắt 38 INT0. 4. Thanh ghi GIFR: Thanh ghi cờ ngắt thông thường – GIFR (General Interrupt Flag Register) có 2 bit INTF1 và INTF0 là các bit trạng thái (hay bit cờ - Flag) của 2 ngắt INT1 và INT0, nếu có 1 sự kiện ngắt phù hợp xảy ra trên chân INT1, bit INTF1 được tự động set bằng 1 (tương tự cho trường hợp của INTF0), chúng ta có thể sử dụng các bit này để nhận ra các ngắt, tuy nhiên điều này là không cần thiết nếu chúng ta cho phép ngắt tự động, vì vậy thanh ghi này thường không được quan tâm khi lập trình ngắt ngoài. Cấu trúc thanh ghi GIFR được trình bày trong hình ngay bên dưới. 5. Thanh ghi TCCR0: • TCCR0 (Timer/Counter Control Register): là thanh ghi điều khiển hoạt động của T/C0. Tuy là thanh ghi 8 bit nhưng thực chất chỉ có 3 bit có tác dụng đó là CS00, CS01 và CS02. Các bit CS00, CS01 và CS02 gọi là các chip chọn nguồn xung nhịp cho T/C0 (Clock Select). Chức năng các bit này được mô tả trong bảng 1. Bảng 1: chức năng các bit CS0X 39 6. Thanh ghi TCNT0: • TCNT0 (Timer/Counter Register): là 1 thanh ghi 8 bit chứa giá trị vận hành của T/C0. Thanh ghi này cho phép bạn đọc và ghi giá trị một cách trực tiếp. 7. Thanh ghi TIMSK: • TIMSK (Timer/Counter Interrupt Mask Register): là thanh ghi mặt nạ cho ngắt của tất cả các T/C trong Atmega8, trong đó chỉ có bit TOIE0 tức bit số 0 (bit đầu tiên) trong thanh ghi này là liên quan đến T/C0, bit này có tên là bit cho phép ngắt khi có tràn ở T/C0. Tràn (Overflow) là hiện tượng xảy ra khi bộ giá trị trong thanh ghi TCNT0 đã đạt đến MAX (255) và lại đếm thêm 1 lần nữa. Bit 1, TOIE0=1, bit quy định ngắt tràn cho thanh T/C0. Bit 2, TOIE1, bit quy định ngắt tràn cho thanh T/C1. 40 Bit 3, OCIE1B là bit cho phép ngắt khi có 1 “Match” xảy ra trong việc so sánh TCNT1 với OCR1B. Bit 4, OCIE1A là bit cho phép ngắt khi có 1 “Match” xảy ra trong việc so sánh TCNT1 với OCR1A. Bit 5, TICIE1 là bit cho phép ngắt trong trường hợp Input Capture được dùng. Bit 6, TOIE2, bit quy định ngắt tràn cho thanh T/C2. Bit 7, OCIE2 là bit cho phép ngắt khi có 1 “Match” xảy ra trong việc so sánh TCNT2 với OCR2. 8. Thanh ghi TIFR: • TIFR (Timer/Counter Interrupt Flag Register): là thanh ghi cờ nhớ cho tất cả các bộ T/C. Trong thanh ghi này bit số 0, TOV0 là cờ chỉ thị ngắt tràn của T/C0. Khi có ngắt tràn xảy ra, bit này tự động được set lên 1. 9. Thanh ghi TCNT1: • TCNT1H và TCNT1L (Timer/Counter Register): là 2 thanh ghi 8 bit tạo thành thanh ghi 16 bits (TCNT1) chứa giá trị vận hành của T/C1. Cả 2 thanh ghi này cho phép bạn đọc và ghi giá trị một cách trực tiếp. 2 thanh ghi được kết hợp như sau: 41 10. Thanh ghi TCCR1: • TCCR1A và TCCR1B (Timer/Counter Control Register): là 2 thanh ghi điều khiển hoạt động của T/C1. Tất cả các mode hoạt động của T/C1 đều được xác định thông qua các bit trong 2 thanh ghi này. Tuy nhiên, đây không phải là 2 byte cao và thấp của một thanh ghi mà là 2 thanh ghi hoàn toàn độc lập. Các bit trong 2 thanh ghi này bao gồm các bit chọn mode hay chọn dạng sóng (Waveform Generating Mode – WGM), các bit quy định dạng ngõ ra (Compare Output Match – COM), các bit chọn giá trị chia prescaler cho xung nhịp (Clock Select – CS) …Cấu trúc của 2 thanh ghi được trình bày như bên dưới. Nhìn chung để “thuộc” hết cách phối hợp các bit trong 2 thanh ghi TCCR1A và TCCR1B là tương đối phức tạp vì T/C1 có rất nhiều mode hoạt động, chúng ta sẽ khảo sát chúng trong phần các chế độ hoạt động của T/C1 bên dưới. Ở đây, trong thanh ghi TCCR1B có 3 bit khá quen thuộc là CS10, CS11 và CS12. Đây là các bit chọn xung nhịp cho T/C1 như truong T/C0. Bảng 2 sẽ tóm tắt các chế độ 42 xung nhịp trong T/C1. Bảng 2: chức năng các bit CS12, CS11 và CS10. Các mode hoạt động: có tất cả 5 chế độ hoạt động chính trên T/C1. Các chế độ hoạt động cơ bản được quy định bởi 4 bit Waveform Generation Mode (WGM13, WGM12, WGM11 WGM10) và một số bit phụ khác. 4 bit Waveform Generation Mode lại được bố trí nằm trong 2 thanh ghi TCCR1A và TCCR1B (WGM13 là bit 4, WGM12 là bit 3 trong TCCR1B trong khi WGM11 là bit 1 và WGM10 là bit 0 trong thanh ghi TCCR1A) vì thế cần phối hợp 2 thanh ghi TCCR1 trong lúc điều khiển T/C1. Các chế độ hoạt động của T/C1 được tóm tắt trong bảng sau 3: Bảng 3: các bit WGM và các chế độ hoạt động của T/C1. 43 Chú ý các bit COM1A1, COM1A0 và COM1B1, COM1B0 là các bit chọn dạng tín hiệu ra của PWM (Compare Output Mode bits). COM1A1, COM1A0 dùng cho kênh A và COM1B1, COM1B0 dùng cho kênh B. Hãy đối chiếu bảng 4. Bảng 4: mô tả các bit COM trong chế độ fast PWM. 44 11. Thanh ghi OCR1: • OCR1A và OCR1B (Ouput Compare Register A và B): có một số khái niệm mới mà chúng ta cần biết khi làm việc với T/C1, một trong số đó là Ouput Compare (sorry, I don’t wanna translate it to Vietnamese). Trong lúc T/C hoạt động, giá trị thanh ghi TCNT1 tăng, giá trị này được liên tục so sánh với các thanh ghi OCR1A và OCR1B (so sánh độc lập với từng thanh ghi), việc so sánh này trên AVR gọi là gọi là Ouput Compare. Khi giá trị so sánh bằng nhau thì 1 “Match” xảy ra, khi đó một ngắt hoặc 1 sự thay đổi trên chân OC1A (hoặc/và chân OC1B) xảy ra (đây là cách tạo PWM bởi T/C1). Tại sao lại có A và B? Đó là vì người thiết kế AVR muốn mở rộng khả năng ứng dụng T/C1 cho bạn. A và B đại diện cho 2 kênh (channel) và B. Cũng vì điều này mà chúng ta có thể tạo 2 kênh PWM bằng T/C1. Tóm lại, cơ bản 2 thanh ghi này chứa các giá trị để so sánh, chức năng và các chế độ hoạt động cụ thể của chúng sẽ được khảo sát trong các phần sau. 45 12. Thanh ghi ICR1: • ICR1 (InputCapture Register 1): khái niệm mới thứ 2 của T/C1 là Input Capture. Khi có 1 sự kiện trên chân ICP1 (chân 14 trên Atmega8), thanh ghi ICR1sẽ “capture” giá trị của thanh ghi đếm TCNT1. Một ngắt có thể xảy ra trong trường hợp này, vì thế Input Capture có thể được dùng để cập nhật giá trị “TOP” của T/C1. 13. Thanh ghi UDR: • UDR: hay thanh ghi dữ liệu, là 1 thanh ghi 8 bit chứa giá trị nhận được và phát đi của USART. Thực chất thanh ghi này có thể coi như 2 thanh ghi TXB (Transmit data Buffer) và RXB (Reveive data Buffer) có chung địa chỉ. Đọc UDR thu được giá trị thanh ghi đệm dữ liệu nhận, viết giá trị vào UDR tương đương đặt giá trị vào thanh ghi đệm phát, chuẩn bị để gởi đi. Chú ý trong các khung truyền sử dụng 5, 6 hoặc 7 bit dữ liệu, các bit cao của thanh ghi UDR sẽ không được sử dụng 46 14. Thanh ghi UCSRA: • UCSRA (USART Control and Status Register A): là 1 trong 3 thanh ghi điều khiển hoạt động của module USART. Thanh ghi UCSRA chủ yếu chứa các bit trạng thái như bit báo quá trình nhận kết thúc (RXC), truyền kết thúc (TXC), báo thanh ghi dữ liệu trống (UDRE), khung truyền có lỗi (FE), dữ liệu tràn (DOR), kiểm tra parity có lỗi (PE)…Bạn chú ý một số bit quan trọng của thanh ghi này: * UDRE (USART Data Register Empty) khi bit bày bằng 1 nghĩa là thanh ghi dữ liệu UDR đang trống và sẵn sàng cho một nhiệm vụ truyền hay nhận tiếp theo. Vì thế nếu bạn muốn truyền dữ liệu đầu tiên bạn phải kiểm tra xem bit UDRE có bằng 1 hay không, sau khi chắc chắn rằng UDRE=1 hãy viết dữ liệu vào thanh ghi UDR để truyền đi. * U2X là bit chỉ định gấp đôi tốc độ truyền, khi bit này được set lên 1, tốc độ truyền so cao gấp 2 lần so với khi bit này mang giá trị 0. * MPCM là bit chọn chế độ hoạt động đa xử lí (multi-processor). 15. Thanh ghi UCSRB: • UCSRB (USART Control and Status Register B): đây là thanh ghi quan trọng điều khiển USART. Vì thế chúng ta sẽ khảo sát chi tiết từng bit của thanh ghi này. 47 * RXCIE (Receive Complete Interrupt Enable) là bit cho phép ngắt khi quá trình nhận kết thúc. Việc nhận dữ liệu truyền bằng phương pháp nối tiếp không đồng bộ thường được thực hiện thông qua ngắt, vì thế bit này thường được set bằng 1 khi USART được dung nhận dữ liệu. * TXCIE (Transmit Complete Interrupt Enable) bit cho phép ngắt khi quá trình truyền kết thúc. * UDRIE (USART Data Register Empty Interrupt Enable) là bit cho phép ngắt khi thanh ghi dữ liệu UDR trống. * RXEN (Receiver Enable) là một bit quan trọng điều khiển bộ nhận của USART, đề kích hoạt chức năng nhận dữ liệu bạn phải set bit này lên 1. * TXEN (Transmitter Enable) là bit điều khiển bộ phát. Set bit này lên 1 bạn sẽ khởi động bộ phát của USART. * UCSZ2 (Chracter size) bit này kết hợp với 2 bit khác trong thanh ghi UCSRC quy định độ dài của dữ liệu truyền/nhận. Chúng ta sẽ khảo sát chi tiết khi tìm hiểu thanh ghi UCSRC. * RXB8 (Receive Data Bit 8) gọi là bit dữ liệu 8. Bạn nhớ lại rằng USART trong AVR có hỗ trợ truyền dữ liệu có độ dài tối đa 9 bit, trong khi thanh ghi dữ liệu là thanh ghi 8 bit. Do đó, khi có gói dữ liệu 9 bit được nhận, 8 bit đầu sẽ chứa trong thanh ghi UDR, cần có 1 bit khác đóng vai trò bit thứ chín, RXD8 là bit thứ chín 48 này. Bạn chú ý là các bit được đánh số từ 0, vì thế bit thứ chín sẽ có chỉ số là 8, vì lẽ đó mà bit này có tên là RXD8 (không phải RXD9). * TXB8 (Transmit Data Bit 8), tương tự như bit RXD8, bit TXB8 cũng đóng vai trò bit thứ 9 truyền thông, nhưng bit này được dung trong lúc truyền dữ liệu. 16. Thanh ghi UCSRC: • UCSRC (USART Control and Status Register C): thanh ghi này chủ yếu quy định khung truyền và chế độ truyền. Tuy nhiên, có một rắc rối nho nhỏ là thanh ghi này lại có cùng địa chỉ với thanh ghi UBRRH (thanh ghi chứa byte cao dùng để xác lập tốc độ baud), nói một cách khác 2 thanh ghi này là 1. Vì thế bit 7 trong thanh ghi này, tức bit URSEL là bit chọn thanh ghi. Khi URSEL=1, thanh ghi này được chip AVR hiểu là thanh ghi điều khiển UCSRC, nhưng nếu bit URSEL=0 thì thanh ghi UBRRH sẽ được sử dụng. Các bit còn lại trong thanh ghi UCSRC được mô tả như sau: * UMSEL (USART Mode Select) là bit lựa chọn giữa 2 chế độ truyền thông đồng bộ và không đồng bộ. Nếu UMSEL=0, chế độ không đồng bộ được chọn, ngược lại nếu UMSEL=1, chế độ đồng bộ được kích hoạt. * Hai bit UPM1 và UPM0( Parity Mode) được dùng để quy định kiểm tra pariry. Nếu UPM1:0=00, parity không được sử dụng (mode này khá thông dụng), UPM1:0=01 không được sử dụng, UPM1:0=10 thì parity chẵn được dùng, UPM1:0=11 parity lẻ được sử dụng (xem thêm bảng 1). Bảng 1: chọn kiểm tra parity. 49 * USBS (Stop bit Select), bit Stop trong khung truyền bằng AVR USART có thể là 1 hoặc 2 bit, nếu USBS=0 thì Stop bit chỉ là 1 bit trong khi USBS=1 sẽ có 2 Stop bit được dùng. * Hai bit UCSZ1 và UCSZ2 (Character Size) kết hợp với bit UCSZ2 trong thanh ghi UCSRB tạo thành 3 bit quy định độ dài dữ liệu truyền. Bảng 2 tóm tắt các giá trị có thể có của tổ hợp 3 bit này và độ dài dữ liệu truyền tương ứng. Bảng 2: độ dài dữ liệu truyền. * UCPOL (Clock Pority) là bit chỉ cực của xung kích trong chế độ truyền thông đồng bộ. nếu UCPOL=0, dữ liệu sẽ thay đổi thay đổi ở cạnh lên của xung nhịp, nếu UCPOL=1, dữ liệu thay đổi ở cạnh xuống xung nhịp. Nếu bạn sử dụng chế độ truyền thông không đồng bộ, hãy set bit này bằng 0.. 17. Thanh ghi UBRR: • UBRRL và UBRRH (USART Baud Rate Register): 2 thanh ghi thấp và cao quy định tốc độ baud. 50 Nhắc lại là thanh ghi UBRRH dùng chung địa chỉ thanh ghi UCSRC, bạn phải set bit này bằng 0 nếu muốn sử dụng thanh ghi UBRRH. Như bạn quan sát trong hình trên, chỉ có 4 bit thấp của UBRRH được dùng, 4 bit này kết hợp với 8 bit trong thanh ghi UBRRL tạo thành thanh ghi 12 bit quy định tốc độ baud. Chú ý là nếu bạn viết giá trị vào thanh ghi UBRRL, tốc độ baud sẽ tức thì được cập nhật, vì thế bạn phải viết giá trị vào thanh ghi UBRRH trước khi viết vào thanh ghi UBRRL. Giá trị gán cho thanh ghi UBRR không phải là tốc độ baud, nó chỉ được USART dùng để tính tốc độ baud. Bảng 3 hướng dẫn cách tính tốc độ baud dựa vào giá trị của thanh ghi UBRR và ngược lại, cách tính giá trị cần thiết gán cho thanh ghi UBRR khi đã biết tốc độ baud. Bảng 3: tính tốc độ baud. Trong các công thức trong bảng 3, fOSC là tốc tần số xung nhịp của hệ thống (thạch anh hay nguồn xung nội…). Để tiện cho bạn theo dõi, tôi đính kèm bảng ví 51 dụ cách đặt giá trị cho UBRR theo tốc độ baud mẫu. Bảng 4: một số tốc độ baud mẫu. 52 53 54 18. Thanh ghi ADMUX: ADMUX (ADC Multiplexer Selection Register): là 1 thanh ghi 8 bit điều khiển việc chọn điện áp tham chiếu, kênh và chế độ hoạt động của ADC. Chức năng của từng bit trên thanh ghi này sẽ được trình bày cụ thể như sau: 55 • Bit 7:6- REFS1:0 (Reference Selection Bits): là các bit chọn điện áp tham chiếu cho ADC, 1 trong 3 nguồn điện áp tham chiếu có thể được chọn là: điện áp ngoài từ chân VREF, điện áp tham chiếu nội 2.56V hoặc điện áp AVCC. Bảng 2 tóm tắt giá trị các bit và điện áp tham chiếu tương ứng. • Bit 5-ADLAR (ADC Left Adjust Result): là bit cho phép hiệu chỉnh trái kết quả chuyển đổi. Sở dĩ có bit này là vì ADC trên AVR có độ phân giải 10 bit, nghĩa là kết quả thu được sau chuyển đổi là 1 số có độ dài 10 bit (tối đa 1023), AVR bố trí 2 thanh ghi data 8 bit để chứa giá trị sau chuyển đổi. Như thế giá trị chuyển đổi sẽ không lắp đầy 2 thanh ghi data, trong một số trường hợp người dùng muốn 10 bit kết quả nằm lệch về phía trái trong khi cũng có trường hợp người dùng muốn kết quả nằm về phía phải. Bit ADLAR sẽ quyết định vị trí của 10 bit kết quả trong 16 bit của 2 thanh ghi data. Nếu ADLAR=0 kết quả sẽ được hiệu chỉnh về phía phải (thanh ghi ADCL chứa trọn 8 bit thấp và thanh ghi ADCH chứa 2 bit cao trong 10 bit kết quả), và nếu ADLAR=1 thì kết quả được hiệu chỉnh trái (thanh ghi ADCH chứa trọn 8 bit cao nhất, các bit từ 9 đến 2, và thanh ADCL chứa 2 bit thấp nhất trong 10 bit kết quả (bạn xem hình cách bố trí 2 thanh ghi ADCL và ADCH bên dưới để hiểu rõ hơn). • Bits 4:0-MUX4:0 (Analog Channel and Gain Selection Bits): là 5 bit cho phép chọn kênh, chế độ và cả hệ số khuyếch đại cho ADC. Do bộ ADC trên AVR có 56 nhiều kênh và cho phép thực hiện chuyển đổi ADC kiểu so sánh (so sánh điện áp giữa 2 chân analog) nên trước khi thực hiện chuyển đổi, chúng ta cần set các bit MUX để chọn kênh và chế độ cần sử dụng. Bảng 3 tóm tắt các chế độ hoạt động của ADC thông qua các giá trị của các bit MUX. Trong bảng này, ứng với các giá trị từ 00000 đến 00111 (nhị phân), các kênh ADC được chọn ở chế độ đơn kênh (tín hiệu input lấy trực tiếp từ các chân analog và so sánh với 0V), giá trị từ 01000 đến 11101 tương ứng với chế độ chuyển đổi so sánh. 57 19. Thanh ghi ADCSRA: ADCSRA (ADC Control and Status RegisterA): là thanh ghi chính điều khiển hoạt động và chứa trạng thái của module ADC. Từng bit của thanh ghi ADCSRA được mô tả như bên dưới: • Bit 7 - ADEN(ADC Enable): viết giá trị 1 vào bit này tức bạn đã cho phép module ADC được sử dụng. Tuy nhiên khi ADEN=1 không có nghĩa là ADC đã hoạt động ngay, bạn cần set một bit khác lên 1 để bắt đầu quá trình chuyển đổi, đó là bit ADSC. • Bit 6 - ADSC(ADC Start Conversion): set bit này lên 1 là bắt đầu khởi động quá trình chuyển đổi. Trong suốt quá trình chuyển đổi, bit ADSC sẽ được giữ nguyên giá trị 1, khi quá trình chuyển đổi kết thúc (tự động), bit này sẽ được trả về 0. Vì vậy bạn không cần và cũng không nên viết giá trị 0 vào bit này ở bất kỳ tình huống nào. Để thực hiện một chuyển đổi, thông thường chúng ta sẽ set bit ADEN=1 trước và sau đó set ADSC=1. 58 • Bit 4 – ADIF(ADC Interrupt Flag): cờ báo ngắt. Khi một chuyển đổi kết thúc, bit này tự động được set lên 1, vì thế người dùng cần kiểm tra giá trị bit này trước khi thực hiện đọc giá trị chuyển đổi để đảm bảo quá trình chuyển đổi đã thực sự hoàn tất. • Bit 3 – ADIE(ADC Interrupt Enable): bit cho phép ngắt, nếu bit này được set bằng 1 và bit cho phép ngắt toàn cục (bit I trong thanh ghi trạng thái của chip) được set, một ngắt sẽ xảy ra khi một quá trình chuyển đổi ADC kết thúc và các giá trị chuyển đổi đã được cập nhật (các giá trị chuyển đổi chứa trong 2 thanh ghi ADCL và ADCH). • Bit 2:0 – ADPS2:0(ADC Prescaler Select Bits): các bit chọn hệ số chia xung nhịp cho ADC. ADC, cũng như tất cả các module khác trên AVR, cần được giữ nhịp bằng một nguồn xung clock. Xung nhịp này được lấy từ nguồn xung chính của chip thông qua một hệ số chia. Các bit ADPS cho phép người dùng chọn hệ số chia từ nguồn clock chính đến ADC. Tham khảo bảng 4 để biết cách chọn hệ số chia. 20. Thanh ghi ADC: ADCL và ADCH (ADC Data Register): 2 thanh ghi chứa giá trị của quá trình 59 chuyển đổi. Do module ADC trên AVR có độ phân giải tối đa 10 bits nên cần 2 thanh ghi để chứa giá trị chuyển đổi. Tuy nhiên tổng số bít của 2 thanh ghi 8 bit là 16, con số này nhiều hơn 10 bit của kết quả chuyển đổi, vì thế chúng ta được phép chọn cách ghi 10 bit kết quả vào 2 thanh ghi này. Bit ADLAR trong thanh ghi ADMUX quy định cách mà kết quả được ghi vào. Thông thường, 2 thanh ghi data được sắp xếp theo định dạng ADLAR=0, ADCL chứa 8 bit thấp và 2 bit thấp của ADCH chứa 2 bit cao nhất của giá trị thu được. Chú ý thứ tự đọc giá trị từ 2 thanh ghi này, để tránh đọc sai kết quả, bạn cần đọc thanh ghi ADCL trước và ADCH sau, vì sau khi ADCH được đọc, các thanh ghi data có thể được cập nhật giá trị tiếp theo. 21. Thanh ghi SFIOR: SFIOR(Special FunctionIO Register C): thanh ghi chức năng đặc biệt, 3 bit cao trong thanh ghi này quy định nguồn kích ADC nếu chế độ Auto Trigger được sử dụng. Đó là các bit ADTS2:0 (Auto Trigger Source 2:0). Các loại nguồn kích được trình báy trong bảng 5. 60 22. Thanh ghi SPCR: • SPCR (SPI Control Register): là 1 thanh ghi 8 bit điều khiển tất cả hoạt động của SPI. * Bit 7- SPIE (SPI Interrupt Enable) bit cho phép ngắt SPI. Nếu bit này được set bằng 1 và bit I trong thanh ghi trạng thái được set bằng 1 (sei), 1 ngắt sẽ xảy ra sau 61 khi một gói dữ liệu được truyền hoặc nhận. Chúng ta nên dùng ngắt (nhất là đối với chip Slave) khi truyền nhận dữ liệu với SPI. * Bit 6 – SPE (SPI Enable). set bit này lên 1 để cho phép bộ SPI hoạt động. Nếu SPIE=0 thì module SPI dừng hoạt động. * Bit 5 – DORD (Data Order) bit này chỉ định thứ tự dữ liệu các bit được truyền và nhận trên các đường MISO và MOSI, khi DORD=0 bit có trọng số lớn nhất của dữ liệu được truyền trước (MSB) ngược lại khi DORD=1, bit LSB được truyền trước. Thật ra khi giao tiếp giữa 2 AVR với nhau, thứ tự này không quan trọng nhưng phải đảm bảo các bit DORD giống nhau trên cả Master và Slaves. * Bit 4 – MSTR (Master/Slave Select) nếu MSTR =1 thì chip được nhận diện là Master, ngược lại MSTR=0 thì chip là Slave.. * Bit 3 và 2 – CPOL và CPHA đây chính là 2 bit xác lập cực của xung giữ nhịp và cạnh sample dữ liệu mà chúng ta đã khảo sát trong phần đầu. Sự kết hợp 2 bit này tạo thành 4 chế độ hoạt động của SPI. Một lần nữa, chọn chế độ nào không quan trọng nhưng phải đảm bảo Master và Slave cùng chế độ hoạt động. Vì thế có thể để 2 bit này bằng 0 trong tất cả các chip. Hình 3 trình bày cách sample dữ liệu trong 4 chế độ của SPI trên AVR. * Bit 1:0 – CPR1:0 hai bit này kết hợp với bit SPI2X trong thanh ghi SPSR cho phép chọn tốc độ giao tiếp SPI, tốc độ này được xác lập dựa trên tốc độ nguồn xung clock chia cho một hệ số chia. Bảng 1 tóm tắt các tốc độ mà SPI trong AVR có thể đạt. Thông thường, tốc bộ này không được lớn hơn 1/4 tốc độ xung nhịp cho chip. 62 23. Thanh ghi SPSR: • SPSR (SPI Status Register): là 1 thanh ghi trạng thái của module SPI. Trong thanh ghi này chỉ có 3 bit được sử dụng. Bit 7 – SPIF là cờ báo SPI, khi một gói dữ liệu đã được truyền hoặc nhận từ SPI, bit SPIF sẽ tự động được set len 1. Bit 6 – WCOL là bít báo va chạm dữ liệu (Write Colision), bit này được AVR set lên 1 nếu chúng ta cố tình viết 1 gói dữ liệu mới vào thanh ghi dữ liệu SPDR trong khi quá trình truyền nhận trước chưa kết thúc. Bit 0 – SPI2X gọi là bit nhân đôi tốc độ truyền, bit này kết hợp với 2 bit SPR1:0 trong thanh ghi điều khiển SPCR xác lập tốc độ cho SPI. 24. Thanh ghi SPDR: • SPDR (SPI Data Register): là thanh ghi dữ liệu của SPI. Trên chip Master, ghi giá trị vào thanh ghi SPDR sẽ kích quá trình tuyền thông SPI. Trên chip Slave, 63 dữ liệu nhận được từ Master sẽ lưu trong thanh ghi SPDR, dữ liệu được lưu sẵn trong SPDR sẽ được truyền cho Master. 25. Thanh ghi EEAR: Địa chỉ thanh ghi EEPROM sẽ truy xuất. 26. Thanh ghi EEDR: Chứa giá trị sẽ ghi hoặc đọc từ EEPROM. 27. Thanh ghi EECR: Bit 3 - EERIE - EEPROM Ready Interrupt Enable: cho phép ngắt khi EEPROM sẵn sang nhận them dữ liệu. Ngắt này được sinh ra sau khi EEWE bị xóa. Bit 2 - EEMWE - EEPROM Master Write Enable: quyết định có cho phép viec ghi 1 vào EEWE sẽ thực hiện việc ghi EEPROM hay không. Giá trị EEMWE là 1(0) tương ứng với (không) cho phép. Sau khi ghi 1 vào EEMWE, nó sẽ bị xóa bằng phần cứng sau 4 xung clock. Bit 1 - EEWE - EEPROM Write Enable: set lên 1 sẽ bắt đầu việc ghi vào EEPROM (xem thêm EEMWE). 64 Bit 0 - EERE - EEPROM Read Enable: set lên 1 sẽ bắt đầu việc đọc từ EEPROM. 28. Thanh ghi port xuất nhập: • Thanh ghi DDRx (x tên port B,C,D): Thanh ghi điều khiển việc đọc hoặc xuất ra port, DDRx=0 cấu hình là port đọc dữ liệu, ngược lại DDRx=255 cấu hình là port xuất dữ liệu. • Thanh ghi PORTx (x tên port B,C,D): Thanh ghi chứa giá trị sẽ xuất ra port. • Thanh ghi PINx (x tên port B,C,D): Thanh ghi chứa giá trị đọc vào từ port. 2.2 KHẢO SÁT IC THU PHÁT TONE MT8888: MT8888 là một IC thu phát DTMF trọn bộ kèm theo một bộ lọc thoại (Call Progress Filter). MT8888 là IC CMOS tiêu thụ nguồn thấp. Bộ thu DTMF dựa trên kỹ thuật chuẩn của IC MT8870, còn gọi là bộ phát DTMF sử dụng phương pháp biến đổi D/A biến dung (Switched Capacitor) cho ra tín hệu DTMF chính xác, ít nhiễu. Các bộ đếm bên trong giúp hình thành chế độ Burst Mode nhờ vậy các cặp tone xuất ra với thời hằng chính xác. Bộ lọc Call Progress cho phép bộ vi xử lý phân tích các tone trạng thái đường dây. Bus chuẩn của nó kết hợp MPU và đặc biệt thích hợp họ 6800 của Motorola. MT8888 có 5 thanh ghi bên trong để giao tiếp với vi xử lý, có thể chia làm 3 loại: Nhận phát dữ liệu: 2 thanh ghi. Thanh ghi trạng thái. Nhận từ điều khiển: 2 thanh ghi. Sơ đồ khối bên trong IC MT8888 65 Hình 2 – 1: Sơ đồ khối bên trong IC MT8888 2.2.1 Sơ đồ chân: 66 Hình 2 – 2: Sơ đồ các chân của IC MT8888 Bảng chức năng các chân của IC MT8888 PIN TÊN MÔ TẢ 1 IN+ Chân vào không đảo của OP-AMP 2 IN- Chân vào đảo của OP – AMP 3 GS Chọn độ lợi cho bộ khuếch đại OP – AMP 4 VREF Đầu ra điện áp tĩnh VDD/2 được dùng để cân bằng tĩnh ở đầu vào. 5 VSS Ground (0V) 6 OSC1 Đầu vào bộ dao động thạch anh. 7 OSC2 Đầu ra của bộ dao động, dao động thạch anh 3.579545 MHz được nối giữa OSC1 và OSC2 tạo thành dao động dòng điện ở bên trong vi mạch. 8 TONE Ngõ ra tone DTMF. 9 WR\ Chân ra để CPU điều khiển trực tiếp viết dữ liệu. 10 CS\ Ngõ vào chip Select, tác động mức thấp 11 RSO Chân chọn Register. 67 12 RD\ Chân để CPU điều khiển trực tiếp đọc dữ liệu 13 IRQ/CP Yêu cầu ngắt gởi tới MPU (Chân cực máng hở). Khi Mode Call Progress (CP)và Mode Interrupt cùng được chọn, chân IRQ/CP sẽ đưa ra dạng sóng hình chữ nhật đặc trưng cho tín hiệu đầu vào OP.AMP với điều kiện tín hiệu đầu vào này phải nằm trong dải thông của bộ lọc thông dải. 14÷17 D0-D3 Data Bus 18 Est (Early Steering Output). Cho ra mức logic 1 khi phát hiện được một cặp tone hợp lệ. Bất kì trạng thái nào không có tín hiệu hợp lệ đều cho ra logic 0. 19 St/GT (Steering Output/ Guard Time Output 2 chiều). Một cặp điện áp lớn hơn VEST khi xuất hiện tại ST làm cho thiết bị ghi nhận cặp tone và truy cập bộ chốt ngõ ra.Một điện áp nhỏ hơn VEST giải phóng thiết bị để thu nhận cặp tone mới. Ngõ ra GT làm nhiệm vụ reset mạch định thời bên ngoài. Trạng thái của nó là một hàm của VEST theo điện áp tại chân ST. 20 VDD Nguồn cung cấp dương (cỡ 5V) 2.2.2 Mô tả chức năng: MT8888 bao gồm bộ thu DTMF chất lượng cao (kèm bộ khuếch đại) và một bộ tạo DTMF sử dụng Burst Counter giúp cho việc tổng hợp đóng ngắt Tone được chính xác. Ngoài ra ta có thể chọn chế độ Call Progress để giúp phát hiện các tần số nằm trong giải thông thoại. Đó là các tín hiệu trạng thái đường dây. 68 2.2.3 Cấu hình ngõ vào: Thiết kế đầu vào của MT8888 cung cấp một bộ khuếch đại OPAMP ngõ vào vi sai cũng như một ngõ vào VREF để điều chỉnh thiên áp cho đầu vào tại VDD/2. Chân GS giúp nối ngõ ra bộ khuếch đại với ngõ vào qua một điện trở ngoài để điều chỉnh độ lợi. Hình 2 – 3: Cấu hình ngõ vào của MT8888 2.2.4 Bộ thu: Hai bộ lọc băng thông bậc 6 giúp tách các tone trong các nhóm tone LOW và HIGH. Đầu ra mỗi bộ lọc điện dung giúp nắn dạng tín hiệu trước khi qua bộ hạn biên. Việc hạn biên được đảm nhiệm bởi bộ so sánh (Comparator) có kèm theo bộ trễ để tránh chọn lầm tín hiệu mức thấp không mong muốn. Đầu ra của bộ so sánh cho ta các dao động có mức logic tại tần số DTMF thu được. Tiếp theo phần lọc là bộ giải mã sử dụng kỹ thuật đếm số để kiểm tra tần số của các tone thu được và bảo đảm chúng tương ứng với các tần số DTMF chuẩn. Một kỹ thuật lấy trung bình phức giúp loại trừ các tone giả tạo thành do tiếng nói trong khi vẫn đảm bảo một khoảng biến động cho tone thu do bị lệch. Khi bộ kiểm tra nhận dạng được hai tone đúng thì đầu ra “early steering” (EST) sẽ lên mức 69 kích hoạt( Active). Lúc không nhận được tín hiệu tone thì EST sẽ ở mức Inactive. Bảng mã hóa các tín hiệu quay số DTMF FLOW FHIGH DIGIT D3 D2 D1 D0 697 1209 1 0 0 0 1 697 1336 2 0 0 1 0 697 1477 3 0 0 1 1 770 1209 4 0 1 0 0 770 1336 5 0 1 0 1 770 1477 6 0 1 1 0 852 1209 7 0 1 1 1 852 1336 8 1 0 0 0 852 1477 9 1 0 0 1 941 1336 0 1 0 1 0 941 1209 * 1 0 1 1 941 1477 # 1 1 0 0 697 1633 A 1 1 0 1 770 1633 B 1 1 1 0 852 1633 C 1 1 1 1 941 1633 D 0 0 0 0 2.2.5 Mạch STEERING: Trước khi thu nhận một cặp tone đã giải mã, bộ thu phải kiểm tra xem thời hằng của tín hiệu có đúng không. Việc kiểm tra này được thực hiện bởi một bộ RC mắc ngoài. Khi Est lên HIGH làm cho Vc tăng lên khi tụ xả. Khi mà Est vẫn còn HIGH trong một thời đoạn hợp lệ( tone) thì Vc tiến tới mức ngưỡng VSTt của logic Steering để nhận một cặp tone và chốt 4 bit mã tương ứng với nó vào thanh 70 ghi Receive Data Register. Lúc này, đầu ra GT được kích hoạt và đẩy Vc lên tới VDD. Cuối cùng sau một thời gian delay ngắn cho phép việc chốt Data thực hiện xong thì cờ của mạch Steering lên HIGH báo hiệu rằng cặp tone thu được đã được lưu vào thanh ghi. Ta có thể kiểm tra bit tương ứng trong thanh ghi trạng thái. Nếu ta cho Mode Interrupt thì chân IRQ/CP sẽ xuống LOW khi cờ này được kích hoạt. Dữ liệu thu được sẽ đi ra Databus (2 chiều) khi thanh ghi Receive Data được đọc. Mạch steering lại hoạt động nhưng theo chiều ngược lại để kiểm tra khoảng dừng giữa hai số được quay. Vì vậy bộ thu vừa bỏ qua tín hiệu quá ngắn không hợp lệ vừa không chấp nhận các khoảng ngắt quá nhỏ không thể coi là khoảng dừng giữa các số. Chức năng này cũng như khả năng chọn thời hằng Steering bằng mạch ngoài cho phép người thiết kế điều chỉnh hoạt động cho phù hợp với các đòi hỏi khác nhau của từng ứng dụng. Hình 2 – 4: Mạch Steering 2.2.6 Bộ lọc thoại: Mode Call Progress khi được chọn thì cho phép kiểm tra các tone khác nhau thể hiện trạng thái đường dây. Đầu vào của Call Progress và mode tone DTMF là chung nhưng tone Call Progress chỉ có thể kiểm tra nếu ta chọn mode CP. DTMF tone lại không thể nhận dạng được nếu ta chọn mode CP. 71 Các tần số đưa đến đầu vào +IN và –IN nằm trong giới hạn băng thông chấp nhận của bộ lọc (280-550 Hz) sẽ đưa qua bộ so sánh có độ lợi cao và đến chân IRQ/CP. Dạng sóng ở đầu ra tạo bởi mạch trigger có thể phân tích bởi vi xử lý để xác định tính chất của các tone trạng thái đường dây. Các tần số trong vùng loại bỏ sẽ không được kiểm tra và như vậy sẽ không có tín hiệu nào ở chân IRQ/CP khi gặp các tần số này. 2.2.7 Bộ phát DTMF: Bộ phát DTMF trong MT8888 có khả năng tạo tất cả 16 cặp tone DTMF chuẩn với nhiễu tối thiểu và độ chính xác cao. Tất cả tần số này đều lấy từ dao động thạch anh 3.579545 MHz mắc ngoài. Dạng sóng sin của từng tone được tổng hợp số bằng cách sử dụng bộ phận chia hàng và cột tổng hợp được, và bộ biến đổi D/A biến dung. Các tone hàng và cột được trộn lại và lọc để cho ra tín hiệu DTMF với ít hài và độ chính xác cao. Để phát một tín hiệu DTMF thì dữ liệu tương ứng với dạng mã ở bảng 1 sẽ phải được viết vào thanh ghi Transmit Data. Chú ý rằng mã phát này phải tương ứng với mã nhận. Các tone riêng lẻ được phân thành hai nhóm là: nhóm thấp và nhóm cao (low và high). Các số trong nhóm tone thấp là 697, 770, 852 và 941 (Hz). Các số trong nhóm tone cao là: 1209, 1306, 1447 và 1663 (Hz). 2.2.8 Mạch kích DTMF Mạch Clock tần số có tần số cộng hưởng là 3.579545 MHz. Một nhóm IC MT8888 có thể nối chung lại với nhau dùng chung một dao động thạch anh. 72 Hình 2 – 5: Mạch Clock DTMF 2.2.9 Bộ giao tiếp với vi xử lý: MT8888 sử dụng một bộ giao tiếp vi xử lý cho phép điều khiển một cách chính xác với chức năng thu và phát. Có tổng cộng 5 thanh ghi chia làm ba loại: Thanh ghi dữ liệu thu /phát, thanh ghi điều khiển thu /phát và thanh ghi trạng thái. Có hai thanh ghi dữ liệu: thanh ghi Receive data chứa mã xuất ra của cặp tone DTMF hợp lệ gần nhất và là thanh ghi chỉ đọc. Data đưa vào thanh ghi Transmit Data sẽ qui định cặp tone nào được phát đi, Data chỉ có thể được vào thanh ghi này. Điều khiển thu phát tone được đảm nhận bởi 2 thanh ghi Control Register A và Control Register B( RA và CRB) có cùng một địa chỉ. Muốn ghi vào thanh ghi CRB thì trước đó phải có set một bit tương ứng ở CRA. Chu kỳ ghi kế tiếp vào cùng địa chỉ với CRA sẽ cho phép truy cập tới CRB. Và chu kỳ ghi kế tiếp nữa sẽ trở lại CRA. Khi cấp điện, mạch điện reset nội sẽ xóa các thanh ghi điều khiển. Tuy vậy, để ngăn ngừa thì chương trình phần mềm nên có một dòng lệnh để kích khởi các thanh ghi này. Giả sử rằng thanh ghi phát rỗng sau khi reset, ta xem qua các bảng bên dưới để thấy rõ chi tiết về các thanh ghi điều khiển. Chân IRQ/CP có thể được lập trình sao cho nó có thể cung cấp tín hiệu yêu cầu ngắt sau khi nhận xung DTMF hợp lệ hay khi bộ phát đã sẵn sàng cho data kế tiếp (chỉ trong Burst mode). Chân IRQ/CP là ngõ ra cực máng hở và vì thế cần có một điện trở kéo lên. Thanh ghi nhận data chứa mã lệnh xuất của giá trị cuối cùng cặp tone 73 DTMF được giải mã và chỉ là thanh ghi đọc data vào. Tín hiệu data vào trong thanh ghi phát sẽ được định rõ với cặp tone nào mà được phát sinh ra. Data chỉ có thể được viết với thanh ghi phát. Hai thanh ghi điều khiển CRA và CRB chỉ chiếm chỗ trong một khoảng địa chỉ tương ứng ghép ghi với CRB có thể được thực hiện bằng cách đặt dành riêng bit trong CRA phép ghi tiếp theo tới địa chỉ tương tự sẽ được trực tiếp đưa tới CRB và tiếp theo sau cho chu kỳ ghi sẽ được trực tiếp trở lại CRA. Cách truy cập thanh ghi RS0 WR\ RD\ CHỨC NĂNG 0 0 1 Ghi vào thanh ghi dữ liệu phát 0 1 0 Đọc từ thanh ghi dữ liệu thu 1 0 1 Ghi vào thanh ghi điều khiển 1 1 0 Đọc từ thanh ghi trạng thái Trạng thái thanh ghi CRA B3 B2 B1 B0 REGISTER SELECT INTERRUPT ENABLE CP/DTMF MODE \ TONE OUT Chức năng CRA (Control Register A) BIT TÊN CÁCH SỬ DỤNG B0 TONE OUTPUT Mức logic 1 cho phép tone được phát ra. Chức năng này có thể được thực hiện trong Busrt mode hoặc None – Busrt mode. 74 B1 CP/DTMF MODE \ Chọn mode DTMF (mức 0) cho phép thu và phát tone đồng thời. Khi chọn mode CP (mức1 bộ lọc dãi bậc 6) được kích hoạt cho phép kiểm tra các tone trạng thái đường dây( call progress tone). Các tone này nếu nằm trong dãi thông qui định thì được thể hiện ở chân IRQ/CP ở dạng sóng hình chữ nhật nếu bit IRQ được chọn (CRA, B2=1). B2 INTERRUPT ENABLE Logic 1 cho phép mode Interrup. Khi mode này mức tích cực và mode DTMF được chọn (CRA, 1=0), ngõ ra IRQ/CP sẽ bị kéo xuống mức 0 khi: + Một tín hiệu DTMF hợp lệ được nhận và đã hiện hữu được trong khoảng thời gian an toàn. + Bộ phát sẵn sàng cho data kế tiếp( chỉ trong Busrt mode). B3 REGISTER SELECT Logic 1 cho phép CRB trong chu kỳ ghi kế tiếp trên cùng địa chỉ này. Chu kỳ ghi kế sau nữa sẽ trở lại ghi vào CRA. Trạng thái thanh ghi CRB B3 B2 B2 B0 COLUMN/ROW TONE\ SINGLE/DUAL TONE TEST MODE BURST MODE\ Chức năng CRB (Control Register B) BIT TÊN CÁCH SỬ DỤNG 75 B0 BURST\ Mức 0 cho phép chọn Busrt mode khi mode này được chọn, dữ liệu tương ứng với cặp tone DTMF có thể được viết vào thanh ghi phát để tạo ra khoảng mở tone với thời hằng chuẩn (51ms). Kế tiếp sau là khoảng ngắt tone với thời hằng tương tự. Ngay sau khoảng ngắt tone thì thanh ghi trạng thái sẽ được truy cập để cho biết rằng thanh ghi phát đã sẵn sàng cho các lệnh mới và một ngắt được tạo ra nếu mode Interrupt đã được chọn trước đó. Khi CP mode (CRA, B1) được chọn thì khoảng tone tắt mở từ 51ms đến 102 ms. B1 TEST Cho phép chọn Test Mode (logic 1). Khi đó chân IRQ/CP sẽ xuất hiện tín hiệu Steering được làm trễ từ bộ thu DTMF. DTMF Mode phải được chọn (CRA, B1=0) trước khi Test Mode được kích hoạt. B2 S/D\ Mức logic 0 cho phép tín hiệu Dual Tone Multi Frequency. Logic 1 chọn chế độ tone đơn (single tone) cho phép tạo ra một tone nhóm thấp hoăc nhóm cao dựa vào trạng thái của bit B3 trong thanh ghi CRB. B3 C/R\ Sử dụng với bit B2 ở trên. Bộ phát có thể được chọn để phát tần số nằm trên hàng hay cột và mức logic 1 sẽ chọn tần số cột, mức logic thấp cho phép chọn hàng. Thanh ghi trạng thái BIT TÊN CỜ TRẠNG THÁI LẬP CỜ TRẠNG THÁI XÓA 76 B0 IRQ Ngắt xuất hiện. B1 hoặc B2 đã được lập. Ngắt chưa kích hoạt. Bị xóa sau khi thanh ghi trạng thái đã được đọc. B1 Thanh ghi dữ liệu phát rỗng (chỉ trong burst mode) Thời hằng ngắt tone đã kết thúc và bộ phát đang chờ dữ liệu kế tiếp. Bị xóa sau khi thanh ghi trạng thái được đọc hay khi chọn None_Burst Mode. B2 Thanh ghi dữ liệu thu đầy Dữ liệu hợp lệ đang nằm trong thanh ghi dữ liệu thu. Bị xóa sau khi thanh trạng thái được đọc. B3 Delay Steering Được lập khi phát hiện thấy sự không xuất hiện không hợp lệ của tín hiệu DTMF Bị xóa sau khi phát hiện tín hiệu DTMF hợp lệ. 2.3 IC LM358: * LM358 là một IC gồm hai vi mạch thuật toán nằm trong cùng một vỏ. Vi mạch thuật toán tiêu chuẩn là loại vi mạch đơn khối tích hợp lớn được chế tạo theo công nghệ màng mỏng. Nhờ khả năng tích hợp lớn nên vi mạch loại này được ứng dụng rộng rãi trong thực tế. * Ưu điểm nổi bật của vi mạch là làm việc tốt ở mức điện áp thấp đến 5VDC. Vi mạch thuật toán có các đặc tính chung như sau: Có độ lệch điểm trôi về zero quá nhỏ. Không cần bù tần số, tăng độ ổn định ở chế độ làm việc tuyến tính. Có bảo vệ ngắn mạch và bảo vệ quá tải. 77 Không bị khoá nếu tín hiệu đưa vào không thích hợp. Hệ số nén dòng pha lớn. Tiêu hao công suất nhỏ. 78 2.3.1 Sơ đồ chân: Hình 2 – 7: Sơ đồ chân IC LM358 2.3.2 Chức năng các chân: Chức năng các chân của IC TL082 Chân Chức năng 1 Ngõ ra 1 2 Ngõ vào đảo 1 3 Ngõ vào không đảo 1 4 -Vcc 79 5 Ngõ vào không đảo 2 6 Ngõ vào đảo 2 7 Ngõ ra 2 8 +Vcc 2.3.3 Thông số: Nguồn cung cấp: VCC = ± 16V. Điện áp ngõ vào: Vi = -0.3->32V. Điện áp ngõ vào sai biệt: Vid = 32V. Đô lợi AV = 100 dB. Về mặt nguyên lý, vi mạch lý tưởng sẽ có tổng trở vào vô cùng lớn, tổng trở ra vô cùng nhỏ, tốc dộ bám giữ tín hiệu ra với tín hiệu vào không bị giới hạn và có băng thông rất rộng. Tuy nhiên trên thực tế không thể nào có một OPAMP lý tưởng như vậy. Về độ khuếch đại điện áp hay độ lợi: Vi mạch dùng vòng hồi tiếp là một vòng hở có độ lợi khoảng 100dB Tổng trở vào khoảng vài chục MΩ Tổng trở ngõ ra khoảng đến 100Ω Dòng phân cực ngõ vào:khi dùng transistor lưỡng cực ở tần đầu vào, giá trị IB cỡ từ 0,1µA đến 0,8µA Nguồn cung cấp: Thông thường dùng nguồn lưỡng cực để khai thác hết hiệu suất của vi mạch. Tín hiệu vào không vượt quá VCC. Giá trị cực đại cho phép thường nhỏ hơn VCC từ 1 đến 3V. 2.4 IC MAX232. Max-232 là IC thường được dùng trong lĩnh vực giao tiếp với máy tính, theo chuẩn RS-232, MAX-232 có nhiều loại, ở đây chỉ đề cập đến loại MAX-232E có 80 16 chân. Với điện áp là 5V thì điện ra của ngõ xuất sẽ dao động trong khoảng 8V khi tải ở ngõ nhận có giá trị là 5k, trong điều kiện tồi tệ nhất mức điện áp tối thiểu ở ngõ ra cũng phải dao động trong khoảng 5V.Gồm có một tải 3k, điện áp tối thiểu, và một nhiệt độ hoạt động tối đa. Trong một mạch điện mở rộng thì điện áp ngõ ra dao động trong khoảng từ (V+ - 0,6V) đến V- . Ngưỡng ngõ vào của hai họ CMOS/TTL phải tương thích với nhau. Max 232 không có điện trở kéo lên ở ngõ vào chân phát. Hình 2.4: Hình dạng và cấu tạo của max232 Ngõ nhận của RS-232 sẽ chuyển đổi tín hiệu đến ngõ ra của con CMOS- logic. để đảm bảo ngưỡng vào của ngõ nhận đạt được 0.8V và 2.4V thì điều có nghĩa là phải nhỏ hơn ngưỡng 3V (theo bắt buộc về đặc điểm kỹ thuật của EIA/TIA-232E). điều này cho phép ngõ vào nhận (receiver) phản ứng lại mức độ hợp lý của TTL/CMOS cũng giống như của RS-232. Việc bảo đảm ngưỡng vào ở mức thấp 0.8V là sự đảm bảo được rằng ngõ nhận không thể tồn tại lâu trạng thái ngõ ra ở mức 1. Điện trở 5k ở ngõ vào hoàn 81 toàn đảm bảo được rằng ngõ nhận với ngõ vào tương ứng sẽ chỉ có duy nhất một ngõ ra ở mức 1. Ngõ vào nhận chỉ sai lệch xấp xỉ 0.5V. Điều này đã làm cho ngõ ra được chuyển trạng thái nhanh gọn hơn, thậm chí với tín hiệu tăng chậm hoặc giảm theo thời gian thì lượng tín hiệu nhiễu cũng vừa phải hơn. CHƯƠNG 3: SƠ ĐỒ THIẾT KẾ VÀ LƯU ĐỒ GIẢI THUẬT 3.1 SƠ ĐỒ THIẾT KẾ. 3.1.1 Sơ đồ khối. a. MODULE PSTN-RS232: b. MODULE TRẠM: 82 3.1.2 Sơ đồ nguyên lý. a. Khối nguồn. 83 Dùng IC ổn áp 7805 và 7812, có nhiệm vụ cung cấp điện áp ổn định cho 84 mạch. Ngoài ra mạch còn tạo điện áp -12V nhờ vào IC555. Tần số dao động của IC555 là: f=1/0.693*C28*(R23+R24). Khi ngõ ra chân 3 IC ở mức cao thì tụ C26 sẽ được nạp thông qua D16, khi ngõ ra chân 3 ở mức thấp thì tụ C26 sẽ xả qua D15 và nạp vào C27. Vậy điện áp lấy ra giữa hai đầu tụ C27 sẽ là điện áp âm -12V. b. Khối cảm biến chuông. Nhiệm vụ của mạch là cảm biến khi có chuông gọi vào. Bình thường thì tụ C3 sẽ ngăn áp DC không cho vào mạch, khi đó opto P521 chưa dẫn nên chân ngõ ra RING sẽ ở mức cao. Khi có chuông gọi vào thì tụ C3 sẽ cho điện áp đi qua, chỉnh lưu 1 chiều nhờ cầu diode, khi đó P521 sẽ dẫn và ngõ ra RING sẽ ở mức thấp báo cho VXL biết. c. Khối chuyển mạch, tải giả. 85 Có nhiệm vụ kết nối line điện thoại với khối thu phát DTMF. Mạch tạo tải giả nhằm tạo trở kháng giống như 1 thuê bao nhấc máy. Q2 có nhiệm vụ thay thế một thuê bao trên lĩnh vực trở kháng. Điện trở DC của một máy điện thoại là 300 , điện trở xoay chiều tại tần số f = 1 KHz là 700 30%. Tổng trở vào của mạch này phải phù hợp các thông số trên, tụ C9 nhằm lọc xoay chiều. Tín hiệu AC không ảnh hưởng đến trở kháng DC của mạch. D10,D11,Q2,R6 tạo thành nguồn dòng ổn định I=0.6/22=27mA. d. Khối thu, phát DTMF. 86 87 Tụ C10 ngăn DC chỉ cho tín hiệu âm tần đi qua, tín hiệu âm tần này được tải qua biến áp suất âm. Hai diode D12,D13 chống quá áp. Tín hiệu vào được khuếch đại qua U5A. Hệ số khuếch đại Av= -R4/R13= - 10. Tín hiệu ra được khuếch đại qua U5B. Hệ số khuếch đại Av= -R11/R20= - 10. Tụ C11,C12,C5 là các tụ liên lạc. R14 chống điện áp sai biệt R14=R13//R4. e. Khối xử lý trung tâm. 88 f. Khối giao tiếp RS232. g. Khối đo nhiệt độ. 89 Đọc nhiệt độ nhờ IC LM35 ,ngõ ra IC LM35 thay đổi 10mV/oC. Điều chỉnh giá trị nhiệt độ nhờ biến trở R39, sau đó đưa qua bộ khuếch đại với hệ số khuếch đại là Av=1+R38/R37=11. h. Khối cảm biến ngõ vào. 90 • Khối điều khiển. 91 92 3.2 Lưu đồ giải thuật. 3.2.1 Module PSTN-RS232. 93 94 95 96 3.2.2 Module trạm. 97 98 99 CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 4.1 KẾT LUẬN. Sau thời gian nghiên cứu và tiến hành thi công đồ án đã được hoàn thành. 100 Trong quá trình thi công và thực hiện tôi đã gặp rất nhiều vấn đề phát sinh ngoài mong đợi. Tuy đã cố gắng sửa chữa tuy nhiên vẫn còn một vài lỗi nhỏ. 4.2 HƯỚNG PHÁT TRIỂN ĐỀ TÀI. Theo tôi thì đề tài này còn có thể phát triển để hoàn chỉnh hơn: Mở rộng thêm các ngõ vào đọc trạng thái, nhiệt độ và các ngõ ra. Thêm chức năng chọn lựa có thể điều khiển tự động tại chỗ hoặc điều khiển từ phần mềm giám sát. Có thể set cấu hình như ngưỡng để gửi nhiệt độ cao, thấp.. .Phần mềm giám sát có thể cùng lúc giám sát được nhiều module trạm hơn. TÀI LIỆU THAM KHẢO • Giáo trình Hệ Thống Viễn Thông- Bùi Thư Cao- Trường Đại Học Công Nghiệp Thành Phố Hồ Chí Minh. • Giáo trình Thiết Bị Đầu Cuối Viễn Thông- Trần Minh Hồng- 101 Trường Đại Học Công Nghiệp Thành Phố Hồ Chí Minh. • Các Website : www.diendandientu.com www.dientuvietnam.net www.datasheetcatalog.com 102

Các file đính kèm theo tài liệu này:

  • pdfGiám sát và điều khiển thiết bị qua đường PSTN.pdf