Elektroda.pl
Elektroda.pl
X
Computer ControlsComputer Controls
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programowanie wirtualnych portów i płytek testowych w laptopie

17 Maj 2014 12:02 1185 6
  • Poziom 9  
    Witam, zacznę od tego, że mam zamiar programować wejścia w laptopie (Najlepiej C++ bo znam tylko ten język) tak, aby móc sterować np. kilkoma diodami, silnikami krokowymi oraz odbierać sygnały zewnętrzne jak opór, napięcie itp. Oczywiście w nowych laptopach jedynymi takimi wejściami są wejścia USB (kiedyś próbowałem robić to z jackami, ale jest to niewygodne, bo napięcie w jacku jest przerywane z pewną częstotliwością). Wyczytałem w internecie, że nie ma sensu programować USB, ponieważ jest to zbyt trudne, poza tym potrzebna jest elektronika zewnętrzna, która odpowiednio zinterpretuje sygnał USB i poda żądane przeze mnie napięcie na pinach.
    Dowiedziałem się, że istnieje coś takiego jak porty wirtualne, które symulują jakiś łatwo programowalny port (np LPT lub RS232). Od którego łatwiej zacząć i jakie mają one wady i zalety? Oba te porty mogą służyć jako odbiornik parametrów różnych czujników?
    Mam jeszcze pytanie co do płytek testowych. Mianowicie czy jest możliwe rzeczywiste sterowanie pinami płytki z komputera poprzez np C++, czy zaczyna ona działać samodzielnie dopiero po zaprogramowaniu i nie jest ona zależna od komputera, do póki nie będę chciał wprowadzić innego kodu?
  • Computer ControlsComputer Controls
  • Poziom 39  
    Port USB jak sama nazwa wskazuje jest portem Uniwesalnym. Jednakże bez zewnętrznego urządzenia (USB Device,/USB Host) jest to w sumie tylko "magistrala danych".
    Zanim zaczniesz "programować wirtualne porty", dobrze byłoby abyś określił wymagania jakich żądasz - między innymi:
    - czy to mają być dane cyfrowe, analogowe, mieszane,
    - jaka jest maksymalna częstotliwość próbkowania wejść/sterowania wyjściami,
    - w jaki sposób gromadzić i przetwarzać dane wejściowe/wyjściowe.
    Z twojej wypowiedzi nie można tego wywnioskować.
    Do zwykłego sterowania portami I/O cyfrowymi - wystarczy prosty interfejs HID zrealizowany na Atmega, czy innym MCU.
    Do specjalistycznych zastosowań (RS232, ISP, I2C, ...) są specjalne układy scalone (FT232, FT245... ).
    Opinia o skomplikowanej obsłudze USB zależy od tego - jak tą obsługę rozumiesz.
    Sterowanie portami I/O jest banalne... ale np. przesyłanie streamu z tunera DVB-T w wersji USB (sam mam taki) już "banalne" nie jest.
  • Computer ControlsComputer Controls
  • Poziom 9  
    Na pewno nie chciałbym wydawać dużo kasy, to jest wiadome. Zwykła przejściówka na LPT czy RS232 nie jest droga, a laptop i środowisko programistyczne już posiadam.
    Napiszę więc wszystkie wymagania jakich oczekuję:
    -Wolałbym dane analogowe, jednak nie kosztem trudu - jeżeli jest to skomplikowane, zacznę od danych cyfrowych.
    -Maksymalna częstotliwość próbkowania, czyli największa możliwa częstotliwość zmiany napięcia lub odbierania sygnału z pinów? Nie mam konkretnych wymagań, ponieważ dopiero wkraczam w programowanie portów. Jednak nie mogą być one zbyt wolne, myślę że na początek 100Hz spokojnie wystarczy.
    -Dane wejściowe przetwarzać i przechowywać oczywiście na komputerze. Chciałbym mieć cały czas dostęp do portu. Na przykład program C++, który za pomocą biblioteki fstream zapisuje w czasie rzeczywistym odebrane dane z portu do pliku "przykład.txt" i równocześnie steruje odbiornikami podłączonymi do niego (np jakieś silniki krokowe).
    -Tak jak mówiłem na początku, chciałym aby port był zdolny do odbioru takich parametrów jak napięcie, i opór. Przynajmniej tego drugiego.
  • Poziom 28  
    Ale i tak żeby port odebrał jakieś parametry np: wartość napięcia to musisz mieć jakiś układ który wyśle tę wartość do tego portu.
  • Poziom 39  
    Widzę, że nie zrozumiałeś.
    USB to tylko magistrala do przesyłania informacji z punktu A (urządzenie zewnętrzne) do B (komputer/laptop) i z powrotem.
    Pytanie brzmi: jakie urządzenie masz na myśli konkretnie.
    Nie pisz, "ADC, opór, napięcie, silniki krokowe i coś tam jeszcze... " ?.
    Napisz konkretnie - chce sterować silnikiem krokowym + 2diody LED, albo:
    Chcę mierzyć temperaturę przez USB.
    Wtedy będziemy w stanie coś odpowiedzieć.
    W przeciwnym razie można by cię wprost odesłać do specyfikacji USB. Tam jest wszystko "od sasa, do lasa".
  • Poziom 9  
    mi14chal oczywiście że tak. To były tylko przykłady.

    Na początek nie ma większego znaczenia jak dokładnie zaprogramuję, ale ważne że to będzie jakikolwiek port. Nigdy wcześniej tego nie robiłem. Jeżeli uczę się czegoś nie mam konkretnego celu (ewentualnie marzenia), bo jak na razie nic poważnego nie zrobię. Mogę podać ci pierwszy lepszy pomysł, z którego byłbym zadowolony gdyby się udało. To na prawdę nie ma znaczenia co.
    Przykład 1.
    Załóżmy że chcę, aby po kliknięciu/wpisaniu w konsole cyfry 1, zostało doprowadzone napięcie stałe do pierwszego odbiornika (np diody), po kliknięciu cyfry 2, do drugiego odbiornika, po kliknięciu tójki napięcie na obu odbiornikach spada do zera.
    Przykład 2.
    Jeżeli opór rezystora jest mniejszy niż 1kohm to napięcie doprowadzane jest do odbiornika pierwszego, w przeciwnym wypadku do drugiego.

    Tak jak mówię, wymyśliłem to na szybko, ponieważ w tym momencie nie ma dla mnie znaczenia jak zaprogramuje port - chcę się nauczyć. Oczywiście miałem różne pomysły typu, jeżdżący robot(Laptop na podwoziu), który analizuje obraz z kamery(mam to już za sobą), tworzący mapę pokoju, ale najpierw chce się nauczyć podstaw programowania portów dlatego nie chcę od razu mówić co chcę uzyskać.
  • Poziom 39  
    matka5432 napisał:
    ponieważ w tym momencie nie ma dla mnie znaczenia jak zaprogramuje port
    Ale ma to znaczenie dla portu. :)
    Dla pomiaru rezystancji - musisz nie dość, że użyć port analogowy (przetwornik ADC) to jeszcze przetworzyć napięcie na rezystancję.
    Musisz wybrać układ, który ma przetwornik ADC i "z drugiej strony" port USB, który podłączysz do PC, prawda?
    Przykłady z mikrokontrolerami AVR: http://www.obdev.at/products/vusb/prjall.html
    Podobne znajdziesz dla PIC czy ARM.
    Przeglądnij sobie i poczytaj. Ta implementacja portu USB jest dość prosta (z drugiej strony ograniczona). Coś za coś.