1. Trang chủ
  2. » Luận Văn - Báo Cáo

viết chương trình có giao diện trên raspberry pi cho phép nhận tín hiệu mã morse nhập từ nút bấm và xuất ra tín hiệu led tương ứng định nghĩa các mã morse

40 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 3,09 MB

Cấu trúc

  • 1.3 Mã Morse (8)
    • 1.3.1 Khái niệm (8)
    • 1.3.2 Các quy tắc cơ bản trong mã Morse (9)
  • 1.4 Tổng quan Linux và Ubuntu (10)
    • 1.4.1 Giới thiệu về Linux (10)
    • 1.4.2 Tổng quan về hệ điều hành Ubuntu (12)
  • 1.5 Tổng quan Driver Gpio (13)
    • 1.5.1 Tìm hiểu GPIO (15)
    • 1.5.2 GPIO driver (20)
  • CHƯƠNG 2: CÀI ĐẶT VÀ THỰC NGHIỆM (21)
    • 2.1 Mục tiêu (21)
    • 2.2 Thiết kế phần cứng và phần mềm (22)
    • 2.3 Cài đặt (22)
    • 2.4 Thực nghiệm (29)
  • TÀI LIỆU THAM KHẢO (40)

Nội dung

Raspberry Pi không hoàn toàn có thểthay thế được máy tính để bàn hoặc laptop nhưng nó là một thiết bị đa năng có thể đượcsử dụng cho những hệ thống điện tử, thiết lập hệ thống tính toán,

Mã Morse

Khái niệm

Mã Morse hay còn được gọi với một cái tên đó là Moóc – xơ với nguồn gốc tên gọi được đặt theo nhà phát minh điện báo có tên là SamuelMorse Ký tự Morse thật chất là một hệ thống mã hóa các ký tự và cho phép người dùng có thể gửi các tin nhắn với dạng mộ chuỗi xung điện cụ thể ngắn , dài, chấm hoặc gạch ngang Hiện nay, ký tự Morse đã mã hóa được bảng chữ cái 26 chữ tiếng Anh, chữ Ả Rập, một số chữ tiếng Anh khác và các dấu câu hoặc tín hiệu

Các quy tắc cơ bản trong mã Morse

Mỗi biểu tượng mã Morse (hay mỗi ký tự) được hình thành bởi chuỗi các dấu chấm (.) và dấu gạch ngang (-) Trong đó:

 Dấu (.): là đơn vị đo thời gian cơ bản trong hệ thống Morse, 1 dấu chấm là 1 đơn vị thời gian.

 Dấu (-): có thời lượng gấp 3 lần thời lượng của dấu chấm, tức 3 đơn vị thời gian.

 Khoảng cách giữa các phần trong cùng một chữ cái là 1 đơn vị thời gian.

 Khoảng cách giữa các chữ cái trong cùng một từ là 3 đơn vị thời gian.

 Khoảng cách giữa các từ hoàn chỉnh là 7 đơn vị thời gian.

1.3.3 Ứng dụng của mã Morse

 Truyền thông vô tuyến: Đặc biệt là trong các tình huống khẩn cấp và hàng hải.

 Điện báo: Phương tiện truyền thông chủ yếu trước khi có sự ra đời của điện thoại.

 Quân sự: Sử dụng để truyền tải thông tin mật mã.

Lợi ích và hạn chế của mã Morse

 Đơn giản và hiệu quả cho truyền thông trong điều kiện tín hiệu kém.

 Có thể được truyền qua nhiều phương tiện khác nhau như ánh sáng, âm thanh, và tín hiệu điện.

 Tốc độ truyền tải chậm hơn so với các phương pháp truyền thông hiện đại.

 Yêu cầu người dùng phải được đào tạo để hiểu và sử dụng mã Morse

Tổng quan Linux và Ubuntu

Giới thiệu về Linux

Linux là tên gọi của một hệ điều hành máy tính và cũng là tên hạt nhân của hệ điều hành Nó có lẽ là một ví dụ nổi tiếng nhất của phần mềm tự do và của việc phát triển mã nguồn mở.

