Lập trình một cổng song song như I / O kỹ thuật số


7

Tôi đang cố gắng sử dụng một cổng song song từ máy tính như một dạng đầu ra kỹ thuật số giá rẻ để làm nhiều việc khác nhau (động cơ điều khiển, đèn LED, công tắc giới hạn đọc, ect).

Tôi muốn biết cách điều khiển 8 chân dữ liệu trên một cổng song song bằng C ++, tuy nhiên vẫn có một nhược điểm. Vì tôi đang sử dụng máy tính hiện đại với hệ điều hành hiện đại, điều này có một số vấn đề.

Trước hết, các hệ điều hành windows hiện đại không cho phép truy cập trực tiếp vào các chân cổng song song, tôi phải thông qua trình điều khiển. Tôi đã được chỉ định sử dụng Inpout32 để làm điều này, tuy nhiên chương trình mẫu được biên dịch và chạy đúng nhưng phần cứng đính kèm của tôi không đáp ứng. Một người khác đã chỉ cho tôi sử dụng Windows API. Tôi đã tìm kiếm MSDN và chỉ thấy đề cập đến chức năng phù hợp nhưng không có một số mã mẫu, tôi bị mất (có thể tôi đang tìm kiếm sai chỗ).

Vấn đề thứ hai là máy tính mới của tôi không có cổng song song. Tôi phải sử dụng USB để kết nối các cổng song song (giá rẻ và trực tiếp từ Trung Quốc, mỗi cổng 5 đô la, bao gồm phí vận chuyển và thuế). Các cổng được máy tính nhận ra là bộ điều khiển IEEE-1284 và trình điều khiển thích hợp được tự động cài đặt và máy tính báo cáo thiết bị là "hoạt động đúng". Từ những gì tôi đã thấy trực tuyến, dường như có rất nhiều ý kiến ​​về sự hữu ích của các đầu nối cổng USB song song này. Một người nói rằng nó hoạt động hoàn toàn tốt như bất kỳ cổng song song thông thường nào được hàn vào bo mạch chủ, một người khác nói rằng nó sẽ hoạt động với một số hack phần cứng, một người nói rằng nó có thể viết nhưng không đọc được, và cuối cùng một người khác nói rằng nó hoàn toàn không hoạt động vì chúng không được thiết kế để hoạt động giống như các cổng song song "thực".

Tôi đã thực hiện rất nhiều nghiên cứu trước khi đến đây (giống như một phương sách cuối cùng tôi đoán, StackOverflow không mang lại bất kỳ câu trả lời nào ngay cả sau khi áp dụng tiền thưởng). Gần như tất cả thông tin tôi tìm thấy trên các cổng song song lập trình đã lỗi thời và giả sử rằng bạn có một cổng song song trên bo mạch chủ của mình, HĐH trước Windows-NT hoặc cả hai.

Nếu bất cứ ai có ý tưởng làm thế nào để làm điều này, bạn có thể chia sẻ nó với tôi?

Cảm ơn,

-Faken

Lưu ý: Tôi đang chạy HĐH Windows 7 x64 trên Core i7 860. Tôi đang lập trình trong C ++ trên Visual Studio 2008 pro. Các đầu nối cổng USB sang song song được kết nối qua cổng USB 2.0.


Vì bạn đang sử dụng Windows phiên bản x64, hãy đảm bảo rằng bạn đang sử dụng phiên bản x64 của inpout32 ( highrez.co.uk/Doads/InpOut32/default.htmlm ).
timrorr

Đây là một phản hồi thực sự muộn, nhưng tôi có thể cung cấp cho bạn chính xác những gì bạn cần nếu bạn sẵn sàng chuyển sang một hệ điều hành dựa trên unix. Chỉ vài tháng trước, tôi đã viết mã C điều khiển các chân dữ liệu riêng lẻ trên cổng LPT1. Nó được viết để tôi có thể lập trình mô-đun bộ nhớ SPI từ máy tính vì vi điều khiển của tôi không có đủ bộ nhớ để thực hiện lập trình hàng loạt mà tôi muốn.
NickHalden

Câu trả lời:


8

Cổng song song đã chết và vi điều khiển USB thực sự là IMO trong tương lai. Nếu bạn sử dụng cấu hình HID hoặc CDC, bạn thậm chí không cần bất kỳ trình điều khiển nào trên PC. Ví dụ: Teensy với giá 18 đô la, bạn nhận được 25 I / O, trong đó tất cả có thể được sử dụng làm I / O kỹ thuật số hoặc tối đa 12 trong số chúng làm đầu vào tương tự và 7 trong số chúng là các kênh PWM. Teensy có mục đích chung hơn, nếu bạn muốn một cái gì đó đặc biệt để cung cấp liên lạc giữa PC và thiết bị điện tử của bạn, có những thiết bị khác được nhắm mục tiêu nhiều hơn, như Bus Pirate . Hoặc, nếu bạn không cần quá nhiều I / O, bạn có thể sử dụng chip USB FT232R tiêu chuẩn, khá đơn giản ở chế độ 'bit-bang' và nhận 8 I / O số.

Nếu bạn hoàn toàn từ chối lắng nghe lý do, thì cái bạn cần là thẻ PCI có thêm cổng song song, như cái này . Bạn sẽ cần một khe cắm PCI (không phải PCI-Express), hầu hết các bo mạch chủ vẫn có một ngày nay, nhưng chúng đang bắt đầu bị loại bỏ.

