Một trong những trường hợp sử dụng nổi bật và mới nổi nhất để kiểm soát các cổng ngoại vi trên PC là tự động hóa gia đình, công nghệ này cung cấp vô số khả năng trong ngôi nhà của chúng ta. Tự động hóa gia đình là một chuyên ngành kỹ thuật có tính xã hội. Phương pháp của chúng tôi là, sử dụng một số cụm từ chính, để cải thiện chất lượng cuộc sống, mở rộng giao tiếp và tự động hóa các quy trình. Tất cả những điều này có vẻ khá đơn giản, nhưng sự phức tạp vốn có trong thế giới tự động hóa gia đình mới này lại rất thú vị, chúng ta hãy cùng xem lý do tại sao.
Tự động hóa gia đình là một hoạt động phức tạp vì một số lý do. Đầu tiên, hoạt động trên các thiết bị gia đình (cảm biến, thiết bị thông minh, bộ truyền động ...) giúp bạn có ý tưởng về các hiện tượng vật lý phức tạp, chẳng hạn như lượng tử cơ học hoặc hiệu ứng quang điện. Hơn nữa, một trong những thiết bị này có thể thực hiện nhiều nhiệm vụ khác nhau và không nhất thiết chỉ là một nhiệm vụ đơn giản. Thứ hai, nói về Tự động hóa gia đình là nói về các hệ thống được tạo thành từ nhiều thành phần khác nhau không phải lúc nào cũng tương tác dễ dàng (hãy tưởng tượng một hệ thống an ninh gia đình bao gồm camera video, máy dò sự hiện diện, thiết bị liên lạc, báo động với hệ thống cảnh báo từ xa, v.v ...). Cuối cùng, và quan trọng nhất, nó phức tạp vì nó đối mặt với sự tự động hóa của các hệ thống kỹ thuật với các hệ thống xã hội.
Hình 1: Sơ đồ cổng song song. Sơ đồ chân đầu nối cái. Nguồn Wikipedia
Địa chỉ đầu tiên trong phạm vi là địa chỉ cơ sở của cổng, còn được gọi là thanh ghi Dữ liệu hoặc chỉ là địa chỉ cổng. Địa chỉ thứ hai là thanh ghi Trạng thái của cổng và địa chỉ thứ ba là thanh ghi Điều khiển.
EPP và ECP dành riêng các địa chỉ bổ sung cho mỗi cổng. EPP thêm năm thanh ghi tại địa chỉ cơ sở + 3 đến địa chỉ cơ sở + 7 và ECP thêm ba thanh ghi tại địa chỉ cơ sở + 400h đến địa chỉ cơ sở + 402h. Đối với địa chỉ cơ sở là 378h, các thanh ghi EPP nằm ở 37Bh đến 37Fh và các thanh ghi ECP nằm ở 778h đến 77Fh.
Trong Linux, rất dễ truy cập và kiểm soát cổng song song, tuy nhiên, quyền truy cập root phải được cân nhắc kỹ lưỡng. Trên đây là tất cả các thư viện cần thiết cho hướng dẫn của chúng ta ngày hôm nay.
Nếu bạn gặp bất kỳ sự cố nào khi thử địa chỉ này, bạn nên thử 0x278.
Lưu ý: Màu sắc của đèn LED không quan trọng.
Thận trọng: Vui lòng cẩn thận khi xử lý đầu nối cổng song song, đảm bảo bạn không ngắt kết nối mạch trước khi tắt PC. Điều này có thể gây hư hỏng cho cổng hoặc thậm chí là Bo mạch chủ. Chúng tôi không thể cho rằng bạn có thể gây ra bất kỳ hư hỏng nào cho các thiết bị phần cứng của mình.
Bây giờ tôi sẽ giải thích tất cả các lệnh và từ được sử dụng trong phần mềm điều khiển:
Khi quá trình xử lý mã vượt qua dòng được phép truy cập, 'fprintf (stderr, "Access denied to% x \ n", base), exit (1);', các chân dữ liệu của cổng song song sẽ có sẵn để bạn sử dụng và tưởng tượng. Trong trường hợp của tôi, tôi chỉ lấy một chuỗi đơn giản từ led đầu tiên đến led cuối cùng với khoảng thời gian là một giây, sử dụng lũy thừa cơ số 2. (xem video liên kết). Tuy nhiên, khả năng là vô hạn, trên thực tế, không sử dụng ghép kênh có thể điều khiển tới 8 đầu ra độc lập, với ghép kênh, đầu ra có thể tăng lên tới 255 khả năng. Tùy thuộc vào ứng dụng, cho dù là ứng dụng tự động hóa gia đình, chúng ta có thể xử lý cổng mà không cần ghép kênh, đặt bộ đệm thích hợp để xử lý tải dòng điện cao hơn, điều này sẽ được đề cập sau trong một hướng dẫn khác.
Axelson J. Cổng song song hoàn chỉnh. Lập trình, Giao diện và Sử dụng Cổng máy in song song của PC. Amazon INC.. ISBN: 0-9650819-1-5
Kerrisk M. Giao diện lập trình Linux. Dự án trang hướng dẫn Linux. ISBN 978-1-59327-220-3
Tự động hóa gia đình là một hoạt động phức tạp vì một số lý do. Đầu tiên, hoạt động trên các thiết bị gia đình (cảm biến, thiết bị thông minh, bộ truyền động ...) giúp bạn có ý tưởng về các hiện tượng vật lý phức tạp, chẳng hạn như lượng tử cơ học hoặc hiệu ứng quang điện. Hơn nữa, một trong những thiết bị này có thể thực hiện nhiều nhiệm vụ khác nhau và không nhất thiết chỉ là một nhiệm vụ đơn giản. Thứ hai, nói về Tự động hóa gia đình là nói về các hệ thống được tạo thành từ nhiều thành phần khác nhau không phải lúc nào cũng tương tác dễ dàng (hãy tưởng tượng một hệ thống an ninh gia đình bao gồm camera video, máy dò sự hiện diện, thiết bị liên lạc, báo động với hệ thống cảnh báo từ xa, v.v ...). Cuối cùng, và quan trọng nhất, nó phức tạp vì nó đối mặt với sự tự động hóa của các hệ thống kỹ thuật với các hệ thống xã hội.
Định nghĩa các thuật ngữ
Cổng song song:
Cổng song song là giao diện giữa máy tính và thiết bị ngoại vi, có đặc điểm chính là các bit dữ liệu di chuyển cùng nhau, gửi một byte gói tin tại một thời điểm. Đường dẫn cáp hoặc vật lý cho mỗi bit dữ liệu được thực hiện bằng cách hình thành một bus gồm 8 đường. Thông qua cổng song song, chúng ta cũng có thể điều khiển các thiết bị ngoại vi như đèn, động cơ và các thiết bị khác.Giao diện web:
Giao diện web cho phép người dùng điều khiển và tương tác với các thiết bị của họ thông qua trình duyệt web. Giao diện này có thể được sử dụng để điều khiển từ xa, quản lý thư viện, phản hồi trực quan và nhiều mục đích khác.Tự động hóa nhà ở:
Đó là quá trình tự động hóa tất cả các hệ thống có khả năng tự động hóa ngôi nhà, cung cấp các dịch vụ quản lý năng lượng, an ninh, phúc lợi và truyền thông, và có thể được tích hợp trong các mạng truyền thông trong nhà và ngoài trời có dây hoặc không dây.Cách làm việc với Cổng song song trong C
Đối với mục đích chính của chúng ta, tự động hóa nhà ở cơ bản, chúng ta sẽ sử dụng cổng song song để trình bày cách chúng ta có thể ghi (hoặc đọc) một số byte để điều khiển các thiết bị đơn giản. Cổng song song của PC ECP Type có đầu ra loại DB25 cái có sơ đồ và tín hiệu có thể xem trong hình sau:Hình 1: Sơ đồ cổng song song. Sơ đồ chân đầu nối cái. Nguồn Wikipedia
Đầu ra cổng song song
Theo tiêu chuẩn Centronics, cổng song song của PC bao gồm một bus truyền dữ liệu 8 bit hai chiều, cộng với một tập hợp các đường cho giao thức. Các đường truyền thông tin có một bộ giữ giá trị cuối cùng được ghi vào chúng cho đến khi dữ liệu mới được ghi, các đặc điểm điện là:- Điện áp mức cao: 3,3 đến 5V.
- Điện áp mức thấp: 0 V.
- Dòng điện đầu ra tối đa: 2,6 mA.
- Dòng điện đầu vào tối đa: 24 mA.
Địa chỉ
Việc định địa chỉ cho một cổng song song tiêu chuẩn rất quan trọng do sự đa dạng của các tài nguyên mà nó sử dụng từ máy tính và cho mục đích nhận dạng. Cổng song song tiêu chuẩn sử dụng ba địa chỉ liền kề, thường nằm trong một trong các phạm vi sau:3BCh | 3BDh | 3BEh |
378h | 379h | 37Ah |
278h | 279h | 27Ah |
Địa chỉ đầu tiên trong phạm vi là địa chỉ cơ sở của cổng, còn được gọi là thanh ghi Dữ liệu hoặc chỉ là địa chỉ cổng. Địa chỉ thứ hai là thanh ghi Trạng thái của cổng và địa chỉ thứ ba là thanh ghi Điều khiển.
EPP và ECP dành riêng các địa chỉ bổ sung cho mỗi cổng. EPP thêm năm thanh ghi tại địa chỉ cơ sở + 3 đến địa chỉ cơ sở + 7 và ECP thêm ba thanh ghi tại địa chỉ cơ sở + 400h đến địa chỉ cơ sở + 402h. Đối với địa chỉ cơ sở là 378h, các thanh ghi EPP nằm ở 37Bh đến 37Fh và các thanh ghi ECP nằm ở 778h đến 77Fh.
Kênh DMA
ECP có thể sử dụng truy cập bộ nhớ trực tiếp (DMA) để truyền dữ liệu đến cổng song song. Trong quá trình truyền DMA, CPU rảnh tay để làm những việc khác, do đó truyền DMA có thể giúp tăng hiệu suất tổng thể. Để sử dụng DMA, cổng phải có một kênh DMA được chỉ định, trong phạm vi từ 0 đến 3.Truy cập Cổng Vật lý trên Linux
Vì phần cứng cổng trên PC được điều khiển trực tiếp bởi hạt nhân Linux, chúng ta phải truy cập một số tiêu đề liên quan đến bus cổng song song. Trình biên dịch GCC có thể truy cập các tiêu đề này, luôn lưu ý rằng người dùng phải có quyền root để tránh lỗi truy cập. Các tiêu đề này là:- stdio.h: "Tiêu đề đầu vào-đầu ra chuẩn" (standard header I/O) là tệp tiêu đề chứa các định nghĩa macro, hằng số, khai báo hàm trong thư viện chuẩn của ngôn ngữ lập trình C để thực hiện các hoạt động, đầu vào và đầu ra chuẩn, cũng như định nghĩa các kiểu cần thiết cho các hoạt động đó. Vì lý do tương thích, ngôn ngữ lập trình C++ (dẫn xuất C) cũng có triển khai riêng cho các hàm này, được khai báo với tiêu đề tệp cstdio. Hàm tôi phải sử dụng là fprintf cho phép in trên cửa sổ thiết bị đầu cuối nếu có bất kỳ lỗi nào.
- stdlib.h:Là tệp tiêu đề cho thư viện chuẩn của ngôn ngữ lập trình đa năng C. Nó chứa các nguyên mẫu hàm C để quản lý bộ nhớ động, kiểm soát quy trình và các chức năng khác. Nó hỗ trợ C++, nơi nó được gọi là cstdlib. Hàm tôi sẽ sử dụng là exit khi chúng ta gặp lỗi
- unistd.h: Tệp tiêu đề cung cấp quyền truy cập vào API hệ điều hành POSIX. Trên các hệ thống giống Unix, giao diện được định nghĩa bởi unistd.h thường được tạo thành phần lớn từ các hàm bao bọc lệnh gọi hệ thống như fork, pipe và các nguyên hàm I/O (đọc, ghi, đóng, v.v.).
- sys/io.h: Họ hàm này được sử dụng để thực hiện đầu vào và đầu ra cổng cấp thấp. Các hàm out* thực hiện đầu ra cổng, các hàm in* thực hiện đầu vào cổng; các hàm b-suffix là byte-width và các hàm w-suffix là word-width; các hàm _p-suffix tạm dừng cho đến khi I/O hoàn tất. Trong hàm họ này, tôi sẽ sử dụng outb.
Mã:
#include
#include
#include
#include
Trong Linux, rất dễ truy cập và kiểm soát cổng song song, tuy nhiên, quyền truy cập root phải được cân nhắc kỹ lưỡng. Trên đây là tất cả các thư viện cần thiết cho hướng dẫn của chúng ta ngày hôm nay.
Định nghĩa Địa chỉ Bộ nhớ cho Cổng Song song
Sau khi đã đưa các thư viện vào, chúng ta phải định nghĩa địa chỉ bộ nhớ được gán cho cổng song song, như đã đề cập ở trên, địa chỉ mặc định cho cổng song song đầu tiên là 0x378.
Mã:
#define base 0x378 /* parallel port base address */
Sử dụng Bus Dữ liệu làm Cổng Ra
Đối với hướng dẫn phần đầu tiên này, tôi sẽ sử dụng Bus Dữ liệu làm Cổng Ra. Trong chương tiếp theo, chúng ta sẽ xem cách sử dụng nó làm cổng để nhập dữ liệu hoặc thậm chí là cổng hỗn hợp. Trong hình ảnh bên dưới, chúng ta có thể thấy bộ điều khiển gồm 8 đèn LED được kết nối, thông qua các điện trở giới hạn dòng điện, tới cổng song song, phản hồi giá trị được gán cho địa chỉ 0x378. Giá trị của các điện trở có thể thay đổi từ 100 Ohm đến 300 Ohm, phần này rất quan trọng vì chúng ta có thể làm hỏng cổng nếu không giới hạn dòng điện.Sơ đồ
Lưu ý: Màu sắc của đèn LED không quan trọng.
Mạch thực
Thận trọng: Vui lòng cẩn thận khi xử lý đầu nối cổng song song, đảm bảo bạn không ngắt kết nối mạch trước khi tắt PC. Điều này có thể gây hư hỏng cho cổng hoặc thậm chí là Bo mạch chủ. Chúng tôi không thể cho rằng bạn có thể gây ra bất kỳ hư hỏng nào cho các thiết bị phần cứng của mình.
Triển khai phần mềm
Với mục đích của mình, tôi sẽ chỉ cho bạn cách đặt một số giá trị vào cổng và cách thực hiện thời gian của các giá trị đó, đây là một thói quen rất đơn giản để chỉ cho bạn cách thức hoạt động của nó.Bây giờ tôi sẽ giải thích tất cả các lệnh và từ được sử dụng trong phần mềm điều khiển:
- Bước 1: Điều kiện nếu người dùng có quyền root để truy cập vào cổng. Đối số cho lệnh có điều kiện này là ioperm lệnh này thiết lập các bit quyền truy cập cổng cho cơ sở địa chỉ cổng.
Mã:
if (ioperm(base,1,1))
- Bước 2: Nếu người dùng không có đủ quyền để truy cập vào cổng song song, lỗi truy cập sẽ được hiển thị và quá trình thực thi chương trình sẽ kết thúc.
Mã:
fprintf(stderr, "Access denied to %x\n", base), exit(1);
- Bước 3: Nếu quyền truy cập được cấp, thì vòng lặp for sẽ đưa ra chuỗi bật và tắt cho các đèn LED theo các giá trị được xác định trước để hiển thị trong cổng. Hàm thời gian tôi sử dụng là sleep() khiến luồng gọi ngủ cho đến khi số giây trong đối số trôi qua.
Mã:
w=0;
for (x=0; x=7; x++)
{
y=pow(2,w);
outb(y, base);
sleep(1);
w=w+1;
}
Khi quá trình xử lý mã vượt qua dòng được phép truy cập, 'fprintf (stderr, "Access denied to% x \ n", base), exit (1);', các chân dữ liệu của cổng song song sẽ có sẵn để bạn sử dụng và tưởng tượng. Trong trường hợp của tôi, tôi chỉ lấy một chuỗi đơn giản từ led đầu tiên đến led cuối cùng với khoảng thời gian là một giây, sử dụng lũy thừa cơ số 2. (xem video liên kết). Tuy nhiên, khả năng là vô hạn, trên thực tế, không sử dụng ghép kênh có thể điều khiển tới 8 đầu ra độc lập, với ghép kênh, đầu ra có thể tăng lên tới 255 khả năng. Tùy thuộc vào ứng dụng, cho dù là ứng dụng tự động hóa gia đình, chúng ta có thể xử lý cổng mà không cần ghép kênh, đặt bộ đệm thích hợp để xử lý tải dòng điện cao hơn, điều này sẽ được đề cập sau trong một hướng dẫn khác.
Tài liệu tham khảo:
Martin H, Saez F. Domotica, Un Enfoque Sociotécnico. Tháng 6 năm 2006. Fundación Rogelio Segovia para el Desarrollo de las Telecomunicaciones, Ciudad Universitaria, s/n 28040-Madrid, ISBN: 84-7402-335-1.Axelson J. Cổng song song hoàn chỉnh. Lập trình, Giao diện và Sử dụng Cổng máy in song song của PC. Amazon INC.. ISBN: 0-9650819-1-5
Kerrisk M. Giao diện lập trình Linux. Dự án trang hướng dẫn Linux. ISBN 978-1-59327-220-3