Phiên bản Linux đầu tiên do Linus Torvalds viết vào năm 1991, lúc ông còn là một sinh viên của Đại học Helsinki tại Phần Lan Ông làm việc một cách hăng say trong vòng 3 năm liên tục và cho ra đời phiên bản Linux 1.0 vào năm 1994 Bộ phận chủ yếu này được phát triển và tung ra trên thị trường dưới bản quyền GNU General Public License.

Do đó mà bất cứ ai cũng có thể tải và xem mã nguồn của Linux.

Một cách chính xác, thuật ngữ "Linux" được sử dụng để chỉ Nhân Linux, nhưng tên này được sử dụng một cách rộng rãi để miêu tả tổng thể một hệ điều hành giống Unix(còn được biết đến dưới tên GNU/Linux) được tạo ra bởi việc đóng gói nhân Linux cùng với các thư viện và công cụ GNU, cũng như là các bản phân phối Linux Thực tế thì đó là tập hợp một số lượng lớn các phần mềm như máy chủweb, các ngôn ngữ lập trình, các hệ quản trị cơ sở dữ liệu, các môi trường làm việc desktop như GNOME và KDE, và các ứng dụng thích hợp cho công việc văn phòng như OpenOffice.org.Ban đầu, Linux được phát triển và sử dụng bởi những người say mê Tuy nhiên, hiện nay Linux đã có được sự hỗ trợ bởi các công ty lớn như IBM và Hewlett-Packard, đồng thời nó cũng bắt kịp được các phiên bản Unix độc quyền và thậm chí là một thách thức đối với sự thống trị củaMicrosoft Windows trong một số lĩnh vực Sở dĩ Linux đạt được những thành công một cách nhanh chóng là nhờ vào các đặc tính nổi bật so với các hệ thống khác: chi phí phần cứng thấp, tốc độ cao (khi so sánh với các phiên bản Unix độc quyền) và khả năng bảo mật tốt, độ tin cậy cao (khi so sánh với Windows) cũng như là các đặc điểm về giá thành rẻ, không bị phụ thuộc vào nhà cung cấp Một đặc tính nổi trội của nó là được phát triển bởi một mô hình phát triển phần mềm nguồn mở hiệu quả Tuy nhiên, hiện tại số lượng phần cứng được hỗ trợ bởi Linux vẫn còn rất khiêm tốn so với Windows vì các trình điều khiển thiết bị tương thích với Windows nhiều hơn là Linux Nhưng trong tương lai số lượng phần cứng được hỗ trợ cho Linux sẽ tăng lên.

 Độ an toàn cao: trong Linux có một cơ cấu phân quyền hết sức rõ ràng Chỉ có

