Fórum témák
» Több friss téma |
A külső pic TX lábát kell a fogadó pic RX lábára kötni. Valamint a gnd-ket is össze kell kötni. Ezen kívül már csak szoftver kérdése a dolog. Ha mutatsz kódrészletet, akkor többet tudunk segíteni.
A két PIC egy panelon van, közös a GND. A két PIC-nek nem a hardveres RX,TX lába van használva, de ha azt mondod, hogy csak szoftver probléma lehet, akkor küzdök még vele. Nem tudtam, hogy kell-e valamilyen szintillesztés(?), vagy le-, felhúzása a vonalaknak. A két láb direktbe össze van kötve a NYÁK-on. Gondoltam még, hogy esetleg a frekik, amin dolgoznak, okozhatnak problémát.
A küldés és a fogadás bitsebessége meg kell, hogy egyezzen. Addig ne is próbálkozz mással, amíg azok nem egyeznek.
Most néztem meg újra a NYÁK-ot, és még egy gond van ezzel az egésszel: A 1320-as csak akkor kezdheti el küldeni az adatot, amikor a 4620-as jelzi neki. (És csak két vezeték áll rendelkezésre). Tehát egyszer az egyik a küldő, másszor a másik.
Ha nem tudom összeegyeztetni, akkor megfelelő lehet valami saját kommunikáció?
Gondolok itt arra, hogy az egyik vezeték az adás-vétel állapotára, a másik az adat értékére van használva?
Jól értem, hogy van két vezetéked a két chip között a gnd-n kívül? Ha jól, akkor semmi gond, egyik vezetéken a 1320 küldi az adatot a 4620 számára, a másik vezetéken meg ellentétes irányba történik az átvitel. Sima rs232 kommunikáció: startbit, adatbitek, stopbit. Nem kell a bitsebességnek hajszálpontosan egyezni (valószínűleg nemis lehet eltalálni pontosan a különböző oszcillátorfrekvenciák miatt), 2-3% eltérés belefér, ha jó a soros fogadás algoritmusa.
Persze lehetne csinálni i2c-t is, de azt bonyolultabb leprogramozni szoftveresen...
Megnyugtattál, hogy szoftveres a probléma, küzdelmem végére remélem "feláldozhatok majd egy kecskét"
![]()
sziasztok!
Lenne egy talán nem ide illö kérdésem, de feleslegesnek tartok egy uj témát nyitni ez végett. a kérdésem a következö lenne: max. milyen hosszú lehet egy soros kábel? (amin ugye tökéletesen megy a komunikáció)
Sebességtől, kábel jellemzőitől, környezeti zavarástól erősen függ. 9600 bps mellett állítólag 50 m fölé is lehet emelni a távolságot megfelelően árnyékolt vezetékkel, de ekkora távon még nem próbáltam, 20 m-ig jól ment. Általában ahogy emelkedik a sebesség, úgy csökken a kábelhossz.
Most játszottam egy hasonló dologgal, nálam müködik két PIC-el az RS232... 16f628, 876,877 mindegy. Van egy PC-re tesztprogim pic-hez ...ez sokat segít. Ha kell küldök egy müködő példaprogit két pic-re rs232-re. Egyébként
nem árt ha a két Pic-nek saját quartz oszcija van, még ha egy panelon is van. Jót szívtam az I2c-vel miatta... RS-hez még... a kommunikálandó bájtok száma is lényeges, tehát ha 10db-ot küldesz, 10dbot is várj odaát...Ez megkönnyítheti a dolgodat.
akkor ezek szerint egy UTP kábellal megpróbálkozhatok, ugye?
![]()
Attól jobbat úgyse találsz.
Viszont ha szimmetrikus átvitelt (RS485) használnál, akkor jóval nagyobb távolságra is el lehet juttatni a jelet, ha kell.
sziasztok!
sztem témába illő a kérdésem: pic18f2520-al szeretnék rs232-n keresztül pc-vel kommunikálni. A led villog, viszont a megszakítás nem működik. Miért? Már próbáltam ezerféleképpen és nem akarja az igazságot. Ha a while ciklusba beleteszem az RDA() utasítást akkor helyesen leveszi az értéket és vissza is küldi. Tehát hardveres probléma (sztem)kizárva. Kezd elmenni a lelkesedésem..... ![]()
A problémát sikerült megoldani. a static char data-t kellett a 2. sorba tenni
Működik.
Ha véletlenül valakinek van működő, két PIC-et RS232-vel összekapcsoló programja, ha lehet C-ben 16F628-ra, (végül is a program szerkezete érdekel, lehet bármilyen PIC), megköszönném, ha elküldené. Egy- irányú a forgalom egy billentyűzet továbbítja a jeleket egy 30 m távolságra levő PIC-hez. Köszi
Nekem ugyan nincs ilyen programom, de a program szerkezetéből konkrétan mi érdekel? Mindkettő felkonfigurálja a soros portot a megfelelő beállításokkal, majd az egyik a TXREG regiszterbe helyezéssel elkezdi kiküldeni az adatot, a másik meg amikor megérkezett, akkor az RCIF bit bebillentésével (és ha engedélyezve van a megszakítás, akkor annak végrehajtásával) jelzi azt.
Idézet: „A problémát sikerült megoldani. a static char data-t kellett a 2. sorba tenni” Pontosabban szólva: az a lényeg, hogy az #int_RDA direktívát közvetlenül kövesse a RDA_isr() interrupt kiszolgáló rutin. Én is jártam már így...
Amit írtál rendben lenne, sikerült megoldani. Még van egy bizonytalannak tűnő rész: amennyiben a távolság miatt MAX232-t használok valószinüleg kell egy az adó PIC-be és egy a vevőbe. Jól gondolom? Ha ez így van ,akkor az adó oldalon a TIN TOUT lábakat használom. Mit használok a vevő oldalon? Gondolom a tagadott kimenet miatt szintén a TIN TOUT lábakat. Ha ez így van mi történik a feszültségekkel, hiszen a MAX feladata a vonali feszültség megemelése. Tudnál ebben egy kis rendet rakni a felemben?
Sziasztok,
Az a kerdesem lenne, hogy mi a kulonbseg a hardware-es , illetve a software-es sorok kommunikacio kozott, program szempontjabol? Meiknel mit kell megadni parameternek a #use rs232() nel?
Ugyebar ez CCS C. A parancsna kb 30 opcioja van. A help leirja szepen milyen opcio mire hasznalhato. A HW es SW soros kezeles kozott az a nagy kulonbseg, hogy a HW-s a beepitett UART-ot hasznalja, ami fel van keszitve a soros vonali adatok lekezelesere, hibakezelesre. A SW soros kezeles egy altalad megirt sorosvonal kezelo program (vagy lib), ami eleg sok helyet es idot vesz el a program futasabol. Ez hasznalatos amikor egy PIC nem tartalmaz HW UART-ot, es a felhasznalo megis akar soros vonalat.
Sziasztok!
Hasonló témában szeretnék segítséget kérni. Számítógépről szeretnék vezérelni majd szervomotorokat, amihez először egy folytonos oda-vissza kommunikációt kell létesítenem a számítógép és a PIC között RS232-vel. A számítógépre küldöm vissza potenciométerek értékeit, ez eddig működik is. A számítógép pedig kiszámolja majd hogy hol kell állni a szervóknak. Azonban PIC általi adatfogadás nem működik. Próbáltam már rengeteg féle variációt, másféle adatcímzéssel is. Most a legutóbbit osztanám csak meg és szeretném ha segítenétek megoldani. A küldött adat úgy néz ki, hogy 5 karakter hosszú, aminek első karakterének az ascii kódja maga az adat(pl 120), a többi 4 karakter az a cím. Első körbe csak ledet szeretnék kapcsolni vele ami úgy néz ki: " led1" a küldött adat(0 és 1 az lehet az értékeke, ami a led1 elé van írva, de azért nem jelenik meg mert asciiban ezek vezérlőkarakterek). Ha 1 értékű azt jelenti hogy kapcsolja be led1-et. A kód:
Próbáltam már úgy is, hogy address nélkül küldtem, csak a 0-1 értéket, úgy működött, de pont az a lényeg, hogy sokféle adatot kell küldenem oda vissza, tehát szükségem van címzésre. Gondolom a string műveletekkel lehet hiba. Szerintetek? Max232 helyett amúgy a mellékelt kapcsolást használom és így is működik. Vagy talán ez közrejátszhat mégis abban, hogy nem működik? Köszönöm a segítséget. Idézet: „Max232 helyett amúgy a mellékelt kapcsolást használom és így is működik. Vagy talán ez közrejátszhat mégis abban, hogy nem működik?” El nem tudom képzelni, hogy ez hogyan működhet egyáltalán, akár egy pillanatig is. Minimum +/-3V kell a szabvány szerinti működéshez, ezt tranzisztorokkal a +5V-ból nem tudod előállítani. Ha nincs +/- tápod, akkor használj MAX232-t.
Tervezem a beszerzését, de ez PIC-ről számítógépre tökéletesen átviszi az adatokat, és amikor nem használtam ilyen címzést amit leírok ott 1 vagy 0 számot vittem át gépről PIC-re és akkor is működött., kapcsolgattam a ledet.
Sziasztok!
Kicsit halott a téma de remélem még sokan olvassák. Belefutottam egy problémába ami szinte biztos vagyok benne hogy egy bagatel apróság de bármennyit töröm rajta a fejem nem tudok túl jutni rajta: PIC16F877, és PC közötti soros kommunikációt szeretnék létrehozni és a fogadott adatot PIC-en belül megszakítással lekezelni. A problémám az hogy fogadja az adatot, bekerül RCREG-be, még RCIF is bebillen, de nem lép bele a megszakításba hanem loop-ban marad. Mellékelem a forráskódot, nyilván itt hibádzik valami...
Gyanús hogy valamit az initnél rontok el, de már többször is átnéztem és nem találom hogy mit. Köszönet előre is az ötletekért. A hozzászólás módosítva: Nov 8, 2012
Furán tördelte a kódot...felrakom asm-ben így talán olvashatóbb....
Szoval a bankok valtasa nem mindig megfelelo. Pl Main utan bank0 van es irod az option regisztert, ami a Bank1-ben tartozkodik. Probald meg az egeszet a MLAB alatt szimulalni, es figyelni minden sornal mi tortenik a regiszterekkel. Igy gyorsan ra lehet jonni a hibara.
Vááááá!!Valóban!
![]() ![]()
Sziasztok!
Ismét lenne gy kis problémám: PC-PIC között kommunikáció, minden rendben megy megérkezik RCREG-be az adat. A problémám az hogy megszakítással szeretném lekezelni a kommunikációt, de egyszerűen olyan mintha folyamatosan bennt ragadna az IT-ben. MPlabban szimulálva Run-ra kattintva és utánna megállítva, mindig a megszakítás szubrutniban van a program. Még az Init_IOports-ig sem jut el. Viszont ha lépésről lépésre szimulálom minden rendben van...ebben az esetben viszont nem tudok soros adatküldéssel szimulálni. ![]() ![]() |
Bejelentkezés
Hirdetés |