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   7 / 14
(#) dcsabi válasza ggombai hozzászólására (») Jan 25, 2009 /
 
Amit megértettem...
küldesz egy "cimet" aztán egy indító byte-ot ez mondjuk 3 vagy 4 byte hosszúságu legyen, akkor biztosan nem keverednek össze a szolgák...
Aztán a PIC csinál valamit, (pontosan mit?)...Elkezd számolni egy időzítő, (aminek, milyen pontosnak kell lennie?) ha századmádodperc és stb...
akkor külső óra chipet kell használni amit a PIC folyamatosan lekérdez ez lehet mondjuk PCF8583 ez tudja a század másodpercet is... ha a pic-ben összetett a program akkor nem kezeli "értékhelyesen" az időzítéseket, ezért használnak külső óra chipet...
Az időzítés vagy számlálás megszakító jelét a PIC lábára kapcsolt nyomógomb kezdeményezi, vagy a PC felől egy másik parancs (byte sorozat?)
Azt, hogy a szolgák is érzékeljék a busz foglaltságot, ezt még nem próbáltam...
AZ I2C buszos protokoll ezt tudja ami az előbb említett óra chip és a PIC között van, viszont ezek jele nem vihető el messze...
A PC-t mint mestert kell intelligensebbé tenni a feladatra, vagy másképp kell a feladatot megfogalmazni...PL: időnként egymás után lekérdezni a szolgákat, történt-e változás, ha ezek az kérdéses időzítések, nem tul rövidek, (4-5 mp-nél hosszabbak)
a pic küldi a lekérdezés hatására, hogy mi a "státusza"...
Nem egyszerü, csak igy vaktába ezt nem biztos, hogy meg tudom írni, kell keríteni egy hasonló panelt is...
A már emlegetett topicon van "hasonló" dolog...


I2C+RS
(#) ggombai válasza dcsabi hozzászólására (») Jan 25, 2009 /
 
Szia.
Delphiben készülne a program.
Ebből a programból kellene elindítani egy "gombnyomással" (pl start gomb) az összes PIC "stoppert". (de az indítás nem is akkora probléma)
Igen tudom hogy külső óra chipet kell használni. A "stoppereknek" század másodperc pontosságúnak kell lenniük. Minden ilyen kis pic "soppernek" van az egyik "lábára" egy másik hardver kötve ami egy bizonyos feltétel teljesülésekor (külső hatás, pl elér egy bizonyos hőmérsékletet) küld egy jelet (vagy mint egy logikai kapcsolót átbillen) a picnek melyre az lenullázza a számlálóit (minden alaphelyzetbe áll )és újra elindul. Az előzőleg mért értéket elküldi a serial portra. Ez a folyamat ismétlődik folyamatosan ha kap egy jelet ismét. Az egyedi azonosítónak csak az a szerepe hogy programból beazonosítható legyen melyik stopper küldte az időbélyeget ezért az egy fixen előre megadott érték lenne minden pic ben. 4 byte adat lenne.
azonosító(első stopper):00000001
perc: 00000101
másodperc:00011101
század:00000011

Üdv:2G
Az előző példára visszatérve el tudnád kuldeni a .pic kiterjeszésű fájlt is hogy be tudjam nyitni a parsic-ba?
Tényleg szeretném megérteni a működését!
Előre is nagyon köszi!
(#) dcsabi válasza ggombai hozzászólására (») Jan 26, 2009 /
 
Erre gondoltál?...

Byte_RS1.PIC
    
(#) ggombai válasza dcsabi hozzászólására (») Jan 26, 2009 /
 
Szia!
Igen! Köszönöm!
Üdv:2G
(#) Josip hozzászólása Máj 13, 2009 /
 
Üdv mindenkinek!

Szeretnék segítséget kérni soros port programozással kapcsolatban. Van egy beadandó feladatom, de igazából elindulni sem tudok. A feladat az lenne, hogy 4*20-as kijelzőre soros porton keresztül kiírassam a szöveget.
Bővebben (az 5. feladat):http://vili.pmmf.hu/~zamek/cprog2.html

Itt van a soros portos feladatról az anyag, amiből ki kellene indulni: http://vili.pmmf.hu/~zamek/c/serialframe/files.html

Gondolom ebből kéne kiindulni:http://vili.pmmf.hu/~zamek/c/serialframe/packet_8c-source.html

Kérem, aki tud segítsen! Amennyiben valaki megcsinálná a feladatot és elmagyarázná, hogy működik, azt természetesen kifizetem (utalom a pénzt).
Sajnos a programozás nem jött be
(#) watt válasza Josip hozzászólására (») Máj 13, 2009 /
 
Idézet:
„Amennyiben valaki megcsinálná a feladatot és elmagyarázná, hogy működik, azt természetesen kifizetem (utalom a pénzt).
Sajnos a programozás nem jött be”

Szerintem eltévesztetted az ajtót. Ez itt egy hobbi oldal, nem bérházifeladat megoldó automata.
(#) Josip hozzászólása Máj 14, 2009 /
 
Igaz, hogy durván fogalmaztam, de ennek az az oka, hogy láttam, már olyan hozzászólást (máshol), hogy "mennyit fizetsz", illetve, nehogy valaki azt mondja, hogy ingyenélő stb. Nem megy a programozás és nem is szeretnék programozó lenni, de erre nagy szükségem lenne. Annak, aki ért hozzá ez egy 5 perces feladat. Kérem segítsen valaki!
(#) konradka hozzászólása Máj 16, 2009 /
 
Sziasztok!
Van egy progim vb6-ban írtam és rendesen működik (sorosporton kommunikál egy eszközzel) a visszaolvasásnál mind a 32 karaktert vissza tudom olvasni.De mikor ugyanezt a progit megirom az excel vb-ben csak 8 karaktert olvas vissza mi lehet a bej mellékelem a program részletet a segítséget előre is köszönöm!!

UserForm1.MSComm1.PortOpen = True
UserForm1.MSComm1.InputMode = comInputModeText
UserForm1.MSComm1.Handshaking = comNone
UserForm1.MSComm1.Output = Chr$(255) + Chr$(255) + Chr$(128) + Chr$(1) + Chr$(127) '"FFFF80017F"

Do
DoEvents
Loop Until UserForm1.MSComm1.InBufferCount > 0
szamol = 1

instring = UserForm1.MSComm1.Input
decbe = Asc(instring)
If Len(instring) <> 0 Then
adatbe(szamol) = decbe
szamol = szamol + 1
UserForm1.TextBox1.Text = UserForm1.TextBox1.Text + adatbe(szamol - 1)
End If
(#) watt válasza konradka hozzászólására (») Máj 16, 2009 /
 
Próbáld beállítani a:
MSComm1.RThreshold -ot 32-re.

A portot pedig akkor nyisd meg, ha mindent beállítottál, ne az elején.
(#) konradka válasza watt hozzászólására (») Máj 20, 2009 /
 
Nagyon köszönöm a segítséget de már megoldottam !!!
Azért köszönöm és ha valami pontot kell adnom természetesen adom ! Csak írj vissza!
(#) slave557 hozzászólása Jún 2, 2009 /
 
Érdeklődnék, hogy megoldható-e, hogy csinálok soros portra egy kapcsolót (nekem mindegy melyik portra csinálom, minél egyszerűbb legyen) és azzal betudok zárni-, vagy indítani egy programot.
tehát az asztalomon lenne a kapcsoló felkapcsolom (vagy megnyomom) és megnyílik pl. az msn...

Lehetséges? (gondolom igen)
Nehéz?, bonyolult?

Válaszokat köszönöm, még kész tervet is szívesen látok..
(#) watt válasza slave557 hozzászólására (») Jún 3, 2009 /
 
Igen, bonyolult ilyet tervezni. Kell egy mikrovezérlő, ami a gombok alapján egy megfelelő kódot küld a soros porton. Kell egy illesztő, ami az RS232 szabvány szerint illeszti a MC-t. Kell egy PC program, ami feldolgozza a kapott kódot és elindítja a kívánt programot. Nem árt, ha ez a kezelőprogram a háttérben fut. Mindkét programot(PC, MC) meg kell írni, valamint az áramkört meg kell tervezni és megépíteni. Kész rajzról és programról nem tudok, én is csak a google-ban keresnék utána...
(#) zenetom válasza slave557 hozzászólására (») Jún 3, 2009 /
 
Hali!
Ajánlom ezt az áramkört, sokkal több mindent tud! Bővebben: Link
(#) CoderKevin hozzászólása Feb 17, 2010 /
 
Sziasztok!

VB6-ban próbálkozom soros port kezeléssel. Készítettem egy ilyen "tesztert", amiről itt a fórumon volt szó (2-es és 3-as léb összeforrasztva). RS232 monitor progikkal ha kiküldök a porton valamit, vissza is kapom. De ha a saját progimmal próbálkozok, nem történik semmi. Íme a kód:

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End Sub

Private Sub Command1_Click()
MSComm1.Output = Chr$(8)
End Sub

Private Sub MSComm1_OnComm()
If (MSComm1.CommEvent = comEvReceive) Then
Text2.Text = MSComm1.Input
End If
End Sub
(#) watt válasza CoderKevin hozzászólására (») Feb 17, 2010 /
 
Az inputlen-t tedd 1-re(ez állítja, hogy hány karakter okozzon megszakítást).
Olyan karaktert küldj el, amit meg lehet jelenítei. pl. így "H".
(#) CoderKevin hozzászólása Feb 19, 2010 /
 
Sziasztok!

Tehát odáig jutottam hogy:
Vb-ből a következő utasítással küldök a pic-re adatot:
MSComm1.Output = Chr$(Text1.Text)
Ez szépen átmegy, és fel is tudom dolgozni a pic-ben.
Az RsCheck nevű programmal fogadni is tudom a dec formátumú adatot a pic-től és meg is jelenik szépen a gpen.
Viszont Vb-ben :
instring = Form1.MSComm1.Input
If Len(instring) <> 0 Then
Form1.Textlog.Text = Form1.Textlog.Text + instring
End If
ezzel a kóddal értelmetlen karakterek jelennek meg a fogadott adatokra (gondolom mert nem dec adatot várna).
Milyen megoldás létezik rá, hogy dec adatot jelenítsen meg a Vb?
(#) watt válasza CoderKevin hozzászólására (») Feb 19, 2010 /
 
Miért nem használod a VB6 helpjét a neten(MSDN).
Egyébként ennek már nem sok köze van a soros port programozásához, de még annyit segítek, hogy az ASCII kódot úgy tudod megjeleníteni, hogy az CHR(ASCII kód) függvényt használod.

Ennek a sornak pedig semmi értelmét nem látom, mivel karaktereket kéne kivigyél, amihez nem kell konverzió.
  1. MSComm1.Output = Chr$(Text1.Text)

Ennyi elég lenne.
  1. MSComm1.Output = Text1.Text


Ha ilyen programozási kérdéseid vannak, javaslom, inkább egy ilyen témával foglalkozó fórumot(pl. HWSW) keress, itt csak célirányos programozási kérdéseket néznek el, azt is nehezen(de jogosan, mert ez egy elektronikai fórum.)!
(#) CoderKevin válasza watt hozzászólására (») Feb 19, 2010 /
 
1. Ha nem a soros port programozáshoz, akkor mihez van annak köze, hogy "Hogyan küldjünk és fogadjunk adatokat a soros porton?" mert a kérdésem ilyen jellegű volt.
De rendben legyen igazad.

2.
Ha így küldöm:
MSComm1.Output = Text1.Text
Akkor pl. az "5" helyett "53" jelenik meg a pic-ben.
Ha így küldöm:
MSComm1.Output = Chr$(Text1.Text)
Mindig azt kaom meg a fogadó oldalon amit küldtem.

Mondjuk az előző hozzászólásomban írtam is hogy ezzel semmi probléma, másra irányult a kérdés...
(#) Stadi válasza CoderKevin hozzászólására (») Feb 19, 2010 /
 
Karakterenként alkalmazhatod az Asc függvényt a bejövő adatokra (karakter->ASCII kód). Kiíratásnál (szám->szöveg) pedig vagy a beépített, önműködő típuskonverziót használhatod, vagy a CStr függvényt.
(#) watt válasza CoderKevin hozzászólására (») Feb 19, 2010 /
 
Az hogy 53 megy át, az a normális, mert annyi az "5" -ös karakter ASCII kódja. A PIC-ben ezt a helyén kell kezelni és kész(pl. ezt ki lehet küldeni egy LCD-re és érdekes módon "5"-öst fog megjeleníteni).
Amikor visszakapod az értéket, akkor neked kell gondoskodni a chr(x) függvénnyel, hogy a list, vagy text ablakban a megfelelő karakter jelenjen meg a kódja helyett.

Annak nincs köze a soros kommunikációhoz, hogy nem ismered a VB6 függvényeit, és itt keresed a megoldást a típus konverzióra és nem érted mi miért van.
(#) Amarton hozzászólása Máj 29, 2010 /
 
Hi!

Visual Studio 2008-at használok (C#).
A PIC-em USB CDC-n keresztül küld egyszerre 7*8 bájtot a COM6-os portra.
A docklight nevezetű programmal teszteltem a PIC-es firmwaret, hogy minden tuti legyen, mire neki kezdek a saját PC oldali szofver megírásának.
Az Visual C#-ban elakadtam az RS232-es résznél.
A gondom a következő:
Stringként fogadom a 7 bájtot, mint 7 karakter, de ez nekem nem jó, mert a nagyobb értékeknél (pl.: 0xFF) csak kérdőjel jelenik meg.
Hogyan lehetne az adatokat úgy fogadni, hogy azok byte tipusok legyenek esetleg egy tömbbe rendezve.

Itt az rs232 kódrészletem:
  1. delegate void SetTextCallback(string text);
  2.         public byte[] RXbuffer;
  3.  
  4.         public static byte[] StrToByteArray(string str)
  5.         {
  6.             System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
  7.             return encoding.GetBytes(str);
  8.         }
  9.  
  10.         private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
  11.         {
  12.            try
  13.            {
  14.               SetText(serialPort1.ReadExisting());
  15.          
  16.            }
  17.           catch
  18.           {
  19.                 btnClose_Click(this, null);
  20.             }
  21.         }
  22.  
  23.         private void SetText(string text)
  24.         {
  25.             if (txtDataReceived.InvokeRequired)
  26.             {
  27.                 SetTextCallback d = new SetTextCallback(SetText);
  28.                 Invoke(d, new object[] { text });
  29.             }
  30.             else
  31.             {
  32.                 txtDataReceived.AppendText(text);
  33.                 RXbuffer = StrToByteArray(text);
  34.  
  35.                 label1.Text = RXbuffer[0].ToString();
  36.                 label2.Text = RXbuffer[1].ToString();
  37.                 label3.Text = RXbuffer[2].ToString();
  38.                 label4.Text = RXbuffer[3].ToString();
  39.                 label5.Text = RXbuffer[4].ToString();
  40.                 label6.Text = RXbuffer[5].ToString();
  41.                 label7.Text = RXbuffer[6].ToString();
  42.  
  43.             }
  44.         }
(#) watt válasza Amarton hozzászólására (») Máj 29, 2010 /
 
Ezt meg kéne találd a help-ben, vagy a MSDN-ben. Neked mindig bájtok jönnek át, tőled függ hogyan jeleníted meg. Tehát konvertáló rutinokat kell keress. Ilyenek VB-ben az ASC, a CHR$ és hasonló társaik. Valami ilyesmi kéne C#-ban is.
(#) Amarton válasza watt hozzászólására (») Máj 30, 2010 /
 
Megpróbáltam úgy a fogadást, hogy a
serialPort1.ReadExisting();
helyett
serialPort1.ReadByte();
objektumot használtam. Szépen kaptam is az adatokat, de nem a 7 bájtot egyszerre, hanem mindig csak 1 bájtot.
Ha figyeltem a soros port RX buffert, akkor szépen lassan megtelt, mivel ugye 7 adat került bele és én csak 1-et szedtem ki mindig.

Ezután visszatértem az előző megoldáshoz. Ha stringként veszem ki az adatokat, akkor a buffer nem telítődik.
A string tömb konvertálás azonban ebben az esetben nem nagyon működik. Pontosabban nem tudom, hogy mivel lehetne.
Olvasgatom az msdn-t, de nem jártam sikerrel.
Érzem, hogy már csak egy hajszál választ el a sikertől, de eddig nem birkóztam meg vele.
(#) watt válasza Amarton hozzászólására (») Máj 30, 2010 /
 
Szervezd ciklusba, és vegyél annyi bájtot, amennyit küldesz.
A másik megoldás, hogy a vett stringet feldolgozod, és átalakítod számodra megfelelő formátumúvá a megjelenítéshez. Ha számokat akarsz látni, vagy feldolgozni, akkor számokká(a karakter ASCII kódját kell betenned egy integer, vagy byte típusú változóba, vagy egy ilyen tömb egy elemébe)...
Megjegyzem ezeknek a kérdéseknek nem sok köze van a soros porthoz, ezek általános kezdő programozási kérdések. (ugyanis van egy vett stringed, csak át kéne alakítanod...) Javaslom a prog.hu felkeresését! (Különösen azért, mert én C#-ban konkrét segítséget nem fogok tudni adni, miután nem ismerem a szintaktikáját. Másrészt ez a fórum nem informatikával foglalkozik, csak hardver közeli programozási kérdések vannak megtűrve...) Megjegyzem, ennek ellenére én megadtam a megoldást a kérdésedre, csak keresgélned kell a megfelelő konvertáló függvények után. Ezt én nem fogom megtenni helyetted, miután nem C#-ban dolgozom...
(#) Amarton válasza watt hozzászólására (») Máj 30, 2010 /
 
Okés, köszönöm.
(#) Cellosion hozzászólása Dec 14, 2010 /
 
Egy egyszerűbb probléma:
Van egy digitális fényképezőgépem, aminek ki van vezetve a bekapcsológombja két dróton (ha összeérintem a két drótot, a gép be- illetve kikapcsol).
Meg szeretném oldani, hogy számítógépről vezérelve lehessen kapcsolgatni a gépet, mondjuk soros (vagy LTP) porton keresztül. Milyen programmal/kóddal (C, C++, C#) lehetne megoldani ezt?
Előre is köszönöm!
(#) icserny válasza Cellosion hozzászólására (») Dec 14, 2010 /
 
Idézet:
„Milyen programmal/kóddal (C, C++, C#) lehetne megoldani ezt?”
A felsoroltak közül bármelyikkel.
(#) Cellosion hozzászólása Dec 14, 2010 /
 
Konkrétan a bitenkénti portvezérlés mikéntjére akartam rákérdezni, sajnos még eléggé kezdő vagyok ilyen téren.
Pl.: egyik vezetéket rákötöm a port 0. bitjére, a másikat az 1. bitre, és gombnyomás hatására az egyik bitet "átköti" a program a másikra.
(#) watt válasza Cellosion hozzászólására (») Dec 14, 2010 /
 
Látom nem csak a bitekkel vagy hadilábon, hanem az elektronikával is! Használj reed relét, akkor nem teszed tönkre a gépedet. Van olyan is, amit az LPT is meg tud húzni(5V-os), de ha nem akkor egy tranyóval meghúzatod, de akkor segédtáp is kell(pl. a PC-ből az 5V jó lehet.). Ha nem érted amit írok, kérdezd meg a kezdők topicban, hogy hogyan kell illeszteni egy relét és egy tranyót az LPT portra, ne ezt a topicot offoljuk szét!
A program pedig teljesen mindegy melyik, csak ismerd a hogyant! Ha csak egy egérkattintásra akarod a gombodat megnyomni, akkor elég lehet egy LPT port teszter program, keress rá van ilyen! Ha nem találnál előkotrom délután és felteszem ide, ha megfelel amit írtam fentebbi működést!
(#) watt válasza Cellosion hozzászólására (») Dec 14, 2010 /
 
Itt a program:
Szakmai kérdésekre privátban nem válaszolok...
Következő: »»   7 / 14
Bejelentkezés

Belépés

Hirdetés
XDT.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