Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Hidd el nem a nyelven áll, vagy bukik a dolog!
Sziasztok.
Van nekem egy 16F676 picem. 4,5V hajtom de csak az RC5-ös lábon jön ki az a feszültség. Az RC4,RC3,RA1-es lábakon csak 3,3V jön ki. Ez mitöl lehet?
Szia!
A lábak terhelésétől... Illetve, ha voltmérővel méred, akkor a kimenőjel átlagértékét méred. Mi van az RC4, RC3 és az RA1 lábakra kötve? Milyen jellel vezérled őket? Szia
Én SDCC-ztem mostanában, és rögtön az első ilyen projektemben futottam bele érdekes fordítási eredménybe. Logikai értékekkel és bitekkel mintha nem jól bánt volna. A konkrét esetre most nem emlékszem, de trudnai-val nézegettük a C forrást és a lefordult asm kódot, és sehogy sem stimmelt. Szóval vannak fenntartásaim vele kapcsolatban, annak ellenére, hogy valóban használhatónak tűnik.
Az RC4-re egy 1k ellenálláson keresztül egy BD139 tranzisztor. Igy probáltam ki RC3és RA1 lábon is. Azok üresek.
Szia!
Milyen program van benne? Az RA1 és RC3 analóg funkcióját letiltottad? Szia
Hali
Nem esetleg valami PWM? Szkoppal kellene megnezni, vagy esetleg a forrast ha lehetne latni. Lehet hogy ott van a problema (SW) ? Ha siman bekapcsol hosszu idore, akkor biztos a tap erteket tudod merni. Ha magasabb frekvenciaju valtozo kitoltesu jel van a labon akkor tudsz feszmerovel kevesebbet merni a kitoltesnek megfeleloen. A tapfesz az nem erdekes mert 2 -5.5 voltig uzemkepes. Udv Vili
Sziasztok!
Simán csak kapcsol az a láb. Az RC5 és az RC4-el akarok vezérelni egy h-hídat.Olyat ami itt a kapcsolásokba van. Eddig csak egy led volt a lábakon. Nincs elméletileg pwm. A programot flowcodeval csináltam. Annak felrakom a C és Asm-jét. Nemtudom, hogy a RA1 és a RC3 analogja tiltva van e. De az RC4-en nincs analog. Vagy van?
Na kiprobáltam ugy hogy simán csak adok a RC4 és RC5-nek 1-et. Igy tök jol megy. Ki is jön a feszültség. Az eredeti programban is egyhelyen vannak, ott meg nem megy.
![]()
Hali
Haat ? Ezeket a programokat sajnos eleg nehez ertelmezni. Probalj meg esetleg asm-ben faragni egy bit-billegteto programot es azzal kiprobalni a kapcsolast. Talalsz sokat itt a forumon. Lehet hogy nem HW problema lesz. Ezek az ilyen-olyan ugymond grafikus programozo valamik (parsic, Flowcode, etc. ) tesznek am bele mindenfele csavarokat a programba. Visszaneztem mar sok leforditott listat. Hat erdekes dolgokat csinalnak. Probald ki a PIC-et egy LED_villogtato.asm progival MPLAB-ban leforditva, lehet hogy rajossz a hibara. Udv Vili
Sziasztok
Ha az:
bitet beállítom, az azt jelenti, hogy ha folyamatban van egy megszakítás kiszolgálása, akkor a közben beérkező megszakításokat figyelmen kívül hagyja és nem is dolgozódik fel? ![]()
A flowcode file-t nem tudom megnyitni, így a C-t néztem. Jól látom, hogy az interruptban van benne az RC4 és RC5 beállítgatása? A portbit állítása előtt a tris-t is állítja a kód. Ha túl sűrűn kerül ide a vezérlés (akár még ugyanazzal a kiírandó állapottal is), akkor elképzelhetőnek tartom, hogy ezek miatt tüskék vannak a kieneteken és nem folyamatos DC szint.
Valami 24F vagy nagyobb számú lehet, azokban van. Viszont én meg nemtudom, hogy mit jelent a Nested Interrupt...
An interrupt can happen while executing an ISR. This is called a nested interrupt.
ISR - interrupt service routine hirtelen ezt találtam google-ban ha jól értelmezem a dolgokat akkor a nested interrupt, az az amikor egy megszakítás kiszolgálás közben bekövetkezik egy másik megszakítás (vagy költői kérdés volt?) innen: Bővebben: Link szerk: bár ez lehet egyértelműbb: Bővebben: Link
Én is ezt találtam közben, de akkor sem értem. Van több prioritásra lehetőség, akkor ha magasabb prioritású megszakítás jön, akkor az alacsonyabb szintű kiszolgálása felfüggesztődik. Nekem ez már önmagában eléggé erre a nestedre hasonlít. Vagy ez az lehet, hogy ha ugyanazon forrásból jön be több? Pl. soros porton bejött valami, de még tart a feldolgozása, és ha közben jön mégegy, akkor az előző felfüggesztődik és a frissen beérkezett kezelője fut le? Ez meg elég sok problémát okozhat...
Üdv!
Nagyon szépen köszönöm, jól működik! ![]() ![]()
Hali
Szivesen. Ez sokszor elofordul a PIC doksikban, hogy a peldak nem teljesen jok. En is sokszor szivtam emiatt. Udv Vili
Valószínűleg a nested-nél azonos prioritásszinten lévő interruptok is megszakíthatják az interrupt kiszolgálást. Sőt, extrém esetben ugyanaz az esemény is kiválthat újabb interruptot még az előző ugyanilyen eseményt feldolgozó interrupt közben. Ilyenkor az interrupt-kiszolgáló rutinokat már muszáj reentránsan megírni, különben fejreáll az egész az első "nested" interrupt beesésénél.
A 18F-eknél a kétszintű prioritásban a magas prioritású megszakíthatja az alacsonyat, fordítva nem, és azonos prioritásúak sem szakítják meg egymást.
viszont szilva hozzászólása elgondolkodtató... Idézet: „Ha az INTCON1bits.NSTDIS=1; bitet beállítom...” Az Interneten már minden le van írva, csak meg kell találni! ![]() Lásd pl. itt: http://esca.atomki.hu/PIC24/interrupts.html, az általam összeállított oldalon: Idézet: „Ha egy programmegszakítási kérelem érkezik, akkor annak prioritása magasabb kell, hogy legyen, mint az éppen futó program aktuális prioritása (IPL<3:0>), hogy érvényesüljön. Ha egyidejűleg több, azonos prioritású programmegszakítási kérelem érkezik, akkor közülük az alacsonyabb sorszámú vektorhoz tartozó (lásd az 1. táblázat VEC oszlopát!) érvényesül elsőként. Mielőtt a programmegszakítást kiszolgáló programrészre kerülne a vezérlés, az aktuális IPL elmentésre kerül a veremtárban a visszatérési címmel együtt, s az IPL<3:0> bitekre beíródik az elfogadott programmegszakítási kérelemhez tartozó prioritásszint. Ez megakadályozza, hogy a programmegszakítás kiszolgálását hasonló vagy kisebb prioritású interrupt félbeszakítsa. Magasabb prioritású interrupt azonban megszakíthatja, s ezt az interruptok egymásba ágyazásának (nesting) nevezzük, ami egyébként letiltható az INTCON regiszter NSTDIS bitjének (INTCON1<15>) '1'-be állításával. C nyelven ez _NSTDIS = 1; formában írható.”
Igen, ez így van, és valószínű, hogy amit szilva és potyo ír az is, de igazán jó lenne, ha steev leírná melyik PIC-ről van szó, mert akkor nem kéne annyit találgatni.
Juhej, vegre van netem, tudok valaszolni
![]() Igen, mindegy, hogy a szilikon altal tamogatott tobb szintu interrupt-rol, vagy a szoftveresen megvalositott "bele szakithato" ISR-rol beszelunk, a nested az nested (egymasba agyazott magyaran). Tehat ha ugy irod meg az ISR-t, hogy manualisan ujra engedelyezed az interruptot, vagy stack manipulacioval ered ugyanazt a hatast el, a lenyeg, hogy ha az ISR felbe szakithato egy masik megszakitasi kerelemmel, akkor az nestednek minosul. Idézet: Igen, PIC24/dsPIC33 esetén az interupt prioritások szintje 0-tól 15-ig terjed (ebből a 0-7 terjedő szinteket lehet programozottan beállítani, a magasabb szintek a kivételeknek vannak fenntartva (pl. nullával történő osztás stb.).„Van több prioritásra lehetőség, akkor ha magasabb prioritású megszakítás jön, akkor az alacsonyabb szintű kiszolgálása felfüggesztődik.” Megszakítani mindig csak csak magasabb prioritású kérelem tud (tehát az azonos szintű kérelem nem érvényesül, amíg a kiszolgálás be nem fejeződik).
Ezekszerint az NSTDIS bittel gyakorlatilag a prioritásos megszakításokat lehet tiltani/engedélyezni. De ez miért jó így pluszban? Nem lenne bonyolult mutatvány az IPCx regisztereket sem végigírni induláskor egy ciklusban ugyanazzal a tartalommal.
watt: én a PIC24FJ128GA010 adatlapot néztem, de szerintem ebből a szempontból bármelyik 24F lehet.
[OFF]Aaa, ezt Te sem mondtad komolyan
![]() Idézet: „Sőt, extrém esetben ugyanaz az esemény is kiválthat újabb interruptot még az előző ugyanilyen eseményt feldolgozó interrupt közben. Ilyenkor az interrupt-kiszolgáló rutinokat már muszáj reentránsan megírni, különben fejreáll az egész az első "nested" interrupt beesésénél.” Azért ez elég veszélyes mutatvány szerintem ![]() ![]()
Persze, ezért nincs is ilyen.
![]() ![]() |
Bejelentkezés
Hirdetés |