Pro tento účel, pokud pomineme speciální desky, se jeví nejlepší k použití standardní rozhraní tiskárny a sériových linek. Pomocí programového vybavení a vhodného hardware připojeného na standardní porty můžeme svůj počítač rozšířit o vstupy, výstupy, připojit AD převodník a pomocí něho měřit napětí, proudy snímat výstupy různých snímačů a čidel, případně připojit externí LCD displej. Příklady jednoduchých zařízení je možno najít na stránkách I2C Školky.
Port tiskárny - poskytuje 8 datových linek pro vstup nebo výstup dle režimu portu a
několik vstupních a výstupních linek.
Sériový port - poskytuje 5 vstupních a 3 výstupní linky.
Pro seznámení s prací s těmito porty pod DOSem doporučuji knihu „Využití rozhraní PC“ od Burkhard Kainka. V této knize je dobře a podrobně popsáno použití portů na různých příkladech. Příklady uvedené v knize jsou napsány v Turbo Pascalu a v Basicu.
Pokud chceme používat porty pod operačním systémem Windows existuje obdobná kniha „Využití rozhraní PC pod Windows“ od stejného autora. Probírá obdobné příklady jako pod DOSem, jen jako programovací jazyky jsou použity DELPHI a Visual Basic.
Použití sériových portů
RS232 porty jsou ve většině počítačů dva a využit je většinou jen jeden pro myš, případně žádný pokud je myš připojena přes zásuvku PS2 nebo přes USB. Dalším důvodem pro použití sériových portů pod Windows je jejich přímá podpora systémem mnoha funkcemi. Není zde popsáno využití sériových komunikačních portů v jejich základním použití, to je pro sériovou komunikaci, ale využití vstupu a výstupu v bitovém režimu. Pokud budeme chtít použít sériové porty pro sériovou komunikaci, bude nejlepší využít komponenty pro komunikaci, např: „ComPort Library“ od Dejan Crnila
Na Sériovém portu jsou k dispozici jsou tyto linky:
Vstupní
CTS
DSR
DCD
RING
Výsupní
RTS
DTR
TX
Pokud nevíte jak jsou jednotlivé linky rozloženy na konektoru, můžete se podívat na článek o rozhraní RS232.
API
Programy v knize „Využití rozhraní PC pod Windows“ využívají ke zprostředkování styku s porty knihovnu PORT.DLL. Tato sice usnadňuje programování, ve skutečnosti však také zakrývá skutečný postup přístupu k sériovým portům.
Ve Windows můžeme použít k přístupu k portům samozřejmě přímý přístup na hw porty, ale může se stát že Windows nám porty neuvolní, většinou pokud máme Windows novější než W98 . Proto je lepší využít systémových API funkcí pro obsluhu komunikačních portů, pak nemusíme znát ani fyzické adresy portů. Pokud využijeme API pro ovládání, program se nezkomplikuje ani nezvětší. Popis API funkcí je možno najít ke stažení třeba na stránkách LCC.
Program pro obsluhu sériových portů je na konci článku. Je vněm jen základní obsluha pro nastavení výstupních linek a přečtení vstupních.
Delay( )
Další problém, s kterým jsem se setkal při přechodu programování pod Windows je, že žádný programovací jazyk pro Windows nenabízí funkci, proceduru, Delay, tak jak jsem byl zvyklý z programování v Turbo Paskalu nebo C pod DOSem. Jediné, co je přímo použitelné je funkce Sllep(), při experimentování s ní jsem zjistil, že se nechová tak, jak bych si představoval, ale spíš asi vykonává něco jako VzavamSeCasuNa x milisekund. I časovač implementovaný v komponentách BCB se neprojevil jako nejlepší. Mezi API funkcemi se najdou funkce, které umožní potřebné prodlevy realizovat.
Jedná se o funkce :
- QueryPerformanceFrequency - vrací rozlišení tiku za sekundu.
- QueryPerformanceCounter - vrací hodnotu čítače, s frekvencí QueryPerformanceFrequency.
Vhodným použitím těchto API funkcí lze realizovat kýženou funkci Delay( ), a to
dokonce s větším rozlišením než v původní, a to na cca 1. mikrosekundu.
Výsledky testů na několika PC
WIN98:
QueryPerformanceFrequency=1193180
tj. rozlišení = 0,838 mikrosekund, prěsneji 1/1193180zakladní chyba, dvě čtení QueryPerformanceCounter okamžitě po sobě:
největší = 29 tiku 486/100MHz
nejmenší = 5 tiku PII/800Mhz
WIN2000
QueryPerformanceFrequency=3579000
tj. rozlišení = 0,279 mikrosekund, prěsneji 1/3579000zakladní chyba, dvě čtení QueryPerformanceCounter okamžitě po sobě:
největší = 5tiku Celer/750MHz
nejmenší = 3 tiku Celer/900Mhz
Další funkci, kterou jsem našel pro časování je časovač pro multimédia,
ten je zařazen v multimediálních API funkcích. Tento časuje po jedné milisekundě a po
prohlédnutí hlavičkového souboru pro multimédia, kde je tento časovač umí
pravděpodobně i další kousky.
Oba dva časovače, čítače jsou použity v přiloženém programu pro vytvoření funkcí:
- Wait_us( ); časuje s rozlišením jedné mikrosekundy
- Wait_ms( ); časuje s rozlišením jedné milisekundy
Pokud použijeme funkce tak, jak jsou zde napsány, je třeba počítat s tím, že po dobu jejich běhu není okno občerstvováno. Což při občasném osahavání hw připojeného na sériové rozhraní nemusí být na závadu. Pokud budeme chtít časování ještě vylepšit; můžeme funkcím zvýšit prioritu, případně spustit v samostatném vlákně. Samozřejmě můžeme pro časování použít i komponenty stažené z Internetu, tyto komponenty mohou poskytovat větší komfort i ovládání než zde uvedené funkce, ale jednodušeji to již asi nejde. Všechny zde uvedené funkce a programy jsou napsané v Borland C++Builder 5 Standard a odzkoušené pod WIN98.
Rozsvícení LED pomocí popsaných funkcí
Výpis finálního ovládacího programu :
int main(int argc, char* argv[]) |
Balík s rutinami si stáhněte v DOWNLOADU pod názvem portcom.zip
Případně můžeme realizovat I2C sběrnici a připojit si například nějaký HW například
ze stránky o I2C školce. Pokud budete zkoušet I2C nezapomeňte, že je
zapotřebí upravit napěťové úrovně z RS232 na úrovně vhodné pro sběrnici I2C, k
tomu můžete použít Převodník na I2C pro připojení PC přes COM.
Testovací program I2C TEST
Pro odzkoušení některých integrovaných obvodů můžete použít program I2C_TEST. Zatím jsou funkční jen první tři záložky. Původní program byl napsán v DELPHI s využitím PORT.DLL, po vypršení trial verze jsem si zakoupil BCB a program přepisuji s využitím API funkcí zde popsaných, takže ne vše je ještě funkční
Programy jsou freeware, co do užívání tak i šíření, za dodržení
platných zákonů a slušného chování. Je poskytován tak, jak je bez
jakýchkoliv záruk a používání je na vlastní nebezpečí.
Literatura a další informace
- WIN32.HLP
- Popis COMů a RS232
- Využití rozhraní PC, Burkhard Kainka
- Využití rozhraní PC pod Windows, Burkhard Kainka
- C++Builder, David Matoušek
- Udělejte si z PC, David Matoušek
DOWNLOAD & Odkazy
- I2C TEST - Testovací program - DOPORUČUJEME
- Portcom.zip - Příklad využití rutin blikáním LED
- i2c_ovladani_vypisy.html - Vypisy použitých rutin
- ComPort Library - komponenty pro komunikacis RS232 od Dejan Crnila
- WIN32.HLP - Popis API ke
stažení
- I2C Školka - Soubor zařízení na I2C
- Převodník na I2C pro připojení PC přes RS232
Copyright (C) 2001 Petr Stehlík