Fórum témák

» Több friss téma
Fórum » Soros port programozás
 
Témaindító: pakibec, idő: Márc 23, 2006
Témakörök:
Lapozás: OK   12 / 14
(#) kegyetlen19 válasza ha6qt hozzászólására (») Dec 7, 2013 /
 
A 6-os szám az 5 jelből ál, 1 hosszú és 4 rövid. Tehát én, ha jól emlékszem, 200 jelet tudtam adni-fogadni, nem 200 karaktert. Ez mindjárt kevesebb. Ha időm engedi majd, írok rá programot,/ha tudok/ és kipróbálom valahogy.
(#) ha6qt válasza kegyetlen19 hozzászólására (») Dec 7, 2013 /
 
Oksa, köszi. Most az oroszokra gondoltam, náluk tök átlagos a 150 karakter/perc. Én olyan 130-ig vagyok jó. Elvileg bírnia kell, simán kiszolgálta a soros port a 200 karakteres gépi adást is.
(#) ha6qt válasza ha6qt hozzászólására (») Dec 9, 2013 /
 
Láttam a prog.hu-n a hsz-edet.

Te most az MCP2200-al reléket kapcsolgatsz? Hány darabot tudsz vele vezérelni?

Találtam egy ilyet:

MCP Bay

Remélem nem raknak ki reklámozásért. Szerintem király így elkészítve a cucc, és from Hungary
(#) chipi hozzászólása Feb 4, 2014 /
 
Sziasztok!

Remélem jó témakörben teszem fel kérdésemet.
Arra keresem a választ, hogy van egy debug portom. 5v - RxD - TxD - GND - NC - NC
Ezt arra a portra milyen kábellel tudod rákapcsolódni?
Nokia DKU5 -s vagy Rs232 kábellel?
(#) Droot hozzászólása Ápr 23, 2014 /
 
Sziasztok!

Egy GSM modemmel szeretnék sorosporton kommunikálni mikrokontrollerrel. AT parancsokat küldök neki.
Egy fő probléma van, nem csak küldeni kell, hanem fogadni is.
Ha jól tudom erre vannak a CTS RTS lábak.
Nos a küldés jól működik, a fogadással vannak komolyabb gondjaim.
A fő probléma az hogy nem tudom hogy mikor akar adatot küldeni a modem.
A kérdéseim beszámozom, így egyszerűbb a válasz:
1. A modem a CTS lábát 1-es szintre emeli ha adatot szeretne küldeni?
2. Addig emeli 1-es szintre amíg sorozatosan küldi az adatokat? Pl ha azt küldené hog OK, akkor mivel két karakter kétszer van magas szinten vagy csak egyszer?
(#) watt válasza Droot hozzászólására (») Ápr 23, 2014 /
 
Ha megszakításban kezeled a vételt, akkor nem kell kézfogásos kommunikáció. Egyébként is, nem biztos, hogy a modem használja ezeket a vonalakat. Tehát kezeld megszakításban, időtúllépéses csomag kezeléssel. Az első karakter után, ha 3 karakternyi ideig nem jön adat, akkor az a csomag végét jelenti a korábban bejött karaktereket le tudod kezelni, ha van értelmük...
(#) Droot válasza watt hozzászólására (») Ápr 23, 2014 /
 
A megszakításos részt is teszteltem természetesen, de nem világos teljesen, mivel sehol sem találtam hasonlót. Az időtúllépéses csomagkezelésre nincs véletlenül egy kódod, amin megérthetem? ATmega8-al dolgozom.
(#) Droot válasza Droot hozzászólására (») Ápr 23, 2014 /
 
A CTS vagyis olyan láb működésében is erősítsetek meg, hogy melyik az ami egy bizonyos szinten van amíg karaktersorokat küld. Átgondoltam közben, azért jobb szerintem, mert pl sms küldésénél a GSM modulnak kell 1-2 másodperc amíg elküldi.
(#) watt válasza Droot hozzászólására (») Ápr 24, 2014 /
 
Szia! Kimondottan olyan kódom nincs, ami oktatási jelleggel tudná megmutatni a dolgot, ez csak egy módszer, amit implementálni lehet. Én PIC-ekkel foglalkozom, de szerintem ez másodlagos.
Használni kell egy timert, ami megszakítást okoz egy beállított idő után. Az időt az egy karakter vételéhez szükséges idő 3,5x-ére állítod (függ a BaudRate-től és a formátumtól (7, 8 bites, paritás stb.)). Amikor bejön az első karakter és vételi megszakítást okoz, letárolod a pufferbe, nullázod és elindítod a timert és kilépsz a megszakításból. Ha nincs több karakter a csomagban, akkor le fog járni a timer és megszakítást okoz, ekkor a puffert feldogozod. Ismeretlen hosszú, de csomagokban érkező adatok vételére ez a legjobb módszer, pl. a MODBUS is ezt használja.

A CTS-ről itt olvashatsz.: RS232

vagy itt: RS232_485
A hozzászólás módosítva: Ápr 24, 2014
(#) Droot válasza watt hozzászólására (») Ápr 24, 2014 /
 
9600baudon 8 bit és 1 paritásbit vételéhez mennyi idő kell?

Utánaolvastam angolul is magyarul is, találtam jelszint ábrákat is (pont az általad linkelt oldalt is elolvastam ), kérlek erősíts meg benne, hogy melyik láb kerül magas szintre ha karaktersorozatot küld a mikrokontroller felé.
(#) watt válasza Droot hozzászólására (») Ápr 24, 2014 /
 
Lehet, hogy egyik se kerül más szintre, mert az attól függ, hogy kezeli-e az eszköz. A kézfogásos protokoll le van írva a linkelt oldalon.
Az időt számold ki a baud sebesség adatból és a soros port kommunikáció jelidőkből, amiket a linkelt oldalon is olvashatsz.
(#) Droot válasza watt hozzászólására (») Ápr 24, 2014 /
 
Hát sokat nem segítettél, mert az eszköz kezeli, ezért erőltetem ennyire, mivel elég sokmindent kell majd tudnia egy timert meg akarok spórolni.
Az időt sem tudom hogy kell kiszámolni, ennyire nem vagyok profi.

Kiindulásnak erre jutottam:
9600 bit megy át egy másodperc alatt
egy karakter 11 bitből áll (start, stop, paritás)

9600 bit 1 másodperc alatt
0,00114583333333333333333333333333*3,5=0,00114583333333333333333333333333 sec alatt megy át 11 bit

0,00401041666666666666666666666666 sec-enként kell megszakítás=>249Hz?
A hozzászólás módosítva: Ápr 24, 2014
(#) watt válasza Droot hozzászólására (») Ápr 24, 2014 /
 
Nem ismerem az eszközödet, nem tudom mikor mit csinál. De tételezzük fel, hogy akkor jelez, ha adni akar. Akkor honnan tudod, hogy milyen hosszú a csomag, azaz mikor lesz vége? Vagy mindig ugyan annyi bájtot küld? Esetleg ismert a lezáró karakter? Mert ha igen, akkor időtúllépést sem kell megoldani és kézfogás sem kell.

Az időket akkor még is ki tudtad számolni(timeout=4msec), de a 249Hz-et nem igazán értem. A PIC-eknél van egy bemenő frekije a számlálónak, ez kis mértékben kötött, de nagyjából mindig be lehet állítani a szükséges tartományt. A számlálóba indításkor olyan értéket kell betölteni, hogy a túlcsorduláskor 4msec teljen el az adott bemenő freki esetén.
Ha nem így akarod megoldani, akkor nincs jobb ötletem. A 4ms-es várakozás kicsit gáz lenne, de vannak bizonyos esetek, amikor nem okoz gondot, csak ez ritkán van.
A hozzászólás módosítva: Ápr 24, 2014
(#) Droot válasza watt hozzászólására (») Ápr 27, 2014 /
 
Az a baj hogy a gsm modul sms küldésébél pl 1másodpercet vár kb. amíg elküldi és aztán küldi hogy ok, tehát időtúllépses kilőve. Viszont tud XON XOFF flow controlt. Nem tudom hogy esetleg ezzel meg lehet csinálni valahogy? Nem teljesen sikerült megérteni a működését.
(#) Hp41C válasza Droot hozzászólására (») Ápr 27, 2014 /
 
Abban a kontrollerben nincs véletlenül egy uart modul?
(#) watt válasza Droot hozzászólására (») Ápr 27, 2014 /
 
Az OK egy külön csomag. Szép lenne, ha addig várakozni kéne egy kontrollernek...
(#) Droot válasza watt hozzászólására (») Ápr 27, 2014 /
 
Nem tiszta hogy mire gondoltok. Nem mindig OK-ot küld... nem tudni előre, lehet ERROR vagy bármi más...
(#) watt válasza Droot hozzászólására (») Ápr 27, 2014 /
 
Bármikor küldi, bármilyen választ, nem kell addig ácsingózni. Az USART megszakítás (ha van ilyen a mikrokontrolleredben), megoldja a vételt bármikor és akkor le tudod kezelni a választ, amikor érkezik, bármilyen idő elteltével érkezik is. Nem kell kézfogásos kommunikáció, az nem erre való egyébként sem...
Igazából én sem értem mit nem értesz...
(#) Droot válasza watt hozzászólására (») Ápr 28, 2014 /
 
Elnézést, lehet, hogy bután írtam le. Van még pár kiaknázatlan rész az AVR-ekben (mint ez is) amivel még sosem kellett foglalkozni. Tehát adott egy SIM900 GSM modem, ami az AVR-el van összekötve, Rx, Tx, GND és szint van illesztve.
Nos, mondok egy példát.

Kiküldök egy adatot, hogy lekérjem az imeit:
  1. UARTSendTEXT("AT+GSN\r\n");


Erre szó szerint ezt válaszolja a GSM modul:
Idézet:
„AT+GSN<CR><LF>990000862471854<CR><LF><CR><LF>OK<CR><LF>”

Megjegyzés: A modemben ki lehet kapcsolni, a "send Echo funkciót", tehát az elején nem fogja visszaadni az AT+GSN parancsot, csak a többit. (Erre ugye nincs is szükségem, később ki is fogom kapcsolni.)

A cél az, hogy a mikrokontroller main függvényében legyen egy ilyen:
  1. char RxData=AT_Receive();

Az RxData tartalma a vétel után legyen ez: RxData="AT+GSN 990000862471854 OK";

Fontos: vételkor nem lehet arra támaszkodni, hogy OK-ot fog kiírni utolsó karakterként. Bármit írhat ki. Csak a CR LF karakterek biztosak amit küldenek.

Jelenleg USART megszakításban fogad. Az RxData tartalma ez: AT+GSN<CR><LF>990000862471854, de nekem szükségem van a teljes karakterhosszra, tehát az OK-ra is. Ami lehet ERROR, vagy mint írtam bármi más.

Az AT Command Set doksiban persze a 11. oldal 1.4-es pontjában benne van a <CR><LF> karakterek hogyanja, csakhogy mégis az OK és az IMEI között két CR LF van.
A hozzászólás módosítva: Ápr 28, 2014
(#) watt válasza Droot hozzászólására (») Ápr 28, 2014 /
 
Az Ok, vagy egyéb hiba után is van CRLF? Mindig CRLF-el van vége egy csomagnak?
pl. AT+GSN<CR><LF>990000862471854 OK<CR><LF>
(#) Droot válasza watt hozzászólására (») Ápr 28, 2014 /
 
Az Ok és a szám közt (vagy ok és bármi más közt mindig 2x van CR LF.
Pl.: AT+GSN<CR><LF>990000862471854<CR><LF><CR><LF>OK<CR><LF>
De az OK helyén lehet ERROR vagy bármi más, fontos hogy ha bármi más van azt is tudja kezelni, mert 0-24es üzemben fog menni a rendszer.
(#) watt válasza Droot hozzászólására (») Ápr 28, 2014 /
 
A fenti üzenetet 3 csomagként lehet kezelni.
AT+GSN<CR><LF>
990000862471854<CR><LF>
<CR><LF>OK<CR><LF>
Minden esetben a csomag vége CRLF

Simán kezelhető USART megszakításban, időfüggetlenül. Mindegy, hogy egyben, vagy külön jön...
(#) Droot válasza watt hozzászólására (») Ápr 29, 2014 /
 
Ez még eszembe sem jutott.
Írtam egy olyan függvényt, aminek két bemenete van: az egyik a fogadandó adatsorozat sorainak száma <CR><LF> karakterig, a másik a buffer amit feltöltsön vele. Hátránya: ha 3 sort küld és én 4-et akarok fogadni, beragad. Ezt majd egy timer-el megcsinálom.
(#) watt válasza Droot hozzászólására (») Ápr 29, 2014 /
 
Nem programoztam még AVR-t de meglepődnék, ha nem lehetne pont úgy, mint a PIC-eket. Írnék egy megszakítás rutint, amiben az USART megszakítást kezelném le. Ha megszakítás érkezik, eltárolnám a bejövő karaktert, növelném a puffer indexét, majd kilépnék. A következő karakternél ugyanígy. Az első kettő karaktert nem vizsgálnám, mert az OK előtt is van CRLF, csak az utána jövőket. Ha CRLF jött, akkor a pufferből átmozgatnám az üzenetet a megfelelő helyre(addigra az is kiderül, mit kaptam, tehát tudnám hová tegyem, de lehetne egy másik puffertömb a csomagoknak, ha utólagos feldolgozás kell), nulláznám a puffer indexet és várnám a többit ha jön. Időtúllépést azért bele tenném, nem nagy ügy és jól jön zavar esetén. Ennyi...
(#) Droot válasza watt hozzászólására (») Ápr 29, 2014 /
 
Köszönöm! Majdnem pontosan így csináltam. Annyi hogy (még) nézi az első két karaktert és ha cr lf jött akkor az RxEnd változó értéke 1, a main-ben pedig addig vár amíg az értéke nem lesz egy, majd feldolgoz...
Az időtúllépéseset majd beleteszem igen, de olyan 5 másodpercre gondoltam, ha addig nincs nullázva a timer counter akkor RxEnd = 1.
(#) Jason01 hozzászólása Júl 31, 2014 /
 
Üdv!
Visual basicben szeretnék soros porton keresztül adatokat küldeni PIC felé, a bökkenő csak annyi, hogy nincs a gépemen soros port, így amikor programból próbálok soros portot kezelni azt a hibaüzenetet kapom (nem meglepő módon ), hogy az nem létezik. Nézegettem a neten usb-soros port átalakítókat, és az lenne a kérdésem, hogyha egy ilyen átalakítót csatlakoztatok usb-re akkor a gép azt úgy fogja érzékelni, hogy egy soros port is van a gépen, vagy Visual basicben mindenképpen usb-ként kell kezelnem, és csak a pic programjában tuom használni az RS232 szabványt?
(#) zenetom válasza Jason01 hozzászólására (») Júl 31, 2014 /
 
Szia!
Szerencsére a gép úgy "érzékeli", mint ha valóban lenne egy soros port. Tehát VB-ből úgy éred el, mint egy rendes soros portot. Feltéve, hogy nem valami űbergagyi átalakítót sikerül kifognod (sajnos elég sok ilyen van a piacon).
(#) Jason01 hozzászólása Júl 31, 2014 /
 
Értem. Akkor majd igyekszem valami normálisat keresni Köszönöm a gyors választ!
(#) Topika válasza Jason01 hozzászólására (») Aug 1, 2014 /
 
Szia!
Én az MCP2200 IC-t használom. Ha közvetlenül kötöd a PIC-hez még a vonali illesztőket is megspórolod.
(#) steweo hozzászólása Aug 23, 2014 /
 
sziasztok, honnan tudnék nyákba ültethető soros portot szerezni?
Következő: »»   12 / 14
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem