Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   762 / 1320
(#) trudnai válasza kisfejes hozzászólására (») Jún 23, 2010 /
 
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.
(#) Hp41C válasza kisfejes hozzászólására (») Jún 23, 2010 /
 
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...
(#) PoC_Zoli válasza icserny hozzászólására (») Jún 23, 2010 /
 
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
(#) nemgyuri válasza icserny hozzászólására (») Jún 24, 2010 /
 
Köszi alakul a progi, csak nagyon lassan.
(#) kisfejes válasza Hp41C hozzászólására (») Jún 24, 2010 /
 
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?
(#) bbalazs_ válasza kisfejes hozzászólására (») Jún 24, 2010 /
 
Forditva. Mig nem toltodik fel, vezeto. Ha feltoltodott, szakadas. Gondolj bele, a te gondolatmeneted szerint sohasem tudnad feltolteni...
(#) Hp41C válasza kisfejes hozzászólására (») Jún 24, 2010 /
 
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....
(#) kisfejes válasza bbalazs_ hozzászólására (») Jún 24, 2010 /
 
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.
(#) Hp41C válasza kisfejes hozzászólására (») Jún 24, 2010 /
 
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.
(#) bbalazs_ válasza kisfejes hozzászólására (») Jún 24, 2010 /
 
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.
(#) icserny hozzászólása Jún 24, 2010 /
 
Ez már kabaré! Idézet a PIC18F13K50/14K50 Data Sheet-ből:
Idézet:
„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.”
A szerencsétlen 20 lábú PIC18F14K50 mikrovezérlőnek nincs is D portja!!!
(#) zotyaxxx hozzászólása Jún 24, 2010 /
 
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.
(#) potyo válasza zotyaxxx hozzászólására (») Jún 24, 2010 /
 
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
(#) Hp41C válasza zotyaxxx hozzászólására (») Jún 24, 2010 /
 
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.
(#) zotyaxxx hozzászólása Jún 24, 2010 /
 
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.
(#) googa hozzászólása Jún 24, 2010 /
 
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
(#) potyo válasza googa hozzászólására (») Jún 24, 2010 /
 
Idézet:
„annak tudatában, hogy a fordító x%-al eltolja a baudrate-et.”


Ez mit akar jelenteni?
(#) googa válasza potyo hozzászólására (») Jún 24, 2010 /
 
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!
(#) potyo válasza googa hozzászólására (») Jún 24, 2010 /
 
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?
(#) _ampervadasz_ válasza zzz hozzászólására (») Jún 24, 2010 /
 
Sziasztok.

Köszi az ajánlatot, oda is benézek.

Igazad van, mert 16F -et akartam írni.
(#) _ampervadasz_ válasza trudnai hozzászólására (») Jún 24, 2010 /
 
Idézet:
„Tehat ha jol ertem PIC-et mar tudsz programozni ASM-ben?”


Nem, sajnos nem.
(#) _ampervadasz_ válasza Hp41C hozzászólására (») Jún 24, 2010 /
 
Szia.

Köszi a tanácsot, akkor beszerzem a szükséges, dolgokat, és vagy a kezdős, vagy ebben a topicban jelentkezem.
(#) googa válasza potyo hozzászólására (») Jún 24, 2010 /
 
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.
(#) potyo válasza googa hozzászólására (») Jún 24, 2010 /
 
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.
(#) googa válasza potyo hozzászólására (») Jún 24, 2010 /
 
Na ez igen, köszönöm!
(#) lidi válasza potyo hozzászólására (») Jún 24, 2010 /
 
Kis excel táblám, lehet kísérletezgetni benne. Bár ez 16F -ekhez van, szerintem jó 18 -akhoz is.
(#) icserny válasza zotyaxxx hozzászólására (») Jún 24, 2010 /
 
Idézet:
„most kezdek játszadozni a 18Fxxx-el, konkrétan egy 18F4550-el. Van néhány dolog amit nem értek.”
Pont erre való a PICCOLO projekt! Tanulmányozd át!
(#) Hp41C válasza potyo hozzászólására (») Jún 24, 2010 /
 
Szia!

40MHz-es 18F252-t használok az alábbi beállítással 9600 Bauddal:
  1. F_OSC   EQU     .40000000       ; Oscillator frequency in Hz, 10.000000 MHz to OSCI, HSPLL oscillator mode
  2. BAUD    EQU     .9600   ; Baud rate of serial line
  3.         bcf             TXSTA,BRGH                      ; If BAUD <=.9600 use low  Baud rates
  4.         movlw   (F_OSC/.64/BAUD)-1
  5.         movwf   SPBRG                           ; Set up Baud Rate generator
(#) Hp41C válasza googa hozzászólására (») Jún 24, 2010 /
 
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
(#) szilva válasza potyo hozzászólására (») Jún 25, 2010 /
 
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.
Következő: »»   762 / 1320
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