Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
A reset reseteli a chipet - re-set, azaz ujra allitja, tulajdonkepp majdnem olyan, mintha elolrol kezdene mindent a bekapcsolas idopontjatol szamitva. Pl. arra szoktak hasznalni, hogy ha valami nagy hiba van, akkor megnyomja a felhasznalo a gombot es a keszulek ujra mukodni kezd.
OSC1-OSC2 - a PIC-ben van egy oszcillator aramkor, de kell neki egy kristaly vagy rezonator, hogy mukodhessen. Ezt kivulrol kell neki oda adni. Kristalynak ket laba van esert kell neki 2 lab a PIC-en... Kondik pedig az oszcillator aramkor stabil mukodesehez kellenek. Anelkul vagy be sem rezek a kvartz, vagy csak gerjed, vagy instabil.
Szia!
A mikrokontroller egy sorrendi hálózat, azaz állopotai vannak, és a működés lényege, hogy a bemenő jelek és a mostani állapot információjából állítja elő a következő állapot, illetve a kimeneteinek értékét. Belátható, hogy ugyanaz a bemenő sorozat különböző állapotból indítva más állapotokon és más kimenet előállításával mehetne végbe. Ezért nagyon fontos, hogy egy meghatározott, dokumentált kiinduló állapotból induljon a kontroller. Ezt a kiinduló állapotot állítja be a reset.. Az órajel határozza meg a működést, az állapotok között az órajel hatására történik meg az átmenet. Valóban a 10MHz órajel másodpercenként 10 000 000 periódust jelent, de a pic ekkor csak másodpercenként 2 500 000 állapotváltást végez. A kvarc a pontos órajel frekvenia tartására van az áramkörben. A kondenzátorok szerepe kettős: az oszcillátor biztos induítása és a felharmónikusok kiszűrése. A pontos és viszonylag nagy frekvencia előállítása kvarccal, rezonátorral lehetséges, ezekhez két ponton kapcsolódik az oszcillátor. Alacsonyabb frekvenciájú és nem annyira pontos órajelet egy R C oszcillátorral is meg lehet oldani egy kivezetés felhasználásával. Egyes típusokban belső oszcillátor is van, használatával mind a két kivezetés felhasználható más célra...
Hosszas turkálás után letiltottam minden funkciót ami az adott lábhoz tartozik, és még mindig nem ment.
Na ugyan mi volt a baja? A 430-as ellenálláson keresztül rövidre zártam
Köszi alakul a progi, csak nagyon lassan.
Köszönöm a válaszokat!
Akkor ha jól gondolom a B működése: Amíg a kondi nem töltődik fel addig végtelen nagy az ellenállása és szakadást jelent, tehát akkor a 100 ohmon fog folyni az áram. De amint a kondenzátor feltöltődik annak 0 lesz az ellenállása és mindig arra fog folyni az áram. És ha lekapcsoljuk az 5 voltot akkor kisül a kondenzátor és lesz még egy reset. Még egy kérdés: Hány voltot kell kapnia az MCLR lábnak,vagy az mindegy? Ja és még egy másik kérdés. Azt értem hogy megtudják csinálni hogy mindegyik kivezetésen 5 volt legyen párhuzamos kapcsolással, de azt hogy az áramerősség mennyi azt a PIC "dönti" el és annyi töltést vesz amennyi neki kell?
Forditva. Mig nem toltodik fel, vezeto. Ha feltoltodott, szakadas. Gondolj bele, a te gondolatmeneted szerint sohasem tudnad feltolteni...
Szia!
Kicsit máskép fogalmaznék: B: Kezdetben a kondenzátorban nincs töltés, ezért a feszültsége 0, ez a feszültség a 100 ohm ellenálláson át eljut a MCLR bemenetre. A MCLR bemeneten észlelt alacsony szint az alaphelyzet beállítás állapotban tartja a kontrollert. A MCLR bemenet nagy ellenállású, arra nem folyik jelentős áram. Közben a tápról a 10k-n keresztül a kondenzátor töltődni kezd, a feszültsége exponenciálisan emelkdik. Amikor a MCLR kivezetés eléri a magas szint feszültségét, a kontroller kijön az alaphelyzet beállításból és lekezdi futtatni a programot. A dióda a táp kikapcsoláskor kap szerepet. A kondenzátor feszültsége nagyobb lesz, mint a táp (+ a dióda nyitófeszültsége), akkor a kondenzátorban tárot tötlést a táp felé vezeti el....
Huh tényleg nem gondoltam át . De még mindig nem értem miért kell a kondenzátor :S. Miért nem elég csak egy kapcsoló amit ha átkapcsolok kapja az 5 voltot az mclr.
Szia!
A kapcsolóhoz kéz is kell minden induláskor. A kondenzátor automatikusan pótolja az emberi beavatkozást olyan ezetekben, amikor senki sincs a berendezésnél. Akkor is biztonságosan indul a kontroller, ha a tápfeszültség megjön - pl áramszünet után, stb ... Ha kapcsoló vagy nyomógomb is van a kondenzátorral párhuzamosan, akkor a kondenzátor pergésmentesítési funkciót is ellát. A pic -ekben van belső időzítő a resethez, így elegendő a MCLR lábat egy ellenállással felhúzni a tápra, de más kontrollereknél ez a kondenzátoros áramkör kell.
Normalis idoviszonyok eseten eleg LENNE. A mikrokontroller azonban a mikroszekundumos tartomanyban (milliomod masodperc) dolgozik. Itt mar fellepnek pl. olyan jelensegek, mint a prellezes.
A kontaktus osszeutkozik, letrehozza a kontaktot, majd ujra bont, a rugalmas erok kovetkezteben ezt parszor megismetli. Probald csak ki: egyszeru szamlalo, mikrokapcsolo, minden megnyomasra 1-et lep. Idonkent meglepodve latod, hogy a szamlalo 2-tol 10-ig is ugrik egyszerre, pedig csak egyszer nyomtad meg a gombot. Ez akkora gond, hogy kulon prellmentesito harver es szoftver megoldasokat kell bevetni. Szoval hogy a mikroprocid ne probaljon elindulni parszor az elso nehany milliszekundumban, ott a kondi, ami tulajdonkeppen atbillenti es ott tartja. Magyarul, csupan stabilizalo szerepe van.
Ez már kabaré! Idézet a PIC18F13K50/14K50 Data Sheet-ből:
Idézet: A szerencsétlen 20 lábú PIC18F14K50 mikrovezérlőnek nincs is D portja!!! „14.1 ECCP Outputs and Configuration The enhanced CCP module may have up to four PWM outputs, depending on the selected operating mode. These outputs, designated P1A through P1D, are multiplexed with I/O pins on PORTD. The outputs that are active depend on the CCP operating mode selected. The pin assignments are summarized in Table 14-2. To configure the I/O pins as PWM outputs, the proper PWM mode must be selected by setting the P1M<1:0> and CCP1M<3:0> bits. The appropriate TRISD direction bits for the port pins must also be set as outputs.”
Sziasztok,
Eddig csak 16Fxxx szériát programoztam, most kezdek játszadozni a 18Fxxx-el, konkrétan egy 18F4550-el. Van néhány dolog amit nem értek. Az első ilyen a LAT regiszter. Olvasgattam az adatlapot, de nem világos, hogy mire is a jó ez a regiszter. "The Data Latch register (LATA) is useful for read- modify-write operations on the value driven by the I/O pins." Van ennek valami gyakorlati haszna? Nem elegendő egyszerüen a PORTx regisztert használni? Kösz a segítséget.
Látom, te is csak akkor jössz ide, ha problémád van... Abból is lehet ám tanulni, hogy mások problémáját és a kapott válaszokat elolvasod, mert erről bizony már jónéhányszor volt szó: Link
Szia!
A LATx regisztert olvasva a portra kiírt értéket olvassa vissza (még azokon a biteken is, amelyeket bemenetnek használnak), míg a PORTx a kivezetéselen megjelenő szinteket olvassa be. Az alábbi problémák szoktak előjönni a PORTx kezelésekor, mivel a port állítása - a movwf PORTx utasítás kivével - előbb elolvassa a PORTx értékét (a kivezetésekről), majd elvégzi a műveletet és az eredményt visszaírja a PORT regiszterbe. - Egy portbiten a terhelés miatt nem a megfelelő szintet olvassa vissza az állítás. Vagy statikusan van nagyon megterhelve, vagy még nem volt ideje beállni, azaz kapacivítan van terhelve. - A portbit időben vált irányt, a portbiten egy bizonyos érték (legyen 0) van. A funkció miatt bemenetre kell váltani. A váltás után egy másik bitet állítunk, ekkor az első bit helyén a kivezetésekről olvasott értékkel (legyen ez 1) fog műveletet végezni, az eredmény ezt az első bitet is megváltoztathatja, pedig nem volt szándékunkban... - Ha az ilyen műveleteket (bcf, bsf, stb...) a LATx regiszteren végzed el, ezektől a problémáktók mentesülsz. A régi 16F szérián ilyenkor a port értékét egy memória rekeszben kellett változtatni, és az új értéket a movwf utasítással kiírni a PORTx-re.
Kösz a választ mindkettőtöknek!
Keresgéltem a fórumon is, de úgylátszik nem elég kitartóan, és tényleg nem szoktam mostanában fúrumokat olvasni, csak ha keresek valamit.
Sziasztok! Régen jártam itt, remélem tudtok segíteni most is!
Van egy GPS modulom, fgpmmopa6 típusú, ami soros 9600 baudon csatlakozik a PIC18F67J90-em uart1-es portjaira, vagy opciós esetben PC-re. PC-re, hyperterminálon nagyon szépen löki az NMEA mondatokat, de a PIC-re úgy jönnek fel, hogy 1-2, vagy több szemét-karakter is kerül a mondatba, így a checksum után dobhatom ki a fenébe. Elvileg szoftveresen minden jól van beállítva, meg ez a soros kommunikáció nem egy nagy dolog. SYNC, meg BRG bitek jól vannak beállítva annak tudatában, hogy a fordító x%-al eltolja a baudrate-et. Arra gondolok, hogy hardveres úton lehetne szűrni a jelet, de még ezt sem indokolja semmi sem, mert ahogy a pc-re be van vezetve a tákolt konverterem-en át, ott is el kéne szemetesednie a kommunikációnak, mégsem teszi. A gyárban készült panelom-on meg egyenesen 15 mm-en belül jön is a PIC a modul mellé. Mondjuk az igaz, hogy van egy-egy jumper útközben, hogy uart2-re is át lehessen rakni, ha muszáj. Ötlet? Kérdés? Köszi! googa Idézet: „annak tudatában, hogy a fordító x%-al eltolja a baudrate-et.” Ez mit akar jelenteni?
Azt jelenti, hogy amikor végezett a fordító, kiírja, hogy a baudrate 9600 helyett, 9766-ra sikeredett és ez 1.73%-os hibát jelent, 20MHz-es órajelnél. Ekkor, ha a BRGH 0-ra van lőve, akkor az SPBRG-t decimális 31-re kell állítani a datasheet szerint. Köszönöm a kérdést!
Akkor ezt nem a fordító tolja el, hanem a hardver annyit tud. Mondjuk ez az 1,73% még nem olyan nagy eltérés, a start-stop biteknek illene kihúzni a kommunikációt. De én azért megpróbálkoznék a helyedben valami más kvarccal is, amivel pontosabbra ki lehet hozni a 9600bps-t. Vagy próbáld úgy, hogy egyel nagyobbra veszed az SPBRG-t, hátha a GPS alulról közelíti a 9600-at.
Ha PC-ről adsz adatokat a PIC-nek 9600-on, akkor rendesen veszi?
Sziasztok.
Köszi az ajánlatot, oda is benézek. Igazad van, mert 16F -et akartam írni.
Idézet: „Tehat ha jol ertem PIC-et mar tudsz programozni ASM-ben?” Nem, sajnos nem.
Szia.
Köszi a tanácsot, akkor beszerzem a szükséges, dolgokat, és vagy a kezdős, vagy ebben a topicban jelentkezem.
Köszi Potyo! Muszáj tartanom a 20Mhz-et, mert így jön majd össze a teljes szoftverre való kapacitás.
Most hirtelen nem tudom mi lett az eredménye amikor próbáltam soroson a PIC-nek küldeni. (mindig éjjel mókolok vele) Megpróbálom most úgy, hogy folyton bekiabálom neki pc-ről ugyan azt a mondatot, aztán ha így is zavaros, akkor végigzongorázom az SPBRG-n a lehetőségeket, hátha összejön valahol.
De ha tennél egy 8MHz-es kvarcot és bekapcsolnád a PLL-t, akkor kapnál 32MHz-es működést, így nem lesz lassúbb a kontrollered, de más osztások jönnek ki és pontosabbá tudod tenni a soros port órajelét.
Kis excel táblám, lehet kísérletezgetni benne. Bár ez 16F -ekhez van, szerintem jó 18 -akhoz is.
Idézet: Pont erre való a PICCOLO projekt! Tanulmányozd át! „most kezdek játszadozni a 18Fxxx-el, konkrétan egy 18F4550-el. Van néhány dolog amit nem értek.”
Szia!
40MHz-es 18F252-t használok az alábbi beállítással 9600 Bauddal:
Szia!
A másik megoldás lehet az UART1 esetén a 16 bites Baud rate generátor használata: SYNC=0, BGRH=0, BRG16=1, BRG= .129
Ha nem 8MHz-eset, hanem 7.3728MHz-eset használsz, akkor 0% hibával beállítható az összes szabványos baud rate, és ezt még meg is 4x-ezheti az ember, a katalógusadatokon belül marad. Extrém esetben lehet 11.0592MHz-es kvarcot is használni, talán még ez is működőképes a 4x-es PLL-lel is. Vagy PLL nélkül szintén 0%-os hibát ad a 14.7456MHz-es, vagy a 18.432MHz-es kvarc.
Ezek mind olyan értékek, amik léteznek, kaphatók. Ha a soros porti kommunikáción kívül nincs más, ahol az időalap abszolút frekvenciája kritikus, akkor célszerű ezek közül választani. Megjegyzem, nekem még sosem volt a PIC soros porti kommunikációjával bajom belső 4 vagy 8MHz-es órajellel sem, tehát lehet, hogy nem is ez a baj forrása. |
Bejelentkezés
Hirdetés |