"root"(người dùng tối cao) mới có quyền cài đặt và thay đổi hệ thống Ngoài ra Linux cũng có cơ chế để một người dùng bình thường có thể chuyển tạm thờichuyển sang quyền "root" để thực hiện một số thao tác Điều này giúp cho hệ thống có thể chạy ổn định và tránh phải những sai sót dẫn đến đổ vỡ hệ thống Trong những phiên bản Windows gần đây, cơ chế phân quyền này cũng đã bước đầu được áp dụng, nhưng so với Linux thì vẫn kém chặt chẽ hơn.

 Thích hợp cho quản trị mạng: Được thiết kế ngay từ đầu cho chế độ đa người dùng, Linux được xem là một hệ điều hành mạng rất giá trị Nếu như Windows tỏ ra là một hệ điều hành thích hợp với máy tính Desktop thì Linux lại là hệ điều hành thống trị đối với các Server Đó là do Linux có rất nhiều ưu điểm thỏa mãn đòi hỏi của một hệ điều hành mạng: tính bảo mật cao, chạy ổn định, các cơ chế chia sẻ tài nguyên tốt… Giao thức TCP/IP mà chúng ta vẫn thấy ngày nay chính là một giao thức truyền tin của Linux (sau này mới được đưa vào Windows)

 Chạy thống nhất trên các hệ thống phần cứng: Dù cho có rất nhiều phiên bản Linux được các nhà phân phối khác nhau ban hành nhưng nhìn chung đều chạy khá ổn định trên mọi thiết bị phần cứng, từ Intel 486 đến những máy Pentium mới nhất, từ những máy có dung lượng RAM chỉ 4MB đến những máy có cấu hình cực mạnh

 Đòi hỏi người dùng phải thành thạo: Trước kia việc sử dụng và cấu hình Linux được xem là một công việc chỉ dành cho những chuyên gia Hầu như mọi công việc đều thực hiện trên các dòng lệnh và phải cấu hình nhờ sửa trực tiếp các file Mặc dù trong những phiên bản gần đây, các hệ điều hành Linux đã có những cải tiến đáng kể, nhưng so với Windows tính thân thiện của Linux vẫn còn là một vấn đề lớn Đây là một trong những nguyên nhân chủ yếu khiến Linux mặc dù có rất nhiều đặc tính kỹ thuật tốt nhưng vẫn chưa đến được với người dùng cuối

 Tính tiêu chuẩn hóa: Linux được phát hành miễn phí nên bất cứ ai cũng có thể tự mình đóng gói, phân phối theo những cách riêng Hiện tại có khá nhiều bản Linux phát triển từ một nhân ban đầu cùng tồn tại như: RedHat, SuSE, Knoppix Người dùng phải tự so sánh xem bản nào là phù hợp với mình Điều này có thể gây khó khăn cho người dùng, nhất là những người còn có kiến thức về tin học hạn chế

 Số lượng các ứng dụng chất lượng cao trên Linux còn hạn chế: Mặc dù Windows có sản phẩm nào thì Linux cũng gần như có phần mềm tương tự (Ví dụ: OpenOffice.org trên Linux tương tự như MS Office, hay GIMP tương tự như Photoshop…) Tuy nhiên chất lượng những sản phẩm này là chưa thể so sánh được với các sản phẩm viết cho Windows

 Một số nhà sản xuất phần cứng không có driver hỗ trợ Linux: Do hiện nay Linux chưa phổ biến bằng Windows nên nhiều nhà sản xuất không hỗ trợ các driver chạy trên

Linux Tuy nhiên bạn vẫn có thể tìm thấy các driver này do ai đó trong cộng đồng mã nguồn mở viết.

Tổng quan về hệ điều hành Ubuntu

Ubuntu là một hệ điều hành mã nguồn mở được phát triển bởi cộng đồng chung dựa trên nền tảng Debian GNU/Linux, nó được tài trợ bởi Canonical Ltd (chủ sở hữu là Mark Shuttleworth), rất phù hợp cho máy tính để bàn, máy tính xách tay và máy chủ Dù bạn dùng cho máy tính ở nhà, ở trường hay trong công sở, Ubuntu có đầy đủ các chường trình người dùng cần, từ phần mềm soạn thảo văn bản và gửi nhận thư, đến các phần mềm máy chủ web và các công cụ lập trình.

Ubuntu hoàn toàn miễn phí Người dùng không phải trả tiền bản quyền cho bất cứ ai, có thể tải về, sử dụng và chia sẻ với bạn bè, gia đình hoặc đồng nghiệp mà không mất một khoản phí nào cả.Mỗi phiên bản Ubuntu đều được cập nhật 6 tháng một lần, điều đó có nghĩa là người dùng luôn luôn có các ứng dụng mới nhất trong thế giới phần mềm mã nguồn mở.Ubuntu được thiết kế với tiêu chí chuyên về bảo mật Người dùng có thể lấy về các bản cập nhật về bảo mật ít nhất là 18 tháng trên máy để bàn và máy chủ Với phiên bản Hỗ trợ dài hạn (Long Term Support - LTS), sẽ có 3 năm hỗ trợ với máy để bàn và 5 năm hỗ trợ đối với máy chủ Bạn không phải trả thêm một khoản phí nào cho phiên bản LTS Việc nâng cấp lên phiên bản mới hơn của Ubuntu hoàn toàn miễn phí.

Mọi thứ bạn cần đều nằm trong một đĩa CD, đã cung cấp cho bạn một môi trường làm việc đầy đủ Những phần mềm mở bổ sung, bạn có thể lấy về trực tiếp từ kho phần mềm miễn phí trên Internet.Ubuntu hướng đến người dùng phổ thông nên được bản địa hóa với sự giúp đỡ của cộng đồng người dùng mã mở các loại ngôn ngữ trên thế giới (trong đó có tiếng Việt) Bạn có thể tùy chỉnh ngôn ngữ sử dụng trong giao diện hiển thị bất kì lúc nào Giao diện cài đặt cho phép bạn thực hiện các thao tác cài đặt một cách nhanh chóng và dễ dàng Quá trình cài đặt tiêu chuẩn thường mất không quá 25 phút.

