Vi điều khiển Atmega 32 giao tiếp với Smartphone bằng chuẩn truyền thông nối tiếp không đồng bộ UART thông qua hai chân RXD (chân 14) nhận dữ liệu và chân TXD (chân 15) truyền dữ liệu. Atmega 32 có thể giao tiếp với máy tính thông qua cổng RS232 (Com), cổng USB, Bluetooth…
Trong đồ án này, em sử dụng mô đun Bluetooth HC-06 (Slave), sử dụng Bluetooth trong các thiết bị nhúng, có thể giúp chúng ta kết nối không dây dễ dàng hơn. Kết nối không dây có tính thẩm mỹ cao, di chuyển qua lại dễ dàng hơn so với kết nối có dây thông thường.
Mô đun Bluetooth HC-06 được tích hợp trên board cho phép bạn sử dụng nguồn từ 3.5 V đến 6 V cung cấp cho board mà không cần lo lắng về chênh lệch điện áp 3 V – 5 V gây hỏng board.
Mô đun Bluetooth HC-06 gồm 6 chân theo thứ tự: KEY, VCC, GND, TX, RX, STATE. Đây là mô đun Bluetooth SLAVE nghĩa là chúng ta không thể chủ động kết nối bằng vi điều khiển, mà cần sử dụng Smartphone, laptop, Bluetooth usb...để dò tín hiệu và kết nối (pair) từ Smartphone, laptop, Bluetooth USB...Sau khi ghép đôi thành công, ta có thể gửi và nhận tín hiệu từ vi điều khiển đến các thiết bị này.[4]
Truyền thông không đồng bộ chỉ cần một đường một đường truyền cho một quá trình.“Khung dữ liệu” đã được chuẩn hóa bởi các thiết bị nên không cần đường xung nhịp báo trước dữ liệu đến.Tuy nhiên, để quá trình truyền thành công thì việc tuân thủ các tiêu chuẩn truyền là hết sức quan trọng.
Cấu trúc của một khung truyền phổ biến nhất là: 1 bit Start + 8 bit data + 1 bit stop.
Hình 2.25: Cấu trúc của một khung truyền phổ biến.
Tốc độ baud: Để việc truyền và nhận không đồng bộ xảy ra thành công thì các
thiết bị tham gia phải thống nhất nhau về khoảng thời gian dành cho 1 bit truyền, hay nói cách khác tốc độ truyền phải được cài đặt như nhau trước, tốc độ này gọi là tốc độ Baud. Theo định nghĩa, tốc độ Baud là số bit truyền trong 1s. Ví dụ nếu tốc độ Baud được đặt là 19200 thì thời gian dành cho 1 bit truyền là 1/19200 ~ 52.083us.
Khung truyền: Do truyền thông nối tiếp mà nhất là nối tiếp không đồng bộ rất
dễ mất hoặc sai lệch dữ liệu, quá trình truyền thông theo kiểu này phải tuân theo một số quy cách nhất định. Bên cạnh tốc độ Baud, khung truyền là một yếu tố quan trọng tạo nên sự thành công khi truyền và nhận. Khung truyền bao gồm các quy định về số bit trong mỗi lần truyền, các bit “báo” như bit Start và bit Stop, các bit kiểm tra như Parity, ngoài ra số lượng các bit trong một gói dữ liệu cũng được quy định bởi khung truyền. Hình 2.25 là một cấu trúc của một khung truyền phổ biến hay sử dụng nhất.
Start bit: Start là bit đầu tiên được truyền trong một khung truyền, bit này có
chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới. Ở mô đun USART trong AVR, đường truyền luôn ở trạng thái cao khi nghỉ (Idle), nếu một chip AVR muốn thực hiện việc truyền dữ liệu nó sẽ gởi một bit start bằng cách kéo đường truyền xuống mức 0. Như vậy, với AVR bit start là mang giá trị 0 và có giá trị điện áp 0 V (với chuẩn RS232 giá trị điện áp của bit start là ngược lại). Start là bit bắt buộc phải có trong khung truyền.
Data: Dữ liệu cần truyền là thông tin chính mà chúng ta cần gởi và nhận. Data
không nhất thiết phải là gói 8 bit, với AVR có thể quy định số lượng bit của data là 5, 6, 7, 8 hoặc 9 (tương tự cho hầu hết các thiết bị hỗ trợ UART khác). Trong truyền thông nối tiếp UART, bit có ảnh hưởng nhỏ nhất (LSB – Least Significant Bit, bit bên phải) của Data sẽ được truyền trước và cuối cùng là bit có ảnh hưởng lớn nhất (MSB – Most Significant Bit, bit bên trái).
Parity bit: Parity là bit dùng kiểm tra dữ liệu truyền đúng hay không (một cách
tương đối). Có 2 loại parity là parity chẵn (even parity) và parity lẻ (odd parity). Parity chẵn nghĩa là số lượng số 1 trong dữ liệu bao gồm bit parity luôn là số chẵn. Ngược lại tổng số lượng các số 1 trong parity lẻ luôn là số lẻ.
Stop bits: Stop bits là một hoặc các bit báo cho thiết bị nhận rằng một gói dữ
liệu đã được gởi xong. Sau khi nhận được stop bits, thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính chính xác của dữ liệu. Stop bits là các bits bắt buộc xuất hiện trong khung truyền, trong AVR USART có thể là 1 hoặc 2 bits, trong các thiết bị khác Stop bits có thể là 2.5 bits.[2]
CHƯƠNG 3: PHẦN MỀM LẬP TRÌNH HỆ THỐNG 3.1 Các phần mềm lập trình sử dụng cho vi điều khiển
Trong đề tài này em sử dụng các phần mềm chuyên ngành sau: Proteus 8.0 để vẽ sơ đồ nguyên lý, sơ đồ mạch in cho khối điều khiển trung tâm, chạy thử mô phỏng và phần mềm Codevision AVR V2.05.0 để lập trình cho vi điều khiển Atmega 32.
3.1.1 Phần mềm Proteus 8.0
Hình 3.1: Giao diện chính của phần mềm Proteus 8.0.
Phần mềm Proteus 8.0 do hãng Labcenter Electronics sản xuất, một công ty sản xuất phần mềm CAD của Anh và được hàng nghìn người sử dụng trên khắp thế giới. Với ISIS chúng ta có thể mô phỏng hầu hết các dạng mạch điện tử và lần đầu tiên ở các chương trình CAD, ISIS cho phép thiết kế hoàn chỉnh một hệ thống vi điều khiển bao gồm toàn bộ mạch phần cứng giao diện bên ngoài, sau đó mô phỏng sự tương tác giữa chúng. ISIS còn đặt quan tâm đến việc thiết kế mạch in (Printed Circuit Board- PCB) với sự hổ trợ kết xuất mạch điện sang ARES hoặc một chương trình CAD Layout khác để vẽ mạch in. Vùng làm việc chính Tùy chỉnh hiển thị Thanh công cụ Tọa độ di chuyển Nút chạy mô phỏng Vùng chọn linh kiện Thanh tác vụ Thanh trình đơn
Đối với các sinh viên mới của ngành điện tử, ISIS tạo một sự hấp dẫn bằng một hệ thống chương trình đầy đủ công cụ mạnh mẽ và đầy màu sắc, nhiều phông chữ. Kèm theo đó là một thư viện các thiết kế mẫu đa dạng theo thứ tự từ đơn giản đến phức tạp để các bạn tiếp tục phát triển theo ý tưởng của mình.[5]
3.1.2 Phần mềm Codevision AVR V2.05.0
Hình 3.2: Giao diện của phần mềm Codevision AVR V2.05.0
Có rất nhiều phần mềm lập trình cho AVR như: Codevision AVR, AVR Studio, ICCAVR. Bascom AVR,…trong đó CodeVision AVR là phần mềm khá phổ biến.
CodeVision AVR là trình biên dịch C rất tốt cho lập trình vi điều khiển AVR. CodeVision rất hữu dụng vì đã tích hợp nhiều thư viện hỗ trợ lập trình rất thiết thực. Ngoài ra CodeVision còn có khả năng tự động sinh mã tùy theo cấu hình ban đầu của người sử dụng nên giảm công sức lập trình đi rất nhiều. Mã sinh ra chỉ là một tập tin có đuôi .c duy nhất với các chú thích rõ ràng và dễ hiểu giúp người dùng tùy biến mã nguồn theo yêu cầu của riêng mình.[6]
Vùng viết chương trình Các project
Thông báo lỗi và cảnh báo Thanh tác vụ
Các hàm có sẵn Thanh trình đơn
3.2 Công cụ hỗ trợ lập trình Android
Mới đây Google vừa cho ra mắt bộ công cụ Android SDK dành riêng cho lập trình Android. Bộ SDK này Google đã giúp chúng ta tích hợp mọi thứ, không cần nhiều công đoạn như các cách cài đặt cũ, phiên bản mới này chỉ cần tải về và chạy trực tiếp. Android SDK Manager, Virtual Device Manager tích hợp sẵn vào trong Eclips. Đặc biệt không bị một số lỗi khi khởi tạo tập tin .xml như trong các phiên bản trước, thiết lập máy ảo đa dạng, đa thanh phần và một số thứ khác…
3.2.1 Java SE Development Kit
3.2.1.1 Tổng quát về Java SE Development Kit
Java SE Development Kit là bộ công cụ dành cho người phát triển ứng dụng bằng ngôn ngữ lập trình Java. JDK tập hợp những công cụ phần mềm được phát triển bởi Sun Microsystems dành cho các nhà phát triển phần mềm, dùng để viết những Applet Java hay những ứng dụng Java, bộ công cụ này được phát hành miễn phí gồm có trình biên dịch, trình thông dịch và trình giúp sửa lỗi (Debugger, trình chạy Applet và tài liệu nghiên cứu).
Kể từ khi ngôn ngữ Java ra đời, JDK là bộ phát triển phần mềm thông dụng nhất cho Java. Ngày 17 tháng 11 năm 2006, hãng Sun tuyên bố JDK sẽ được phát hành dưới giấy phép GNU General Public License (GPL), JDK trở thành phần mềm tự do. Việc này đã được thực hiện phần lớn ngày 8 tháng 5 năm 2007 và mã nguồn được đóng góp cho OpenJDK.
JDK là hệ thống nền tảng Java và thường được cài đặt lên các máy trạm, máy PC hay laptop để tiện lợi cho các nhà lập trình tiến hành phát triển các ứng dụng có nền tảng Java. Cho nên dù muốn hay không thì khi lập trình với ứng dụng Java trên máy trạm hoặc laptop (PC) thì trên máy phải có Java SE Development Kit (JDK).
Hiện tại bản JDK 8u45 được xem là phiên bản mới nhất với nhiều tính năng vượt trội hơn so với các phiên bản đầu tiên.
3.2.1.2 Cài đặt Java SE Development Kit
Download SDK:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
- Bước 2: Nhấn chọn Download Java Platform (JDK) 8u45.
Hình 3.3: Lựa chọn Java Platform.
- Bước 3: Chọn Accept License Agreement sau đó chọn bản JDK phù hợp với Windown 32 bit/64 bit để tải về máy.
Hình 3.4: Chọn phiên bản JDK phù hợp với Windowns.
Cài đặt SDK:
- Bước 1: Kích đúp chuột trái vào tập tin jdk-8u45-windows-i586.exe vừa tải về
máy. Xuất hiện hộp thoại nhấn chọn Yes để cài đặt.
- Bước 2: Nhấn chọn Next.
- Bước 4: Xuất hiện hộp thoại, nhấn chọn Next để tiếp tục cài đặt.
- Bước 5: Xuất hiện hộp thoại nhấn chọn Close để kết thúc quá trình cài đặt. 3.2.2 Eclipse IDE
3.2.2.1 Tổng quát Eclipse IDE
Về nguyên tắc chúng ta có thể dùng bất kì môi trường phát triển phần mềm Java nào yêu thích để phát triển ứng dụng. Thậm chí có thể dùng Notepad của Windows để viết các mã lệnh nhưng làm thế sẽ tốn rất nhiều thời gian và khá phức tạp. Đối với Android, theo như Google khuyến cáo thì dùng Eclipse để có sự hỗ trợ tối đa từ các công cụ lập trình Android mà Google cung cấp. Tổ chức OHA và Google khuyến cáo dùng Eclipse, vì Eclipse có thể thực thỉ trên nhiều hệ điều hành khác nhau mà không cần cài đặt trên chúng. Toàn bộ gói ứng dụng Eclipse có thể tải về tại địa chỉ sau: https://developer.android.com/sdk/index.html#top. Sau khi tải về giải nén và chạy trực tiếp không cần phải cài đặt như các bản cũ.
Có Elipse và JDK ta có thể lập trình ứng dụng Java ngay trên các máy trạm được. Do chúng ta lập trình ứng dụng Android nên cần JDK để có nền tảng để lập trình Java, có Eclipse IDE để lập trình ứng dụng trên đó, bây giờ ta cần thêm một Android SDK để hỗ trợ viết ứng dụng đặc thù Android với những công cụ hỗ trợ của nó cùng với Eclipse có thể viết ứng dụng Android hoàn chỉnh.
Trong ADT Bundle, khởi động Eclipse, giao diện ban đầu như hình 3.5.
Chúng ta chọn Workspace cho việc phát triển ứng dụng trên Android, ở đây sẽ là nơi mà chúng ta dùng để lưu trữ các dự án hay còn gọi là Project Android mà mình tạo ra. Như ở trên ta chọn là ổ đĩa E, thư mục chứa là Eclipse. Công việc này chỉ cần thực hiện một lần khi lần đầu tiên chúng ta khởi động Eclipse sau khi cài đặt. Sau khi lựa chọn nơi lưu trữ, đợi Eclipse khởi động xong sẽ có giao diện như hình 3.6.
Hình 3.6: Giao diện Eclipse. 3.2.2.2 Tích hợp Android SDK Manager vào Eclipse
Android SDK Manager là một môi trường để phát triển các ứng dụng cho hệ điều hành Android. Phần mềm này chứa các phiên bản Android, các hàm API cần thiết cũng như các công cụ hỗ trợ lập trình khác, cho phép bạn tạo các ứng dụng sử dụng máy ảnh của điện thoại di động, dữ liệu GPS, Wi-Fi, truy cập Bluetooth, 3G,… Android SDK Manager tương tác với các trình duyệt và hỗ trợ làm việc với các định dạng khác nhau của tập tin âm thanh hoặc video. Phần mềm này cũng được xây dựng trong mô đun cho phép để tiến hành thử nghiệm các ứng dụng được phát triển theo các phiên bản khác nhau của Android. Các tính năng khác của Android SDK Manager được thực hiện bằng cách kết nối các công cụ khác nhau và bổ sung.
Để tích hợp Android SDK Manager vào Eclipde ta làm như sau:
- Bước 1: Trên giao diện Eclipse chọn menu Windown, sau đó chọn Android
SDK Manager như hình 3.7.
Hình 3.7: Tham chiếu đến Android SDK.
- Bước 2: Giao diện của Android SDK Manager sẽ như hình 3.8, danh sách các
packages sẽ hiển thị với các trạng thái “Installed”, “Not installed” hoặc “Update
available …”. Chúng ta muốn lập trình với Android phiên bản nào thì kích chọn và
nhấn Installed.
- Bước 4: Cửa sổ tiếp theo sẽ xuất hiện với danh sách các thành phần mà ta đã
chọn trước đó, hãy kiểm tra lại lần nữa và khi đã thấy đầy đủ thì nhấn Accept License và sau đó là Install. Quá trình tải về sẽ bắt đầu, và khi tải xong, tất cả sẽ được cài đặt một cách tự động.
Hình 3.9: Cài đặt Android SDK Manager. 3.2.3 Android Virtual Device
Android Virtual Device cho phép lập trình viên tạo và quản lí các thiết bị ảo. Cài đặt máy ảo Android Virtual Device.
- Bước 1: Trên giao diện Eclipse chọn menu Windown, sau đó chọn Android Virtual Device.
- Bước 2: Chọn Create để tiến hành tạo máy ảo.
- Bước 3: Android Virtual Device (AVD) xuất hiện, khi đó hãy điền các thông
tin cấu hình cho máy ảo theo hình 3.11 và nhấn OK.
Hình 3.11: Cài đặt thông số cho Android Virtual Device.
- Bước 4: Một Android Virtual Device sẽ xuất hiện tại danh sách AVD Name,
đó là cái mà bạn vừa tạo ở trên. Bây giờ hãy nhấn vào nó và chọn Start….
- Bước 5: Hộp thoại Launch Options sẽ xuất hiện, yêu cầu bạn thiết lập kích
thước của máy ảo, hãy thay đổi thông số theo ý muốn tại nhóm tùy chỉnh Scale display to real size hoặc chọn Full màn hình bằng cách bỏ đánh dấu vào tùy chọn đó. Sau đó nhấn Lauch.
Hình 3.13: Thiết lập kích thước màn hình cho Android Virtual Device.
Sau khi nhấn Lauch, máy ảo sẽ bắt đầu khởi động. Có thể sẽ mất ít phút cho lần sử dụng đầu tiên. Khi đã khởi động thành công, chúng ta đã có một màn hình “thiết bị ảo” chạy Android để khám chạy các ứng dụng.
3.3 Lưu đồ thuật toán điều khiển bảng Led ma trận
Trong đề tài này em sử dụng 8 mô đun Led ma trận 16 x 32 ghép lại thành một bảng cở 32 x 128 (32 hàng và 128 cột). Mỗi ký tự sẽ được hiển thị trong một khung cở 8 x 8. Để hiển thị ký tự lên bảng Led ma trận ta có 2 phương pháp là quét theo hàng hoặc quét theo cột. Ở đây ta dùng phương pháp quét theo hàng và xuất dữ liệu ra cột. Quá trình quét theo hàng là ta gửi tín hiệu cho phép đến 4 hàng trong từng thời điểm. Cùng lúc đó ta gửi dữ liệu cột đến 8 hàng. Trong đề tài này tín hiệu cho phép cột là mức logic 1 và dữ liệu hàng tương ứng là mức 0 (mức 0 ứng với Led sáng và mức 1 là tắt). Nguyên tắc quét Led ma trận như sau.
- Đầu tiên ta đưa dữ liệu cần hiển thị đến 128 cột.
- Kích hoạt 4 hàng đầu tiên và các Led trên mô đun Led ma trận tương ứng sẽ sáng. Tạo một thời gian trễ để duy trì cho Led sáng, sau đó tắt 4 hàng đầu tiên.