Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
A többiek már leírták a lényeget, én próbálom kicsit másképpen szemléltetni.
Azt már hallottad, hogy ez egy fizikai szabvány. Ugyanolyan adatok futnak a vonalakon, mint az RS232 esetében, csak az áramköri kialakítása olyan(ellenben az RS232-vel), hogy bármelyik eszköz rá tud dumálni a vonalra. Persze egyszerre beszélni még az embereknek sem érdemes, mert senki nem fog érteni semmit. Ezért van a protokol, ami meghatározza, hogy ki mikor dumálhat. Van egy master, ami osztja az engedélyeket, illetve megszólítja a vonalon figyelő slaveket. Ezt egy csomag elküldésével teszi, amiben van egy cím. A cím bármekkora lehet, csak a protokol határozza meg. A protokolt te is kitalálhatod, nem kell gyáriakat használni. Én is saját protokolt használok. A PIC-ek képesek 9 bites adásra, és a 9. bit megszakítást is okozhat a slave-nél, ha így van beállítva. Ezzel el tudod különíteni az adat forgalmat a címtől. (az adatban a 9. bit mindig 0.) Jó lenne ha lerajzolnád a jelenlegi kialakítást, úgy a protokolban is többet tudnánk segíteni!
Szia!
- Nem tudjuk pontosan mi is a feladat... - Egy példa: Az RS485 kommunikóval rendelkező eszközöknek néhány bájtot kell elküldeni. Nem elég hatékony (kétszer annyi adatot ad, mint kellene), de (segédeszközök nélküli ember által is) olvasható, ellenőrizhető terminálon való megjelenítéssel. - Megoldás: A távirat így nézzen ki: aa: egy byte eszközcím hexadecimálisan, két ascii karakterként (0..9, A..F) küldve, a legmagasabb bit mindig 1, olvashatóság érdekében a magas helyiérték megy először, nn: a táviratban átküldött adat byte-ok száma hexadecimálisan, két ascii karakterként küldve, a legmagasabb bit 0, dddd...: nn darab adat byte, két-két ascii karakterként küldve, a legmagasabb bit 0. cc: ellenőrző összeg - a táviratban szereplő bájtok (a címtől az utolsó adatbyte-ig) összege mod 256, két ascii karakterként küldve, a legmagasabb bit 0. Vétel: - Meg kell várni, amig olyan karakter jön, ahol a legmagasabb helyiértékű bit 1. A következő karakternél ellenőrizni, hogy a legmagasabb helyiértékű bit 1 - ha nem: hibás távirat. Ha igen: akkor megvan a cím. a következő két karakter vétele ellenőrizve, hogy a legmagasabb helyiértékű bitek 0. Már ismert a távirat hossza. A hossznak megfelelő adatbájtok (2 karakter) vétele ellenőrizve, hogy a legmagasabb helyiértékű bitek 0. Az ellenőrző összeg (2 karakter) vétele ellenőrizve, hogy a legmagasabb helyiértékű bitek 0. Csak az az egység dolgozza fel a táviratot, amellyiknek a cím szól. Az adatot csak akkor hiszi el, ha a vétel során nincs hiba valamint az általa generált és a vett összeg egyezik. Nem értek egyet a csak egyirányú megoldással, nem jön vissza jelzés arról, hogy az egység sikeresen vette az üzenetet... Szia
Ha jól értem a feladat megfogalmazását ebben a hozzászólásban, akkor az RS485 itt csak az egyirányú fizikai átvitel megvalósításához kell. Ezért szerintem nincs értelme semmiféle külön protokolnak vagy címezgetésnek, küldheti az adatot ugyanúgy, mint korábban USART-on.
Csak az RS-485 illesztők adatirányát kell beállítani...
Szia!
A nagyobb távolság miatt hibásan vett karakter után az üzenet vétele elcsúszhat, a dekódolt üzenetek nem azok lesznek, amit az adó küldött.. Mindenképen kell valami, ami helyreállítja a vevő dekódolását .... Szia
Szia. Akkor végigmérem a kivezetéseket és valahogy le kéne szigetelni a forrasztásokat inkább attól félek, hogy egyes helyzetekben összeérnek. Akkor most ha mégis valami balul sül el akkor mi száll el? Watt azt írta, hogy max a port, de akkor mi van? Csak annyi, hogy a nyomtatóport nem használható többé, de minden más működne? (Az ic bemérést annyira nem értettem meg elsőre, de inkább a csatlakozásokat ellenőrzöm és valamivel ki kéne önteni azokat csak nem tudom mivel. Van ilyen fehér ragasztórúd az megfelel? Esetleg van egy kis műgyanta is, de azt inkább meghagynám késöbbre.)
Szia!
Első mérésekhez bontható szigetelés: minden vezetékre műanyagcső a csatlakozó forrasztására ráhúzva, vagy a ragasztópisztolyos megoldás. Szia.
Akkor te úgy is kened vágod ezt PIC-es dolgot, tudsz nekem egy bevált égetőt, ha lehet nyákkal. És valami olvasmányt ami fullra az alapoktól kezdi mer még egyáltalán nem programoztam.
Segítek én is, ha akarod, én is most kezdem totál nulláról Dobj egy PÜ-t, és adok pár dolgot.
Aki használ, vagy épített potyo-féle ICD2 3.verziójá-t, az mondja már meg legyen kedves, hogy az X5 csatlakozóra kötendő kapcsoló milyen? Váltó, 3 álású, vagy ilyesmi. Alkatrészrendelés előtt állok, és nem tudom melyiket vegyem, mert a kapcs.rajzon nincs feltüntetve, csak a csatéakozó.
Köszi!
program rs485_test
dim dat as byte[8] sub procedure interrupt RS485Slave_Receive(dat) PORTB=dat[0] PORTD=1 Delay_ms(500) PORTB=dat[1] PORTD=2 Delay_ms(500) PORTB=dat[2] PORTD=4 Delay_ms(500) PORTB=dat[3] PORTD=8 Delay_ms(500) PORTB=dat[4] PORTD=16 Delay_ms(500) PORTB=dat[5] PORTD=32 Delay_ms(500) PORTB=dat[6] PORTD=64 Delay_ms(500) PORTB=dat[7] PORTD=128 Delay_ms(500) end sub main: TRISB = 0 TRISD = 0 PORTB = 0 PORTB = 0 Usart_init(9600) RS485Slave_Init(PORTC, 2, 160) SetBit(PIE1, RCIE) SetBit(INTCON, PEIE) ClearBit(PIE2, TXIE) SetBit(INTCON, GIE) while true wend end. Terminalbol bármit küldök,a PORTBn ez látható(a PORTDt csak nyomonkövetésnek használtam,hogy tudjam melyik dat-ot látom PORTB kimeneteken): dat[0] = 10010110 dat[1] = 11111111 dat[2] = 00000000 dat[3] = 11111111 dat[4] = 00000000 dat[5] = 11111111 dat[6] = 00000000 dat[7] = 11111111
Sajnos ezt a fordítót nem ismerem, ezért az inicializációs részeket nem tudom jól írtad-e. A többi egyértelmű lenne, de nem sokat mond.
Többet segítene, ha lerajzolnád az áramkört, akkor is, ha tök egyszerű! Pontosan kéne, minden alkatrésszel, amit most használsz! Lehet, hogy nem is a program hibája a dolog. Ha kódot illesztesz be, akkor van erre egy gomb(Kód). Ha fölé mész az egérrel láthatod a használatát.
Ez így garantáltan nem jó, hogy a programmegszakítás kiszolgáló eljárásába teszel 8x0,5 másodperc késleltetést!
Egy egyáramkörös, kétállású (átkapcsoló) kapcsoló, de bőségesen elég, ha egy jumperrel oldod meg. Az általad kinézett kapcsolásnak van egy újabb változata is: itt. Csak olvasd végig az oldalt!
Hy!
Tudom hogy nem egészen PIC-es téma, de nem találtam másik topikot, ahol lenne szó róla. Találkozott már valaki a Silabs kontrollereivel, és ha igen milyenek a tapasztalatai? Én most kezdtem velük foglalkozni, és első látásra nagyon okos és könnyen programozható szerkezetek. Főként a PIC-ek nem feltétlenül érthető regiszterkiosztásaira és önkényesen átbillenő bitjeire gondolok. Szóval ha valaki használta, vagy csak ismer valami helyet ahol bővebb információt lehet szerezni róluk, az kérem jelezze akár itt a fórumban, akár privát üzenetben. Köcce!!! Idézet: „Főként a PIC-ek nem feltétlenül érthető regiszterkiosztásaira és önkényesen átbillenő bitjeire gondolok.” Azért erre kíváncsi lennék, hogy mi a regiszterkiosztás, ami érthető? Az önkényesen átbillenő bit meg tipikusan olyan, hogy nem olvastuk el az adatlapot...
Ez olyan volt, mintha besétálnál a Fradi szurkolók közé, majd -miután kicsit szidtad a csapatukat-, megkérdeznéd nincs egy felesleges belépőjük az MTK meccsre!
Elnézést kérek ha az előbb megsértettem volna valakit. És félreértés ne essék, én is használom a PIC-eket, sőt a legújabb 32eseket is, és a Microchip tényleg jó dolgokat készít.
De az én véleményem az, hogy 8051-52 es proci regeszteri áttekinthetőbbek, és a működésük is kicsit logikusabbnak tűnik. DE EZ CSAK AZ ÉN VÉLEMÉNYEM!!! És elismerem, rosz helyen tettem fel a kérédst.
Köszi szépen, megtörtént, már egy kicsit én is változtattam rajta
Mondjuk csak annyi, hogy mindkét oldalra egybefüggő GND került, ahogy a tiéden is van, csak a potyo-féle verzióban.
Ez egy nagyon ász beszólás volt, jót nevettem
A mellékelt kapcsolás probáltam.LTC485 helyett MAX485CPE,PIC18F452 helyett PIC16F877.3szor átnéztük,nem lehet benne hiba,ha csak nem hibás a kapcsolási rajz.Arra gyanitok,hogy a küldési móddal lehet gond.Probálgattam usart terminalbol is,de WindMill comDebug-al is.Abban a pillanatban,hogy egy már meglévö protokollal próbálkozok,csak egy 1es szám elküldésével a PIC egy rakás adatot fogad,de érdekes módon mindig ugyan azt,bármit is küldjek.Valszeg maga a protokoll okozza ezt a jelenséget,a visszajelzésekkel,meg stb...
Milyen megfontolásból tettél soros ellenállásokat, ráadásul 56ohm-okat a vonalba?
A másik kérdés, hogy az adatlapban ajánlott 120ohm-os lezárásokat miért nem használod? A többi részben nem látok hibát így hirtelen, viszont ezek elég komoly eltérések!
Szia!
- A jel útjában levő 56 ohm-os ellenállásokat ki kellene venni, helyettük a vonal legvégén levő vevőnél és az adónál (alsó LCT485-nél) a szimmetrikus vonal két pontja közé 100-120 ohm lezárás kell. - Polarizálni csak egy helyen kell, de lényegesen kisebb ellenállásokkal kb 1k, de nem mindig van szükség a polarizálásra. - Ha a RE negált jeleket is állítod, akkor a pic RC7 vonalát 10kohm -mal a tápjára kell húzni. A max232 T2in jelénél a beépített 400k sok, ide is tennék egy 10k-t a VCC felé. (Ha magas az LTC RE bemenete, a vételi vezetékek nagyimpedanciás állapotba kerülnek.) - 300m hosszú vezetéknél már a vezeték típusa sem lesz mindegy: sodrott érpáras, árnyékolt kábel kell legalább 0,5mm2 keresztmetszettel. A vezetézésnél nem szadad leágazásokat csinálni. A készülékek a lehető legrövidebb vezetékekkel csatlakozzanak a vonalhoz. Nem szabad a vezetéket több fajta vezeték darabból összetoldani. A teszthez: 1. - Folyamatosan adjon a pc karaktereket, és ellenőrizd le, hogy a max232 R2in és R2out kivezetésén megjelenik-e változás. - RTS jelet állítgatva, nézd meg, hogy az alsó LTC485 differenciális kimenetén megjelenik-e az adás. A max232 negál, de a PC com portjában is van egy illesztő, az is negál. - A soros ellenállásokat vedd ki, helyette a lezárás, ahogy írtam, az adatlap is. - A pic nélkül az RC2 jelet alacsonyra húzva nézd meg, hogy a jelváltás megjelenik-e az RC7-en, ha az RC2 magas, akkor a jelváltásnak nem szabad megjelennie. Itt van a hiba, ha nagyimpedanciás az RC7, akkor valamit venni szokott a pic.... 2. - Ugyanez fordítva. A pic gondolkodás nélkül adjon valamit, az RC2 legyen magas. Az RTS vezérlésével állítsd be az alsó LTC485 RE jelét alacsonyra. - Megjelenik-e az adás a pic RC6 lábán, a felső LTC485 DI bemenetén és a differenciális kimenetein? - Megjelenik-e az adás alsó LTC485 differenciális bemenetein és a RO kimenetén? - Megjelenik-e az adás a max232 T2In bemenetén? - Megjelenik-e az adás a max232 T2out kimenetein? Szia
Akkor ez okés lenne??Nekem gyanus ez a max232ös bekötés.Légyszi ha lesz egy kis idöd kacsincs rá...
Na igy már majd csak boldogulok,köszi a segitséget,csak egy dolog zavar.A mellékelt rajzom(rs485)amin rendben állnak az ellenállások,egy rendellenesség lehet.Ime egy adatlap részlete mellékelve.Melyik a helyes??Mert a rajzok szerint valami nem stimmel!!
Szia. Megvagyok az lpt portos égetővel. Még egyszer átnézek mindent aztán egy próba lesz. Ha bedugom és működik akkor mit fogok látni vagy ahhoz minden féle képpen kell a program meg egy pic? Valahol kiírja hogy ez az eszköz megfelelően csatlakozott? Ha mégsem jó akkor honnan fogom tudni kiírja azt is?
Idézet: „Még egyszer átnézek mindent aztán egy próba lesz.” Elolvastad hogyan kell az égetőt feléleszteni? Melyik programot akarod hozzá használni? (ugye a 18F2550-et akarod égetni?)
A cikkel elolvastam. A WPB_F18 programot akarom használni a 18F2550-hez (abból meg pickit2 lesz). A felélesztés gondolom az a beállítás ami a cikknél is ott van. De én arra lennék még kíváncsi, hogy ha simán bedugom a nyomtatóportba a csatlakozót akkor ha elkötés lenne vagy ha jó akkor az rögtön kiderül vagy ahhoz kell a progi és a beállítások után vagy felismeri vagy ha nem akkor gáz van?
A hardvert nem ismeri fel semmi. A leírásban olvasatod, hogyan kell végigcsekkolni a vonalakat műszerrel. Ehhez előtte rá kell csatlakozni az LPT portra. Ha ekkor már zárlatod van, akkor az baj, nyílván ezt megelőző mérésekel ki kell zárni(ellenállásmérésben kell vizsgálni a vonalakat a testhez, egymáshoz, és a pozitívhoz képest. Nem szabad 1Kohmnál kisebb értékeket mérj.
De ez már kicsit kezd a PIC-kérdések témaköréből kikerüni! Ha ilyen jellegű kérdésed van még, válasz más topicot, mondjuk a PIC égetők építésével kapcsolatosak közül valamelyiket(de ne a PICKit2-t, mert az sem az a téma, ahol LPT-s égetőket tárgyalnánk, főleg nem az ohm szintű kérdéseket!)
Ok, csak arra voltam kíváncsi, hogy csatlakozáskor a hiba észlelhető e. Ezek szerint nem, de ha már akkor is zárlat van akkor a port már azonnal tönkre is mehet? (Csak ennyit akartam még kérdezni.)
|
Bejelentkezés
Hirdetés |