Sau khi bạn cài đặt xong, hệ thống của bạn hoàn toàn có thể dùng được ngay mà không cần phải cấu hình, bổ sung thêm gì cả Một loạt các ứng dụng cần thiết đã được cài đặt kèm theo trong quá trình cài đặt Ubuntu

Ubuntu có thể cài đặt trên các loại máy tính để bàn, máy tính mini có cấu trúc dựa trên nền tảng Intel-based Mac architectures (dành cho chíp64bit có phiên bản riêng) Yêu cầu tối thiểu để chạy Ubuntu là 256MB RAM (384MB RAM để chạy trực tiếp Ubuntu từ đĩa CD), nhưng chúng tôi khuyến cáo nên cài đặt trên máy có 512MB RAM trở lên

Ubuntu khi cài đặt vào ổ đĩa cứng cần ít nhất 4GB trống (bao gồm cả phân vùng trao đổi).

Nên có card đồ họa mạnh để sử dụng các hiệu ứng trên giao diện đồ họa.

1.4.2.3 Ưu nhược điểm của Ubuntu

 Ubuntu hoàn toàn miễn phí Với đặc trưng là một mã nguồn mở nên Ubuntu hoàn toàn miễn phí Bạn có thể thoải mái tải về, sử dụng và chia sẻ mà không phải trả bất cứ chi phí nào Không những thế, bạn có thể nghiên cứu cách chúng hoạt động, dựa vào đó để phát triển và phân phối chúng.

 Đáp ứng nhu cầu của đa số người dùng Hệ điều hành máy tính để bàn Ubuntu nguồn mở hỗ trợ hàng triệu PC và máy tính xách tay trên khắp thế giới.

 Cung cấp đủ chương trình cần thiết cho văn phòng Tích hợp đa dạng các chương trình, phần mềm soạn thảo, nhận/gửi thư, phần mềm máy chủ web và lập trình, Ubuntu thuyết phục người dùng khi có thể sử dụng được trên máy xách tay và máy chủ.

 Hệ điều hành hoàn toàn không có virus Người dùng hoàn toàn an toàn khi sử dụng Ubuntu Không antivirus, không lo lắng, Ubuntu thực sự là lựa chọn đúng đắn cho những người đặt bảo mật lên trên hết.

 Đa ngôn ngữ: Với tính chất “Ubuntu” (tình người) kết hợp với mã nguồn mở trên toàn thế giới, Ubuntu hướng tới người dùng phổ thông nên được bản địa hóa ngôn ngữ với từng địa phương (có cả tiếng Việt).

 Hạn chế đầu tiền là khó dùng, khó làm quen (với những người chuyển từ Windows sang).

 Vấn đề thứ hai là thiếu hụt phần mềm chuyên dụng cao Vì đáp ứng đối tượng là người dùng phổ thông nên Ubuntu chưa có nhiều phần mềm chuyên dụng cao Hiện tại Ubuntu cũng đang đẩy mạnh việc này, đã cung cấp kha khá phần mềm

 Bộ gõ tiếng Việt trên Ubuntu hơi khó khăn so với Windows.

Tổng quan Driver Gpio

Tìm hiểu GPIO

GPIO là một chân tín hiệu kỹ thuật số trên mạch tích hợp mà hành vi của nó (đầu vào hoặc đầu ra) được điều khiển bởi phần mềm ứng dụng GPIO về cơ bản là một chân có thể được cấu hình làm đầu vào hoặc đầu ra Nếu cấu hình chân như một đầu ra, thì có thể ghi 0 (LOW) hoặc 3,3 / 5 V (VDD) vào chân đó Khi được cấu hình làm đầu vào, có thể đọc tín hiệu trên chân đó GPIO là giao diện tiêu chuẩn mà qua đó vi điều khiển có thể giao tiếp với thế giới bên ngoài Nó có thể được sử dụng để đọc các giá trị từ cảm biến analog hoặc kỹ thuật số, điều khiển đèn LED, điều khiển đồng hồ cho giao tiếp I2C, a) Bản đồ bộ nhớ của ngoại vi GPIO Địa chỉ bộ nhớ trong khoảng từ 0x40000000 đến 0x600000000 có thể được nhà cung cấp vi điều khiển sử dụng để ánh xạ các thiết bị ngoại vi khác nhau của họ Vùng này được chia thành nhiều vùng phụ, mỗi vùng được ánh xạ tới một thiết bị ngoại vi cụ thể, như thể hiện trong hình bên dưới Từ góc độ lập trình viên, chúng ta cần tìm ra địa chỉ mà một thiết bị ngoại vi cụ thể được ánh xạ trong dải địa chỉ này Datasheet của vi điều khiển sẽ cung cấp địa chỉ một thiết bị ngoại vi cụ thể được ánh xạ Trong trường hợp của chúng ta, như chúng ta có thể thấy trong hình bên dưới, thiết bị ngoại vi GPIO được ánh xạ trong dải địa chỉ 0x40020000 đến 0x40021FFF Đây cũng là vùng băng tần bit.

GPIO ngoại vi được chia thành GPIO A, GPIO B, GPIO C, GPIO D, GPIO E, GPIO F, GPIO G, GPIO H và mỗi cổng chứa tối đa 16 chân Ngoại vi GPIOA được ánh xạ từ địa chỉ 0x40020000 đến 0x400203FF và nó quản lý tất cả các chân kết nối với PORT-A.

Mẫu vi xử lý ARM Cortex M-4 có bus dữ liệu rộng 32 bit, bus địa chỉ và tập thanh ghi rộng 32 bit Trên thực tế, mỗi từ có kích thước 32-bit Biết được bus dữ liệu, bus địa chỉ và chiều rộng thanh ghi là rất quan trọng vì nó sẽ giúp hiểu mọi thứ ở cấp độ rất thấp (cơ bản) tức là cấp độ trình điều khiển Vì chúng ta biết rằng kích thước từ là 4 byte, do đó chúng ta có thể nói rằng mọi thanh ghi của ngoại vi GPIO dài 4 byte. b) Thanh ghi GPIO

Tất cả các GPIO có trong vi điều khiển được nhóm lại thành Cổng X trong đó X là

Mỗi cổng trong STM32F446RE bao gồm 16 chân Mỗi chân có nhiều thanh ghi khác nhau được liên kết với nó, bằng cách thay đổi nội dung của các thanh ghi, chúng ta có thể kiểm soát hành vi của một chân cụ thể.

Trong STM32F446RE, hành vi của mỗi chân có thể được kiểm soát bằng cách sử dụng:

Thanh ghi chế độ GPIO Thanh ghi loại đầu ra GPIO Thanh ghi tốc độ GPIO Thanh ghi kéo lên / kéo xuống GPIO Thanh ghi dữ liệu đầu vào GPIO Thanh ghi dữ liệu đầu ra GPIO Thanh ghi set / reset bit GPIO Thanh ghi khóa cấu hình GPIO Thanh ghi chức năng thay thế GPIO c) Truy cập thanh ghi GPIO trong chương trình

Khi bạn đã xác định được địa chỉ cơ sở của thiết bị ngoại vi GPIO nhất định và hiểu các chức năng của các thanh ghi khác nhau để định cấu hình các chân, bây giờ chúng ta có thể tiếp tục và hiểu cách truy cập và lập trình các thanh ghi này Xin lưu ý rằng mỗi port sẽ có một tập hợp tất cả 9 thanh ghi mà chúng ta đã thảo luận ở trên.

Giả sử bạn muốn lập trình thanh ghi chế độ của GPIOA Một cách để lập trình các thanh ghi này là tìm ra địa chỉ chính xác của thanh ghi chế độ GPIOA và lấy một con trỏ đến địa chỉ thực đó, tham khảo con trỏ này, chỉnh sửa các giá trị và ghi lại vào vị trí này bằng cách sử dụng cùng một con trỏ Đây là một cách tiếp cận dài dòng vì bạn cần tìm ra địa chỉ thực của mọi thanh ghi để đọc / ghi từ đó.

