Ovladanie RS232 v jazyku C
Moderátori: psichac, Moderátori
-
- Stály člen
- Príspevky: 126
- Dátum registrácie: 31 Mar 2012, 12:12
- Bydlisko: Spišská Nová Ves
- Vek: 29
Ovladanie RS232 v jazyku C
Zdravím, chcel by som sa opýtať, či by ste nevedeli poradiť nejakú literatúru alebo odkazy na nejaký návod ako ovládať komunikačné rozhrania RS232 alebo USB pomocou jazyka c (na počítači v OS windows, nie v MCU).
0
Re: Ovladanie RS232 v jazyku C
idealne v c# vyvojove prostredie mas zadarmo a navody tu v c++http://msdn.microsoft.com/en-us/library/ff802693.aspx alebo tu v c# http://msdn.microsoft.com/en-us/library ... .110).aspx alebo google do nemoty
0
“Nice looking” circuit construction doesn't always equate to good circuit performance.
http://www.arrl.org/files/file/Product% ... pter_1.pdf
Na predaj: p-bfx-predava-kto-zavaha-prerobi-t41148.html
http://www.arrl.org/files/file/Product% ... pter_1.pdf
Na predaj: p-bfx-predava-kto-zavaha-prerobi-t41148.html
Re: Ovladanie RS232 v jazyku C
dobru zaciatok tuna ... http://msmvps.com/blogs/coad/archive/20 ... 39466.aspx
0
“Nice looking” circuit construction doesn't always equate to good circuit performance.
http://www.arrl.org/files/file/Product% ... pter_1.pdf
Na predaj: p-bfx-predava-kto-zavaha-prerobi-t41148.html
http://www.arrl.org/files/file/Product% ... pter_1.pdf
Na predaj: p-bfx-predava-kto-zavaha-prerobi-t41148.html
Re: Ovladanie RS232 v jazyku C
z tohoto som sa učil ja:
Kód: Vybrať všetko
http://ap.urpi.fei.stuba.sk/ap/blok3.php
- Washu
- Power user
- Príspevky: 4521
- Dátum registrácie: 15 Apr 2010, 00:00
- Bydlisko: Multiverse
- Vek: -1998
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
Dovolim si rozsirit otazku trocha dalej. Poradte prosim podobne zaciatocnicke priklady pre TCP/IP komunikaciu.
Ako otvorit port TCP alebo UDB, odoslat data prijat data, zavriet port.
Ako otvorit port TCP alebo UDB, odoslat data prijat data, zavriet port.
0
It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong
(Richard Feynman)
(Richard Feynman)
- daqq
- Power user
- Príspevky: 2528
- Dátum registrácie: 10 Jún 2008, 00:00
- Bydlisko: Bratislava
- Vek: 36
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
jaromir: Prave na tom teraz robim: pre .NET velmi pekne a jednoducho funguje trieda TcpListener . Je k tomu viacero vysvetleni, jedno z nich : http://www.codeproject.com/Articles/241 ... cpListener
0
Outsource your thinking: Get religious!
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.
- daqq
- Power user
- Príspevky: 2528
- Dátum registrácie: 10 Jún 2008, 00:00
- Bydlisko: Bratislava
- Vek: 36
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
sorry, neviem preco som si vas zmylil.
0
Outsource your thinking: Get religious!
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.
Zistenie: Ked robite sucasne v C, C++, C#, Matlabe, trocha pokukujete po VHDL, sialenstvo nemoze byt daleko...este stastie, ze som lietadlo a nemam tieto problemy.
-
- Stály člen
- Príspevky: 175
- Dátum registrácie: 25 Apr 2010, 00:00
- Vek: 12
Re: Ovladanie RS232 v jazyku C
Temu vyuzijem aj ja ...
na strane MCU mam spravenu komunikaciu v style ringbuffer. Posiela 3x8bitove cislo kde.
1)cislo - prefix
2)cislo 8bitova hodnota(uint8_t) <- uint16_t
3)cislo 8bitova hodnota(uint8_t) <- uint16_t
zistil som ze problemom je strana PC, kde pouzivam comPort v C#.
Nijakym normalnym sposobom sa mi nedari cez eventhander __DataReceived prijat a vhodne spracovat data, respektive dve osembitove cisla dat do 16bitovej premennej a vlozit do textboxu.
dat(8 bitovych premennych) bude prijatych 450...
na strane MCU mam spravenu komunikaciu v style ringbuffer. Posiela 3x8bitove cislo kde.
1)cislo - prefix
2)cislo 8bitova hodnota(uint8_t) <- uint16_t
3)cislo 8bitova hodnota(uint8_t) <- uint16_t
Kód: Vybrať všetko
uint16_t memory[xyz]
uint8_t prefix = 0x57;
...
if(uart_putchar(_prefix))
buffer = (uint8_t)(memory[loop]);
if(uart_putchar(buffer))
buffer = (uint8_t)(memory[loop] >> 8);
if(uart_putchar(buffer))
Nijakym normalnym sposobom sa mi nedari cez eventhander __DataReceived prijat a vhodne spracovat data, respektive dve osembitove cisla dat do 16bitovej premennej a vlozit do textboxu.
dat(8 bitovych premennych) bude prijatych 450...
0
- dxr
- Ultimate člen
- Príspevky: 3968
- Dátum registrácie: 05 Aug 2013, 20:21
- Bydlisko: V strede nicoho
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
Jej konecne niekto co pouziva ring-circle buffer
Ak mas problem presunut binarne data skus to skonvertit do 0xhexa a poslat mozno mas problem s chr(0)
NULL znakom v library ? na strane PC (napr prvy znak horny bude NULL cize za tym uz C libka nekuka konec stringu
Ja napr nepouzivam vobec binarne posielanie dat ale len Hexa (co je podstate 7bit) je to kvoli lahsiemu stavovemu stroju 0-az-F mas data
chr(S) start a chr(X) end chr(R) reset stroja
a takto to pekne beha akurat 2+2*pocet dat ale to kaslem pri 9600 aj tak nejdem rychlo
a Washu uz debuguje TCP ze ?
Ak mas problem presunut binarne data skus to skonvertit do 0xhexa a poslat mozno mas problem s chr(0)
NULL znakom v library ? na strane PC (napr prvy znak horny bude NULL cize za tym uz C libka nekuka konec stringu
Ja napr nepouzivam vobec binarne posielanie dat ale len Hexa (co je podstate 7bit) je to kvoli lahsiemu stavovemu stroju 0-az-F mas data
chr(S) start a chr(X) end chr(R) reset stroja
a takto to pekne beha akurat 2+2*pocet dat ale to kaslem pri 9600 aj tak nejdem rychlo
a Washu uz debuguje TCP ze ?
0
-
- Stály člen
- Príspevky: 175
- Dátum registrácie: 25 Apr 2010, 00:00
- Vek: 12
Re: Ovladanie RS232 v jazyku C
Chyba je viac-menej na strane PC (C#) , tu su prijate data z Realtherm
ku prikladu: 87 - prefix , 153 - prva hodnota, 5 - druha hodnota , vysledok ako uint16_t = 1433
atd, cisla vyjdu pekne, problem je ako to spracovat v C#, tam mam pocit ze to orezava, respektive
ako string, po volani serialPort.ReadExisting() .
... skusim to prepisat do C++, a skontrolovat tam...
Kód: Vybrať všetko
87 153 5 87 238 5 87 240 5 87 240 5 87 238 5 87 234 5 87 236 5 87 232 5 87 231 5
87 227 5 87 226 5 87 225 5 87 222 5 87 217 5 87 217 5 87 214 5 87 216 5 87 214
5 87 214 5 87 214 5 87 214 5 87 214 5 87 209 5 87 209 5 87 211 5 87 207 5 87 214
5 87 206 5 87 207 5 87 209 5 87 202 5 87 203 5 87 206 5 87 201 5 87 207 5 87 20
2 5 87 203 5 87 203 5 87 206 5 87 207 5 87 206 5 87 206 5 87 209 5 87 203 5 87 2
09 5 87 206 5 87 203 5 87 206 5 87 206 5 87 214 5 87 210 5 87 214 5 87 214 5 87
214 5 87 217 5 87 218 5 87 222 5 87 224 5 87 226 5 87 226 5 87 233 5 87 235 5 87
243 5 87 247 5 87 251 5 87 254 5 87 6 6 87 11 6 87 17 6 87 22 6 87 30 6 87 47 6
87 46 6 87 49 6 87 57 6 87 67 6 87 73 6 87 78 6 87 86 6 87 90 6 87 98 6 87 106
6 87 112 6 87 118 6 87 129 6 87 134 6 87 139 6 87 145 6 87 153 6 87 158 6 87 166
6 87 174 6 87 179 6 87 185 6 87 192 6 87 198 6 87 207 6 87 211 6 87 219 6 87 22
4 6 87 231 6 87 236 6 87 244 6 87 251 6 87 3 7 87 19 7 87 18 7 87 25 7 87 32 7 8
7 36 7 87 47 7 87 56 7 87 63 7 87 71 7 87 76 7 87 87 7 87 178 5 87 230 5 87 222
5 87 230 5 87 231 5 87 226 5 87 226 5 87 223 5 87 224 5 87 222 5 87 219 5 87 217
5 87 215 5 87 214 5 87 214 5 87 214 5 87 214 5 87 208 5 87 209 5 87 208 5 87 20
9 5 87 208 5 87 207 5 87 198 5 87 207 5 87 206 5 87 206 5 87 203 5 87 203 5 87 2
02 5 87 199 5 87 194 5 87 201 5 87 201 5
atd, cisla vyjdu pekne, problem je ako to spracovat v C#, tam mam pocit ze to orezava, respektive
Kód: Vybrať všetko
"WW\"W)W1W7W>WCWJWQWYW^WgWnWwW~W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W\aW\b\aW\aW\aW\aW(\aW*\aW2\aW<\aWI\aWL\aWR\aW_\aWg\aWj\aWs\aW?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?W?"
... skusim to prepisat do C++, a skontrolovat tam...
0
- dxr
- Ultimate člen
- Príspevky: 3968
- Dátum registrácie: 05 Aug 2013, 20:21
- Bydlisko: V strede nicoho
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
povedal by som ze Unicode/UTF-8 encode? kazdy bajt co posles este encodtni na 16bit char tam asi bude pruser
zacni tym ze posles len nejaky presne definovany string a to skus odsledovat (respektive fixnu skupinu bajtov)
este dalsie moznosti problemu nemas rovnako nastaveny frame a speed na PC dostavas bordel
skusas to citat ako string a nie char zase dostanes bordel kvoli encodingu
mozno sa ti bude hodit DiscardNull ale asi toto bude problem
zacni tym ze posles len nejaky presne definovany string a to skus odsledovat (respektive fixnu skupinu bajtov)
este dalsie moznosti problemu nemas rovnako nastaveny frame a speed na PC dostavas bordel
skusas to citat ako string a nie char zase dostanes bordel kvoli encodingu
mozno sa ti bude hodit DiscardNull ale asi toto bude problem
0
-
- Stály člen
- Príspevky: 175
- Dátum registrácie: 25 Apr 2010, 00:00
- Vek: 12
Re: Ovladanie RS232 v jazyku C
Komunikacia (baudrate je v pohode), chyba bola(?) v encoding so string na int, aspon myslim, teraz som to prepisal cez ReceiveByte, tak to funguje, len ten kod vyzera priserne . Poriesim to trocha inac, ak bude cas
0
- dxr
- Ultimate člen
- Príspevky: 3968
- Dátum registrácie: 05 Aug 2013, 20:21
- Bydlisko: V strede nicoho
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
Ten C# alebo F# vyzera aj bez toho priserne ale co uz je to smer ktorym sa SW na PC vybera.
Aspon ze sa to vyriesilo
Aspon ze sa to vyriesilo
0
-
- Nový člen
- Príspevky: 58
- Dátum registrácie: 25 Aug 2012, 12:51
- Bydlisko: Košice
- Vek: 27
Re: Ovladanie RS232 v jazyku C
A neviete ešte niekde schému keď chcem pripojiť Relé na RS232 port ? že ktoré pini mám napojiť aby išiel program správne ? ? aj s programom Ďakujem
0
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
Re: Ovladanie RS232 v jazyku C
Skus nieco taketo>
http://www.strippenstrolch.de/5-6-1-led ... ambas.html
Rele spinaj tranzistorom ako na scheme. Kedze si nenapisal napatie cievkz rele, nevieme presnu schemu, ani hodnoty suciastok...
Neviem ako je navrhnuty vystup serioveho portu, takze by som radsej pouzil optoclen pre galvanicke oddelenie.
http://www.strippenstrolch.de/5-6-1-led ... ambas.html
Rele spinaj tranzistorom ako na scheme. Kedze si nenapisal napatie cievkz rele, nevieme presnu schemu, ani hodnoty suciastok...
Neviem ako je navrhnuty vystup serioveho portu, takze by som radsej pouzil optoclen pre galvanicke oddelenie.
0
-
- Stály člen
- Príspevky: 126
- Dátum registrácie: 31 Mar 2012, 12:12
- Bydlisko: Spišská Nová Ves
- Vek: 29
Re: Ovladanie RS232 v jazyku C
Caute.
Už si nepamätám kto mi to hovoril, ale na moju pôvodnú otázku či sa dá ovládať RS232 v C som dostal odpoveď že to šlo ale na starých WIN (XP a nižšie), že na novších už len jedine vyšší jazyk ako napr c++ a pod.
Dnes som po dlhom čase (po tej odpovedi som po tom už ani nepátral) našiel a dávam do pozornosti toto:
http://www.teuniz.net/RS-232/
Odskúšané na Win 8.1 v CodeBlocks a funguje perfektne aj cez Bluetooth. Odporúčam
Už si nepamätám kto mi to hovoril, ale na moju pôvodnú otázku či sa dá ovládať RS232 v C som dostal odpoveď že to šlo ale na starých WIN (XP a nižšie), že na novších už len jedine vyšší jazyk ako napr c++ a pod.
Dnes som po dlhom čase (po tej odpovedi som po tom už ani nepátral) našiel a dávam do pozornosti toto:
http://www.teuniz.net/RS-232/
Odskúšané na Win 8.1 v CodeBlocks a funguje perfektne aj cez Bluetooth. Odporúčam
0
- dxr
- Ultimate člen
- Príspevky: 3968
- Dátum registrácie: 05 Aug 2013, 20:21
- Bydlisko: V strede nicoho
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
Seriovy port je pristupny v kazdom OS a z kazdeho programovacieho jazyka niekto bol mudry
ako rozladeny klavir..... alebo to niekdy v nicom inom nerobil. Rozdiely su v pristupe API alebo Direct.
ako rozladeny klavir..... alebo to niekdy v nicom inom nerobil. Rozdiely su v pristupe API alebo Direct.
0
Re: Ovladanie RS232 v jazyku C
čaute mam také niečo nakodene v C ako "stopky" akurát že idú až do nanosekúnd neviem síce presnosť som ešte neskúmal to až neskor chcem ich spúšťať a zastavovať vonkajším vplyvom mimo Pc potom získavať nameraný časový úsek takže asi jedine pomocou RS-232 ma napadlo ale ak by som ich spúšťal tým že pošlem niečo cez TxD napríklad písmeno "a" v Pc sa to detekuje if("a") tak spusti stopky tak ono to bude asi dosť oneskorene kým sa tých 8 bitov odošle kým to Pc prijme a tak ďalej dá sa použivať nejaký iný signál v RS-232 na daný účel nech to reaguje okamžite ? Rozmýšľam nad CTS alebo RI ale neviem ktorý je lepši a pripadne dá sa sledovať RI signál v jazyku C vôbec ? alebo pripadne iný trik nato nech je to oneskorenie medzi príkazom start a stop a reakciou programu čo najmenšia
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Ovladanie RS232 v jazyku C
Neviem neviem čí je to správna cesta. Myslím že akýkoľvek jednočip pripojený na sérivý port bude dávať presnejšie výsledky. Samozrejme že sa dá čítať stav hocijakého signálu takže v princípe je jedno či RI alebo CTS. Záleží od OS ako sa k tomu dostať. Problém je že dnešné OS nedovolia pracovať rovno s hw. Takže tam je ukryté nepredvídateľné oneskorenie. Keď napríklad vidím ako vo win7 terminál nestíha zobrazovať znaky pri kontinuálnej komunikácii by som sa bál že toto by mohlo ísť až do rádu sekund.
Ono je to tak že PC nereaguje na žiadny signál sériového portu okamžite. Sériový port sa síce dá priradiť k prerušeniu, ale to reaguje na príjem a vysielanie znakov, nie na komunikačné signály. Navyše to prerušenie teraz nenabehne hneď ale až sa zaplní FIFO prijímača, alebo nastane timeout (možno sa dá nastaviť na 0, toto neviem). Lenže toto všetko chce low level prístup k hw a ten naposledy bol vo win98.
Jediné ako tak podľa mňa použiteľné by bolo prerušenie na paralelnom porte. To by mohlo byť okamžité v ráde stoviek nanosekund. Ale kde teraz nájsť paralelný port a problém s prístupom k hw je stále.
Na presné meranie som PC nikdy nepoužil, vždy som išiel cestou externého MCU a odosielania výsledkov.
Ono je to tak že PC nereaguje na žiadny signál sériového portu okamžite. Sériový port sa síce dá priradiť k prerušeniu, ale to reaguje na príjem a vysielanie znakov, nie na komunikačné signály. Navyše to prerušenie teraz nenabehne hneď ale až sa zaplní FIFO prijímača, alebo nastane timeout (možno sa dá nastaviť na 0, toto neviem). Lenže toto všetko chce low level prístup k hw a ten naposledy bol vo win98.
Jediné ako tak podľa mňa použiteľné by bolo prerušenie na paralelnom porte. To by mohlo byť okamžité v ráde stoviek nanosekund. Ale kde teraz nájsť paralelný port a problém s prístupom k hw je stále.
Na presné meranie som PC nikdy nepoužil, vždy som išiel cestou externého MCU a odosielania výsledkov.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 0 Odpovedí
- 1456 Zobrazení
-
Posledný príspevok od používateľa MrWifiHifi
-
- 0 Odpovedí
- 143 Zobrazení
-
Posledný príspevok od používateľa Petronas
-
- 6 Odpovedí
- 4237 Zobrazení
-
Posledný príspevok od používateľa Atlan