Bộ chuyển đổi USB sang Parallel sẽ có đủ loại vấn đề. Cái chính là độ trễ ... độ trễ cổng song song tiêu chuẩn được đo bằng micro giây, trong khi độ trễ USB được đo bằng mili giây. Một điều nữa là nhiều bộ điều hợp USB sang Parallel chỉ được thiết kế cho máy in và thiếu mạch bổ sung cần thiết để điều khiển riêng các dòng địa chỉ theo cách bạn muốn.


Độ trễ USB giống như hàng trăm micro giây, không phải mili giây. Các microfram USB tốc độ cao là 125 cái mỗi cái.
ajs410

Ok, không tệ như tôi nghĩ, nhưng quan điểm vẫn đứng vững. Điều gì xảy ra nếu bạn cố gắng sử dụng USB theo cách bạn sẽ làm một cổng song song và gửi một byte mỗi lần? 1 byte * (1 giây / 125 micro giây) = 8000 byte mỗi giây. Và thậm chí còn tệ hơn nếu bạn nói cố gắng thực hiện SPI, từng chút một, thay vì một cái gì đó có thể xử lý toàn bộ một byte cùng một lúc. Để sử dụng USB hiệu quả, bạn cần một số logic ở đầu bên kia có thể xử lý việc gửi các khối dữ liệu cùng một lúc và logic của bạn ở phía PC phải được thiết kế để không cần phản hồi sau mỗi byte (hoặc bit).
davr

Vậy tôi có thể điều khiển tối đa 8 chân I / O trực tiếp từ phần mềm từ CPU không? Tôi có thể giao tiếp nhiều hơn 1 trong số các chip này từ cùng một chương trình, mở rộng hiệu quả số lượng chân I / O có sẵn không?
Được thực hiện vào

1
Một điều khác cần xem xét liên quan đến USB là độ trễ không cố định.
Sói Connor

8

Với công nghệ hiện tại, nếu bạn muốn hoạt động trên một số tín hiệu I / O riêng biệt, cách tốt nhất của bạn là sửa lại một bộ vi điều khiển USB chuyên dụng hoặc một bộ vi điều khiển tiêu chuẩn kết hợp với giao diện USB-to-232 của FTDI.

Các cổng song song trường học cũ có nhiều loại khác nhau và không phải tất cả đều có thể nhập liệu, vì cổng này được thiết kế chủ yếu để gửi dữ liệu đến máy in. Chỉ có một vài dòng bắt tay thực sự dành riêng cho đầu vào. Nếu bạn thực sự muốn sử dụng cổng song song USB, bạn nên tìm các biến thể EPP hoặc ECP, vì đây là loại hai hướng.


3

Thực tế là bạn đang cố gắng làm điều này trên Windows làm phức tạp thêm vấn đề. Tương tác trực tiếp với phần cứng, trong khi không phải là không thể, thì HAL rất phức tạp. Tôi đã thực hiện điều này trong Linux bằng thư viện parapin, nhưng đó là trên một máy cũ hơn có cổng song song thực sự trên bo mạch chủ.

Nhìn vào các ghi chú cho pyParallel dưới các cửa sổ , có vẻ như cần trình điều khiển choio, quy định việc sử dụng bộ chuyển đổi USB -> Parallel.

Tôi sẽ phải đồng ý với Jeff và Joby ở trên. Đi lấy một Arduino hoặc một số vi điều khiển khác và giải quyết vấn đề theo cách đó.


Chỉ cần xem bài đăng này [1] trên blog SparkFun về việc sử dụng FT232R cho I / O băng tần bit. Đây có lẽ là cách rẻ nhất để tìm thứ gì đó sẽ giao tiếp qua USB. [1] sparkfun.com/c
Commerce//news.php?id=386

1

Bạn có thể tốt hơn với một Arduino. Sau đó, bạn có thể giao tiếp với ứng dụng PC của mình qua liên kết RS232.

Nó không đắt hơn nhiều so với bộ chuyển đổi cổng song song USB.


1

Tôi muốn thêm rằng tất cả các bộ chuyển đổi USB sang bộ điều hợp cổng song song mà tôi đã gặp không mô phỏng cổng song song, chúng mô phỏng một máy in qua USB và do đó không thể được sử dụng cho các chân IO riêng lẻ của chúng. Có lẽ có một số người làm điều này theo cách bạn muốn nhưng chắc chắn bạn sẽ tốt hơn với giải pháp USB IO với nhiều IO hơn như IO-Warrior hoặc Arduino.


1

Bạn có chắc chắn đã nối đúng thiết bị của mình với cổng song song không? Bạn đã có được một pinout, móc lên mặt đất, vv? Tôi sẽ nhận được một oscope hoặc DMM, sau đó chuyển đổi tất cả 8 bit dữ liệu khi bạn nhấn một phím trên bàn phím và thử xem ít nhất điều đó xảy ra.

Bạn đang sử dụng đúng địa chỉ? Địa chỉ mặc định cho các cổng song song được hàn bo mạch chủ (0x378, tôi tin) có lẽ sẽ không hoạt động. Bạn nên đi qua nút Cổng của Trình quản lý thiết bị (COM và LPT), tìm USB-> bộ điều hợp song song, tab Tài nguyên và tìm địa chỉ cơ sở cho bộ điều hợp của bạn.


0

Các thiết bị USB không có địa chỉ cơ sở, chúng không phải là một phần của không gian địa chỉ của CPU, giống như một máy chủ trên internet không phải là một phần của không gian địa chỉ của bạn.

Và mọi thứ về USB cho các bộ điều hợp song song đã được nói trong guồng quay này, chúng thường không hoạt động cho bất cứ điều gì ngoài việc in ấn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.