Cách tiếp cận khác đơn giản hơn là trừu tượng hóa ánh xạ ngoại vi cụ thể. Điều này được thực hiện bằng cách xác định một số bộ xử lý cho mỗi thiết bị ngoại vi Một trình xử lý là một cấu trúc C, có các tham chiếu được sử dụng để trỏ đến các địa chỉ ngoại vi thực. Đoạn mã trên là cấu trúc C và mỗi trường rộng 32 bit tương ứng với các thanh ghi mà chúng ta đã thấy ở trên Nếu chúng ta trỏ cấu trúc

GPIO_TypeDef đến địa chỉ cơ sở của thiết bị ngoại vi GPIOA, và vì mỗi trường này rộng 32 bit, mỗi trường có thể trỏ đến địa chỉ thanh ghi tương ứng trong bộ nhớ.

Do đó, bằng cách viết như thế này GPIOA ((GPIO_TypeDef *) GPIOA_BASE) trong đó GPIOA_BASE tương ứng với địa chỉ GPIOA thực là 0x40020000, mỗi trường bên trong cấu trúc này trỏ đến địa chỉ thanh ghi tương ứng thực tế trong bộ nhớ Do đó, bằng cách viết GPIOA-> MODER, chúng ta có thể truy cập nội dung của thanh ghi chế độ của thiết bị ngoại vi GPIOA.

GPIO driver

- Cấu trúc dữ liệu (dành riêng cho trình điều khiển) là kho lưu trữ thông tin mà trình điều khiển thiết bị ký tự GPIO khởi tạo và quay vòng, nó được thiết kế Đầu tiên Cấu trúc bao gồm các phần tử dữ liệu sau:

 Một phần tử trừu tượng hạt nhân cdev cho character device drivers

 Cấu trúc struct gpio mô tả chân GPIO cùng cấu hình

 Một biến cho biết trạng thái của chân GPIO (thấp hoặc cao)

 Một biến chỉ ra hướng của chân GPIO (đầu vào hoặc đầu ra)

 Một biến boolean được sử dụng để bật hoặc tắt ngắt trên chân GPIO

 Cờ chỉ ra quá trình chuyển tín hiệu từ cao sang thấp hoặc ngược lại

 Bộ đếm để theo dõi số lượng yêu cầu ngắt

 Một spinlock được sử dụng để đồng bộ hóa Cấu trúc dữ liệu trên mỗi thiết bị đóng vai trò đại diện cho một chân GPIO trên nền tảng Raspberry Pi Tổng cộng có 21 chân GPIO trên Raspberry Pi; do đó, 21 trường hợp của cấu trúc dữ liệu trên mỗi thiết bị đã được tạo để đại diện cho các chân GPIO này.

Sau khi cấu trúc từng thiết bị đã được tạo, việc thiết kế quy trình khởi tạo trình điều khiển và quy trình thoát trình điều khiển đã diễn ra Quy trình khởi tạo trình điều khiển là quy trình được gọi đầu tiên khi kernel cài đặt trình điều khiển thiết bị GPIO Trình thoát điều khiển khỏi là lệnh cuối cùng được gọi bởi kernel khi được dỡ bỏ khỏi hệ thống Quy trình khởi tạo trình điều khiển là cơ sở để đăng ký ký tự GPIO trình điều khiển thiết bị cho nhân, nó sẽ chịu trách nhiệm thực hiện các bước sau:

 Đăng ký một loạt các character device numbers

 Tạo một lớp thiết bị trong / sys director

 Yêu cầu tài nguyên pin GPIO

 Phân bổ bộ nhớ cho cấu trúc mỗi thiết bị

 Khởi tạo một spinlock được sử dụng để đồng bộ hóa

 Đăng ký character device vào nhân

 Tạo các node thiết bị để hiển thị tài nguyên GPIO cho userspace

 Lấy timestamp dùng để contact debouncing.

