RS-232: DTR, RTS get, set, clear

 ( karika200 | 2009. június 16., kedd - 18:45 )

Üdv!

Találtam itt a fórumon is a témában dolgot, meg másmerre is egy csomó soros port kezelő programot, de nem jöttem ár belőle igazán arra ami kell. Építettem egy hőmérőt soros portra. A HW működik is tutira, mert van hozzá vindózos programom azzal tökéletesen kitudom olvasni az értékeket belőle.. Most azonban egy linuxos programot akarok hozzá írni a már meglévő vindózos alapján. A vindózos program alapja igazából az RTS és a DTR lábak ki és bekapcsolgatása, és ezt szeretném lemásolni Linuxon C-be. ioctl függvénnyel próbálkoztam, de csomó helyen láttam/hallottam, hogy ez már elavult és van helyette vmi más mostmár.. De nemigazán vagyok otthon soros port programozásban linuxon, úgyhogy nem tudom mi lenne az egyszerű, modern, működő megoldás az RTS és a DTR állapotának lekérdezésére, valamint a ki és bekapcsolására. Aki foglalkozott már ilyennel és tud okossat, ne fogja vissza magát ;]

Köszi, karika200

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

up

Én sok sorosportos meghajtást írtam linux alá.
Tömegspektrométer, különféle mérlegek, elektronikák, stb.
A beolvasást poll() - read() párossal végzem, az irás pedig
sima write(); mingyá nézek valami kis anyagot azt kiteszem
az ftp-re.

> Sol omnibus lucet.

No, akkor:

protokol: ftp
domain: meditor.hu
user: public
passwd: egy üres [enter]

cd ./c_examples és itt a ZeroPage.tar.gz

Ez egy soros kommunikációt mutat be, ami
tömegspektrométerhez készült. A feladat általánosan
van megfogalmazve, a ZeroPage-re ráépülő szoftver
megosztott memórián keresztül eteti illetve olvassa a puffereket, és a ZeroPage-t signállal kell rávenni
különböző dolgokra.

Az anyag tartalmazza a NI_USB-6008-as mérőkütyüvel
való kommunikációt is, ez ne zavarjon senkit, nyugodtan
ki lehet hagyni az olvasgatását.

Üdv: meditor
> Sol omnibus lucet.

Nézem is, köszi ;]

Én is letölthetem?

Ui: Letöltöttem. Előre is köszönöm.

megtiltom!

Elkéstél. Azért kérdeztem, mert elrontottam a nevet public helyett pubic-ot írtam, és nem tudtam belépni.

hmm, ez nem egésszen az amit én szeretnék:| EZ simán csak read-el olvasgatja a portot.
Építettem egy hőmérőt, DS1621-es IC-vel. Egész pontossan ezt: http://users.atw.hu/home-elektro/project/pc_thermometer/pc_thermometer.htm
Van hozzá egy kész vindózos programom pascalban. Az a program a DTR és az RTS ki-be kapcsolgatásával olvassa le az adatokat az IC(k)ről. EZt a programot szeretném lemásolni C-ben. Ki-be szeretném kapcsolgatni az RTS-t illetve az DTR-t, és lekérdezni az állapotaikat:$

Linuxra is van ilyen. Fedora pl. csomagból tartalmazza.
Digitemp a neve.
http://public.rz.fh-wolfenbuettel.de/~hamannm/general/digitemp.html

Én is leszedtem, köszi!

Nézd meg ezt: SLED! Az RTS és DTR húzogatásával ledeket kapcsolgat. Pár sor az egész.

Ahh, ez elég jófélének tűnik, köszi ;] Szerintem ezen el tudok indulni

Nos.. köszönöm a segítséget mindenkinek, amire kiváncsi voltam azt igazából megtudtam :) Most azonban egy másik problémám van, de ugyan ezzel a projecttel. Van egy VB-ben írt program a hőmérőmhöz, amit át akarok írni gnu C-re. Át is írtam, de valamiért nem igazán működik a dolog úgy ahogy kellene... Ha esetleg vetne rá vki egy pillantást, és esetleg rámutatna néhány hibára azt megköszönném ;]

A két fajta forrás itt érhető el: http://home.sinuslink.hu/stuff/thermosoft/

A Visual Basices program 100%, hogy működik ahogy kell.

Hogy nem működik, mi nem működik, mi a jelenség a VB-hez
képest, stb.
> Sol omnibus lucet.

Az nem működik, hogy nem kapom meg a konkrét hőmérséklet értéket, ellenben a VB programmal :) most épp ott tartok h 0.00000-kat kapok egyfolytában:/

karika200@karika200-p4:~/prog/c/homero$ ./homero
Hőmérséklet: 0.000000 °C
karika200@karika200-p4:~/prog/c/homero$

Igy elso korben: Serial Programming example, kulonos tekintettel a sebessegallitasra, paritasra, meg egyebekre.
Aztan kezdd szepen megcsinalni a protokollt. Nem kell sztem ennyire szetvagdalni fuggvenyekre, egyelore a portkezelest csinald a main-bol, ugy konnyebb debuggolni. A protokollkezeleshez kell uj fgv csak.

--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Fentebb irtam hogy van direkt 1-wire hőmérőkhöz linuxos kiolvasó. Abból is kilehetne indulni, vagy azt használni, ha az is jó.

hu, bocsi, igazad van, el is kerülte a figyelmemet:$ Megnéztem közbe, akár még jó is lehet, bár másféle IC-khez van benne support, de alapnak jólehet. A sorosport példákkal meg igazából előrébb nem jutok, mert a soros port kezelés része a programnak működik, mert a két lábat tudom ki be kapcsolgatni, emrt rátettem egy ledet és tökéletesen kapcsolgatta a program rá a feszt :)

Nos, megoldódott a probléma. Igazából a kód a jelenlegi állapotában működőképes és jó értékeket ad vissza:

karika200@karika200-p4:~/prog/c/homero$ ./homero
Hőmérsékletek:
Benti: 23.000000 °C
Kinti: 15.000000 °C

Bár a tizedesek még nem stimmelnek de ez már csak részletkérdés. Érdekes egyébként a dolog.. Szedtem egy serial port sniffert és elindítottam, hogy megnézzem hol akad meg a kommunikáció. Mikor lefuttattam a hőmérőmet, hogy kezdje el a beszélgetést, akkor már jó értékeket adott vissza, és azóta ok.. :)

Köszönöm a sok segítséget mindenkinek :)

Akkor most jon a reboot es proba, mert lehet, hogy a serial sniffer rakott rendbe valami elvadult beallitast.
--

()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

(dupla, torolve)