Fórum témák
» Több friss téma |
Fórum » Két PIC közötti kommunikáció
Témaindító: JohnyBravo, idő: Márc 28, 2006
Témakörök:
Az I2C szerintem nem erre való, autóban tudtommal a CAN buszt használják. Az I2C egy készüléken belüli IC-k kommunikációjára lett kitalálva.
Amúgy gondot az I2C esetén az okozhat, ha valamelyik buszvonalra csatlakozó láb föld felé rövidzárat csinál, vagy egyéb ok miatt "lehúzza" valamelyik vonalat.
Sajnos a CAN kommunikációt nem ismerem, és szerintem a PIC sem.
A zavaroktól nem félek, viszont a meghibásodó PIC IO lábaktól annál inkább. Talán PIC-enként közbeiktatott master PIC-el közvetlenül vezérelhető tápellátású pufferekkel lehetséges a probléma kiküszöbölése.
Vannak picek, amik ismerik a CAN kommunikációt. Keress rá Microchipnél.
Üdv!
Lehetséges az hogy a p16f690-es hardveres I2C módban csak slave lehet?
Mindegy...
Íme a probléma konkrétan: Master:
Slave:
Szóval Proteusban az egyik irányba működik a kommunikáció mert az I2C elemző mutatja, de a slave már nem küldi vissza az adatokat. Már SPI-vel próbálkoztam, de az I2C egyszerűbbnek tűnik.. Előre is kösz..
A master program elején nem kellene egy vonal inicializálás a késletetés előtt?
Van itt még egy bibi!
Azt mondja az ERRATA, hogy a Rev6 előtti PIC16F690 mikrovezérlők nem ismerik fel az első start bitet! 2. Module: SSP (PIC16F687/689/690 only) In any of the I2C™ modes, the SSP module will fail to recognize the first Start bit received after a transition from module disable to module enable. Subsequent Stop bits and Start bits are detected properly. Work around: Enable the SSP module in SSPMSK Access mode before changing the mode to the desired I2C operation. Fix: Rev. A6 Silicon and later revisions.
És azt honnan lehet megtudni, hogy rev. A6-os?
Ki kell olvastatni az ezt jelző biteket a kontrollerből (18F-nél a DEVID bitek mellett találhatók a REV bitek, többinél nem néztem), és az alapján megkeresni az adatlapokban vagy az errata lapokban a hozzá társított jelzést. De az MPLAB ki is írja, hogy A6, B1, stb. ha ICD2-t használok, de szerintem a Pickit2-vel is kiírja.
Amikor például a PICkit2 vagy az ICD2 csatlakozik, akkor kiírja a drót végén talált eszköz azonosítóját, meg valami verzió azonosítót.
Sziasztok!
Ha 2 PIC-et szeretnék összekötni amik egymástól kb 10m-re vannak (riasztó központban és kaypadban levő PIC-ek) és nincs túl sok vezetékem (8db), milyen(gondolom soros) kommunikáció lenne a legcélravezetőbb. Beleástam magam az I2C-be mire rájöttem ez nem igazán jó ekkora távolságra. USART? A cél pár byte szinkronban tártása lenne (központ érzékeli az érzékelők jeleit, a keypad PIC vezérelné a kijelzőt, ill tudatná a közpottal milyen gombot nyomtunk le. Bármi segítség jól jönne de a legfontosabb az irány meghatározása lenne, hogy mibe érdemes elmélyednem. Előre is kösz.
Oké, nekilátok. Esetleg tudnál valami jó összefoglaló linket praktikus tanácsokkal? Hogy kell egy ilyen hálózatnak kinézni, assembly-ben programozva hogyan kell az adatokat átküldeni/fogadni.
Keresem persze én is közben.
AN774 - Asynchronous Communications with the PICmicro USART
Bővebben: Link
Hát ha van két szabad vezetékpárod, meg azon kívül egy GND, akkor a kábel mindkét végére teszel egy-egy SN75176 IC-t (tehát összesen négy darab kell), és ugyanúgy működik, mint a soros port. A vezetékpár jó lenne, ha csavart érpár lenne, pl. UTP kábel egy-egy érpárja.
Kösz mindkettőtöknek! Ebben a témában még nagyon kezdő vagyok (sosem kötöttem össze 2 PIC-et), de most már legalább tudom merre induljak...
Üdv!
Egész jól haladok a pic kommunikációval, simán átmennek a byte-ok. Most jönne az RS485 az SN75176 IC-kel. Átézve a javallt dokumentumokat valami nem tiszta: Pl az egyik pic elkezd küldeni egy byte-ot a buszon. Mi van ha egy másik is elkezd adatot küldeni még mielőtt emez befejezné. Ha azután kezdené küldeni akkor már nem gond, a többi pic-be érkezett adat interruptot vált ki és akkor pl tilthatjuk a transmission-t, de ha közel egyidőben kezdik? Vagy ez annyira elhanyagolható időtartam, hogy a gyakorlatban nem szoktak vele számolni? Szóval az aggályom, hogy a közös (2eres) buszon egyik line driver pl H-t akar a másik L-t, nem fog ekkor valami kihalni? Kösz.
Nem csináltam még ilyet, de ilyenkor az a teendő tudtommal, hogy adás közben figyeled a vonalon megjelent bitet és ha ez nem egyezik a kiadott bittel, akkor abbahagyod az adást és egy véletlen idő múlva indítod újra ( legalábbis más rendszerekben tudtommal így működik !).
Steve
Közben nekem is eszembe jutott egy lehetőség. Kinevezek egy Mastert ami sorban vegig szólongatja a slave-eket. Alap helyzetben minden slave-nél tiltva van az adatküldée és csak annál a slave-nél engedélyezzük a transmission-t amelyik meg lett szólítva.
Alap esetben én aszinkron adatátvitelt gondoltam, mert azt olvastam, nagyobb távolságokra ez a jobb. Bár attól, hogy master van ez még sztem aszinkron(nincs közös órajel),, csak van 1 PIC ami vezérli az adatforgalmat. Szerintetek jól gondolom?
Igen, így szoktuk csinálni, hogy van egy Master, és az szólítja sorban a többit megfelelő időközönként. Ha kettőnél több PIC között kell megoldani a kommunikációt, és egyéb feltételeknek megfelel, akkor a legegyszerűbb, ha minden PIC-nek van egy saját címe, amivel a Master azonosítja, hogy kinek küld most, és csak a Master kezdeményez kommunikációt. Amelyik PIC felismerte a saját címét, az válaszol, a többi pedig továbbra is csak figyeli a vonalat. A cím küldéséhez létezik 9 bites adás, a PIC-ben pedig be lehet állítani, hogy azt figyelje, hogy a 9. bit micsoda, és csak akkor reagáljon a vett adatra, ha az mondjuk egyes volt, minden egyéb esetben hagyja figyelmen kívül. Ez azért jó, mert előfordulhat, hogy a válaszban olyan adat megy, amit a másik címként ismerne fel. De ha a címben eleve a 9. bit eltér, akkor nincs gond. Fusd végig ezt a témát: Link
Igen, igen a 9. bites címzésre gondoltam én is. Köszönöm a linket, átnézem. Már csak egy hardware-es kérdésem van: SN75176 adatlapján az A és B vezetékek 2 végpontját egy-egy 120 Ohm-os ellenállás köti össze. Más RS485 rajzokon még pluszban az A és B vezetékek a +5V-ra és GND-ra is kötve vannak egy-egy ellenállással (560 Ohm-tól pár KOhm). Kell ez utóbbi, illetve mi lehet a szerepe.
Kösz.
A 120ohm az érpár impedanciájának illesztésére szolgál. UTP kábel impedanciája 100 ohm, ahhoz elvileg 100ohm ellenállás kell az érpár végeire. Érdemes úgy csinálni, hogy az ellenállással egy kondenzátort sorbakapcsolsz, akkor nem fog egyenáram folyni az ellenálláson, a lezárás viszont jó lesz. Mondjuk 1µF kondenzátor jó lenne, célszerűen kerámiából.
A másik két ellenállás arra való, hogy biztosítsa a buszon a stabil jelszintet, amikor minden vevő nagyimpedanciás állapotban van. Ezen ellenállások értéke nem lényeges, én néhány kohm-ot tennék. Ha a kondenzátor bent lesz, akkor akár 10kohm is jó.
Sajnos nem megy ez az RS485 dolog. A ket PIC-cel minden ok, ha Tx-Rx Rx-Tx labakat osszekotom siman kuldik/fogadjak a byte-okat. Ha azonban a 2 SN75176-on keresztul akarom akkor az egyik pic periodikusan reseteli magat. Ugy tunik, mintha a tapfesze nem lenne eleg (bemertem a ket SN75176 osszesen 86mA-t vesz fel). NEm sok ez? Mar gondoltam arra is, hogy levalasztom optocsatoloval a PIC-eket az RS485-os reszrol (bar ilyet sehol nem lattam a neten).
Amugy 2 vezeteken megy (menne) a kommunikacio mindket PIC-hez 1-1 SN75176van kotve, DE RE labak ossze vannak kotve es a PIC egy kulon laba ad H ha transmission lesz, amugy L szinten vannak. Tudna valaki valami otletet adni mi lehet a gond?
Igen, ezt próbáltam, úgy tűnik maga az RS485 rendszer oké, mert engedélyezve a transmissiot H-t adva az egyik SN75176 D bemenetére H jelenik meg a másik R-jén. Tiltva a transmissiot (azaz vételt engedélyezve meg mindig magas szint van. Úgy gondolom ez így normális. Nincsenek felcserélve a vezetékek, az adatlapnak megfelelően vannak. Az jó úgy hogy az A B adatvezetékek közt -2V meg +2V fesz különbség van, a közös GND-hoz képest pedig 3-4V fesz különbség? Valahol tizen voltokat olvastam. Szóval az nem probléma, hogy a PIC-ek és a SN75176 ugyanazon a tápfeszen vannak?
Ja és persze L-t adva a D bemenetre a másikon L jelenik meg az R kimeneten. (ez a sor kimaradt az előzőekből)
Jónak tűnik. A 2V is jó, ha a táp csak 5V, akkor nem lehet ettől nagyob feszültség sehol sem.
A PIC-ek tápja hogyan épül fel? Tápszűrés milyen?
Azzal nem gondolnám, hogy gond lenne, labor tápról megy, van 100nF is közvetlen a PIC tápfesz lábnál.
Ami kicsit speciális, hogy mivel még csak tesztelem a dolgokat az A és B vezetékek 10cm hosszúak (nem csavart érpár) és mindkét végén van egy 120 Ohm. így írta az adatlap. De úgy tűnik nem is az RS485-tel van a baj, hisz tesztelve jól megy és nem is a PIC-ekkel (Tx-Rx direkt összekötésnél kifogástalan minden), hanem a kettőt összekötve omlik össze minden valahogy (PIC resetelget egymás után, éredekes módon csak az egyik, a másik oké, pedig mindkettőben ugyanaz a program)
|
Bejelentkezés
Hirdetés |