Một tính năng trong thiết kế của trình điều khiển thiết bị ký tự GPIO là cho phép không gian người dùng để tạo động các nút thiết bị trong thư mục / dev Khi hệ thống được khởi động lại hoặc khi người dùng không gian người dùng đưa ra một lệnh, ví dụ như rmmod, quy trình thoát sẽ thực hiện hành động Thứ nhất, nó hủy đăng ký một loạt các character device numbers Sau đó, nó giải phóng tất cả cấu trúc per-structure được phân bổ trước đó trong quá trình khởi tạo Tiếp theo, nó giải phóng tất cả các nút thiết bị trong thư mục / dev, giải phóng tất cả tài nguyên pin GPIO và thiết lập hướng của tất cả các chân GPIO để xuất ra và đặt mức logic của chúng ở mức thấp Cuối cùng, nó phá hủy lớp thiết bị đã đăng ký trong hệ thống tệp ảo được gắn tại thư mục / sys.

CÀI ĐẶT VÀ THỰC NGHIỆM

Mục tiêu

 Thiết lập và cấu hình các chân GPIO của Raspberry Pi để nhận tín hiệu từ nút nhấn và điều khiển đèn LED.

 Đọc trạng thái của nút nhấn để xác định các tín hiệu Morse (dấu chấm và dấu gạch).

 Điều khiển đèn LED để hiển thị tín hiệu Morse.

 Giải mã chuỗi Morse thành các ký tự tương ứng và hiển thị kết quả.

Thiết kế phần cứng và phần mềm

Raspberry Pi: o Model: Raspberry Pi 3 Model B hoặc các model tương đương (như

Raspberry Pi 4). o Bộ xử lý: ARM Cortex-A53 (hoặc cao hơn). o RAM: 1GB (hoặc cao hơn). o Cổng GPIO: Raspberry Pi có một hàng các chân GPIO có thể lập trình để điều khiển thiết bị ngoại vi.

Nút nhấn (Button): o Loại: Nút nhấn cơ học, khi nhấn vào sẽ tạo ra kết nối điện giữa hai chân. o Kết nối: Một chân nối với chân GPIO của Raspberry Pi, chân còn lại nối với GND (đất).

Hệ điều hành: o Raspbian (Raspberry Pi OS): Hệ điều hành dựa trên Debian, được tối ưu hóa cho Raspberry Pi Cung cấp môi trường Linux để chạy các ứng dụng và truy cập vào phần cứng. o Các phiên bản khác của Linux: Ubuntu for Raspberry Pi,

Cài đặt

o Ngôn ngữ: C. o Chức năng chính:

 Thiết lập và cấu hình các chân GPIO của Raspberry Pi để nhận tín hiệu từ nút nhấn và điều khiển đèn LED.

 Đọc trạng thái của nút nhấn để xác định các tín hiệu Morse (dấu chấm và dấu gạch).

 Điều khiển đèn LED để hiển thị tín hiệu Morse.

 Giải mã chuỗi Morse thành các ký tự tương ứng và hiển thị kết quả.

Các thư viện và công cụ phát triển: o Thư viện chuẩn C: stdio.h, stdlib.h, stdint.h, fcntl.h, sys/mman.h, unistd.h, time.h. o Công cụ phát triển: GCC (GNU Compiler Collection) để biên dịch mã nguồn C thành mã thực thi. a) Khai báo thư viện: b) Địa chỉ cơ sở cho các thanh ghi GPIO của Raspberry Pi và Macro để thiết lập GPIO

 BCM2837_PERI_BASE: Địa chỉ cơ sở của không gian bộ nhớ vật lý cho các thanh ghi trên Raspberry Pi Trong trường hợp này, giá trị là 0x3F000000 Đây là địa chỉ bắt đầu của khu vực bộ nhớ được sử dụng bởi các thanh ghi của chip Broadcom BCM2837, được sử dụng trong Raspberry Pi.

 GPIO_BASE: Địa chỉ cơ sở của thanh ghi GPIO, được tính bằng cách cộng thêm một hằng số offset (0x200000) vào BCM2837_PERI_BASE Điều này cho phép truy cập trực tiếp đến các thanh ghi GPIO trên Raspberry Pi thông qua bộ nhớ.

 PAGE_SIZE: Kích thước của một trang bộ nhớ trong hệ thống, ở đây là 4*1024 bytes, tức là 4KB Các trang bộ nhớ thường là đơn vị nhỏ nhất mà hệ điều hành quản lý.

 BLOCK_SIZE: Kích thước của một khối bộ nhớ được sử dụng trong mã mmap Ở đây cũng là 4*1024 bytes, tức là 4KB Kích thước này thường được sử dụng để ánh xạ các bộ nhớ vật lý vào không gian địa chỉ ảo của một quá trình, như trong trường hợp truy cập GPIO thông qua /dev/mem trên Raspberry Pi. c) Hàm thiết lập truy cập GPIO bằng cách ánh xạ bộ nhớ d) Thiết lập chân GPIO e) Gửi tín hiệu Morse bằng cách điều khiển LED f) Cấu trúc ánh xạ tín hiệu Morse với các ký tự tương ứng g) Giải mã chuối tín hiệu Morse thành ký tự tương ứng h) Kết quả khi chạy chương trình

- Sơ đồ thiết kế mạch:

Thực nghiệm

- Thiết lập và cấu hình các chân GPIO của Raspberry Pi để nhận tín hiệu từ nút nhấn và điều khiển đèn LED.

- Đọc trạng thái của nút nhấn để xác định các tín hiệu Morse (dấu chấm và dấu gạch) và giải mã tín hiệu Morse

// Địa chỉ cơ sở cho các thanh ghi GPIO của Raspberry Pi

#define GPIO_BASE (BCM2837_PERI_BASE + 0x200000)

#define BLOCK_SIZE (4*1024) volatile unsigned int *gpio; // Con trỏ để truy cập vào các thanh ghi GPIO

// Macro để thiết lập GPIO

// Hàm thiết lập truy cập GPIO bằng cách ánh xạ bộ nhớ void setup_io() { int mem_fd; void *gpio_map; if ((mem_fd = open("/dev/mem", O_RDWR|O_SYNC)) < 0) { printf("can't open /dev/mem \n"); exit(-1);

NULL, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, mem_fd, GPIO_BASE ); close(mem_fd); if (gpio_map == MAP_FAILED) { printf("mmap error %d\n", (int)gpio_map); exit(-1);

} gpio = (volatile unsigned int *)gpio_map;

// Thiết lập chân GPIO làm đầu vào void set_gpio_input(int gpio_num) { INP_GPIO(gpio_num);

// Thiết lập chân GPIO làm đầu ra void set_gpio_output(int gpio_num) { INP_GPIO(gpio_num);

// Đặt chân GPIO lên mức cao void gpio_set(int gpio_num) { *(gpio + 7) = 1 0) { morse_code[morse_index] = '\0'; printf("\nMorse code: %s\n", morse_code); if (strcmp(morse_code, "AR") == 0) { printf("Previous Morse code: %s\n", previous_morse);

} char decoded_char = decode_morse(morse_code); printf("Decoded character: %c\n", decoded_char); strcpy(previous_morse, morse_code); previous_index = morse_index; morse_index = 0; memset(morse_code, 0, sizeof(morse_code));

// Thêm độ trễ nhỏ để chống rung (debounce) nút nhấn usleep(10000); prev_button_state = button_state;

Ngày đăng: 01/07/2024, 11:32

HÌNH ẢNH LIÊN QUAN

Hình 1:  Thông số kỹ thuật Raspberry Pi - viết chương trình có giao diện trên raspberry pi cho phép nhận tín hiệu mã morse nhập từ nút bấm và xuất ra tín hiệu led tương ứng định nghĩa các mã morse
Hình 1 Thông số kỹ thuật Raspberry Pi (Trang 4)
Hình 2: Sơ đồ chân Paspbery Pi - viết chương trình có giao diện trên raspberry pi cho phép nhận tín hiệu mã morse nhập từ nút bấm và xuất ra tín hiệu led tương ứng định nghĩa các mã morse
Hình 2 Sơ đồ chân Paspbery Pi (Trang 6)
Hình 3: Cấu trúc phần cứng - viết chương trình có giao diện trên raspberry pi cho phép nhận tín hiệu mã morse nhập từ nút bấm và xuất ra tín hiệu led tương ứng định nghĩa các mã morse
Hình 3 Cấu trúc phần cứng (Trang 6)
Hình 4: Bảng mã Morse - viết chương trình có giao diện trên raspberry pi cho phép nhận tín hiệu mã morse nhập từ nút bấm và xuất ra tín hiệu led tương ứng định nghĩa các mã morse
Hình 4 Bảng mã Morse (Trang 9)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w