Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Amikor magas prioritású megszakítás jelenik meg, akkor a hardver automatikusan menti a W, STATUS és BSR regiszterek tartalmát, a RETFIE FAST hatására pedig ezeket visszaállítja a rutin végén. Ha viszont csak RETFIE-t írsz, akkor a W, STATUS és BSR tartalma az lesz a főprogramba visszatéréskor, amin a megszakítási rutin végén hagytad, tehát a főprogram számára el lesznek rontva, mert nem az lesz bennük, mint ami a megszakítás bebillenése előtt volt. Ha csak RETFIE-t használsz, akkor neked kell gondoskodnod ezen regiszterek mentéséről a megszakítási rutin elején és a visszaállításukról a RETFIE előtt.
Ezt nem is tudtam! Eddig ezt szoftveresen csináltam...
De csak magas prioritásnál működik a dolog, arra figyelj! Alacsony prioritásnál kézi mentés, visszaállítás és RETFIE.
Helló minden digitális-áramkörökben jártas fórumtársnak. Én, mint analóg ember, be szeretnék égetni egyetlen egy PIC-et. Erről a volna szó. Esetleg egy egyszerűbb égetővel próbálkozzak vagy inkább próbáljak valakit megkérni arra hogy beégesse? (kifizetném) De "nehezítő tényezőként" majd még később szeretnék foglalkozni PIC-ekkel. Valakinek valamilyen ötlete? Előre is köszönöm.
Ha később akarsz kontrollerekkel foglalkozni, de egyelőre csak egy chipet akarsz beégetni, akkor talán ez lenne a legjobb választás: Link Ez később jó lesz majd égetni a gyakoribb chipeket, vagy ha komolyabban akarsz foglalkozni vele, akkor akár egy Pickit2 építésénél vagy javításánál is jól fog jönni. De ha mégsem akarsz pic-el foglalkozni, akkor is egy elég egyszerű égető, filléres alkatrészekből. Persze ha van a közelben valaki, aki beégeti, akkor az jó, de kb. ugyanannyiba kerül egy ilyet összerakni, mint az égetni való chipet oda-vissza postázni...
Helló. Köszönöm szépen. Tényleg nem annyira vészes, és úgy látom hogy tényleg sok procit támogat. Hát egy "személyes" ismerősöm sem foglalkozik PIC-el, úgyhogy megépítem az égetőt. Majd ha eljutok a tényleges megvalósításhoz, akkor még zavarok a szerencsétlenkedéseimmel. Még egyszer köszönöm a segítséget.
Szia!
Pedig az előző projectednél volt róla szó: Ha jól emlékszem azzal kapcsolatban, hogy nem kell előtte az INTCON GIE (GIEH) vagy PEIE (GIEL) bitjeit beállítani...
Szia!
- Az LCD memóriájába akarakterek ASCII kódjait kell beírni. A számok esetében az ASCII kód a számjegy bináris kódja + 0x30. Nem kell külön kiírató rutin minden számjegyhez. - A számolás mehet BCD -ben is, ekkor egy vagy két decimális számjegy lehet egy byte-on eltárolva. A swapf utasítás a két 4 bites számjegyet cseréli fel. - A bináris számolás 16 bitre a legegyszerűbb, de ekkor egy Bináris - BCD átalakító rutin kell még. Már többször ajánlottam ezt a kincses bányát.....
Szia Hp41c!
Közben véletlenül sikeresen töröltem a hsz-emet. Agyaltam még egy kicsit és egész jól le tudtam egyszerűsíteni a vizsgálatot. Viszont a link amit ajánlottál, igen hasznos lesz a későbbiekben! Köszönöm!
Sziasztok!
Kis programom firkálása során az alábbi üzenetet dobta az MPLAB: Message[306] E:\SAJAT\PIC_ALAPOK\PROJECT\64X128JATEK.ASM 3189 : Crossing page boundary -- ensure page bits are set. A program lefordul, beégetve és visszaolvasva OK a tartalom, mése fut a progi. Milyen biteket és hol kell beállítani?! kb. 1,5 hónapja foglalkozok PIC-el és eddig ezzel az üzenettel nem találkoztam. PIC16F877-et használok. Kérlek segítsetek egy lelkes amatőrnek!
Szia!
Ha belekukkantasz az MPASM assembler doksijába és kikeresed a 306- os üzenetet (hibák szekciónál keresd), akkor láthatod, hogy ez az üzenet azért született, mert a programodban van olyan részlet, amely nem a nullás lapon van a programmemóriában. Ebben az esetben a programmemóriát lapozni kell, pl. a pagesel makró segítségével. Az assembler doksija tartalmazza ennek használatát, mintapéldákkal illusztrálva. Ebben a topikban is bizonyosan volt már róla szó.
Szia!
Ez nem hiba, hanem tulajdonság. - A 16F családba tartozó kontrollerek program memóriája 2K szavas lapokra van felosztva. Ha egy lapról a másikra szeretnél ugrani, vagy egy másik lapon levő szubrutint kell hívni, akkor nem elég a goto ill. a call utasíás. Ezek az utasítások a cím felső két bitjét a PCLATH regiszterből veszik. Tehát a másik lapra történő hivatkozás előtt a PCLATH regiszter 4. és 3. bitjeit be kell állítani. - Az eljárás hívás utáni visszatérésnél a return vagy retlw utasítás az egész címet a stack -ből kiszedi, de a következő ugrás vagy call előtt a PCLATH -t újra be kell állítani. - A megszakítási rutinban a PCLATH értékét is menteni és visszaállítani kell, ahogy azt a W és a STATUS regiszterekkel csináljuk. Azonban a megszakítási rutin első ugrása elött a PCLATH -t a 0 lapnak megfelelően kell beállítani, hogy a kiszolgáló rutin ugrásai is jó helyre történjenek.
Megnéztem, átírtam.
Most már jó! Köszönöm!
Üdv!
Az AN589-es programozómmal lehet rájöttem mi a probléma. Az előfordulhat, hogy a párhuzamos portom kevés feszültséget ad ki magából? Ugyanis, amikor a hardver tesztelésénél mindent bepipálok, akkor megvan az mclr- en a 13,5 V, megvan a +5V tápfeszültség, az órajel lábon pedig csak 3,6 V és az adatlábon pedig még ennél is kevesebb 2,6 V jelenik meg. Lehetséges, hogy ez a probléma? Ha ez a gond, akkor úgy meg szabad oldani, hogy az rb7 és rb6 lábra egy tranzisztoron keresztül jutnak el a jelek? A választ előre is köszönöm. Üdv.: mate_x
Szia!
A kapcsolásban a D2, D0 és a data (PGD) vonal között egy 74LS244 van, ami az 1.4V -nál magasabb feszültséget magas logikai szintnek tekint. Ugyanez a helyzet a D5, D1 és a CLOCK (PGC) vonal között is. Ha az U2 valóban 74LS244 vagy 74HCT244 akkor működnie kellene. Ha erre a helyre 74HC244, 74C244 került, akkor a magas logikai szint kb a fél tápfeszültség, akkor előfordulhat, hogy a port nem ad ki elég magas szintet. A tranzisztoros megoldás túl lassú lesz. Az U2 -nél van 100nF kerámia kondenzátor a táp és a fölt lába között? Ez a leírás 1997-ben készült, a maiaknál lényegesen lassabb gépek korszakában. Akkori operációs rendszerek nem kerestek nyomtatót a párhuzamos porton. Érdemes lenne egy max. Pentium I @ 75Mhz gépen DOS alatt kipóbálni....
Szia!
A programozási leírás első lapján is ez a bekötés szerepel. Az adapternél gondolj arra is, hogy használható lesz még más 8, 14, és 20 lábú kontrollerekhez is. Érdemes ezért egy 20 lábú foglalatot felhasználni. A rövidebb kontrollereket úgy kell beletenni, hogy az 1. lábuk a forlalat 1. lábához kerüljön....
Hali
Itt egy ilyen bovites. En PK2-hoz hasznalom, de ertelemszeruen mas programozohoz is hozza lehet gyogyitani. Hasznalhato az altalanos DIP tokos PIC-ekhez. 10Fxxx kivetel. Udv Vili
Szia!
Köszi a választ. A 100nF-ád tényleg nem volt benn , most betettem, de ugyanaz van mint az előbb. D0-on van 2,6 V, D2-n van 0,1 V, így RB7-en lesz 2,6 V. RB6-nál szintén ugyanez a helyzet, csak a feszültségek kis mértékben eltérnek. Az ic pedig SN74LS244N. Ezek szerint rossz az IC-m? Vagy hogyan tudnám letesztelni az IC-t, hogy működik-e? (Nem értek annyira ezekhez a buszmeghajtó áramkörökhöz, esetleg egy magyar nyelvű leírás?) A választ előre is köszönöm. Üdv.: mate_x
Nekem az a 2,6V az RB7-en nagyon furcsa. Pic nélkül próbálod? Nincs ott valami, ami terheli azt a lábat? Mivan, ha az ACK-t lekötöd? Mert ha a D2 1V alatt van, a D0 pedig 2V felett, akkor az RB7-en kb. 3,5V-nak kellene lennie, mint ahogy az RB6-on is van.
Szia!
Pic nélkül próbáltam, ACK nélkül 3,7 V !
A 3,7V az már jó, de nem értem, hogy az ACK miért terhel, amikor az bemenet. Tegyél egy-egy 1k felhúzót az RB6 és RB7 lábakra a táp felé és nézd meg úgy is bekötött ACK lábbal.
Azt meg tudná mondani valaki, hogy a timer1 modulhoz be lehet-e kötni kvarcon kívül máshogy léptető órajelet? Gondolok itt egy sima multivibrátorra, mivel 10kHz kéne, olyan kvarcot pedig nem találtam.
Be. A T1CKI lábra vezeted az órajeledet, a T1CKO lábat meg szabadon hagyod. De olyat is lehet csinálni, hogy a 32768Hz-es kvarcot használod, és kezdőértékkel töltöd fel a Timer1-et, és mondjuk minden negyedik megszakításnál csinálsz valamit. Ez akkor ugyanaz, mintha 10kHz-el hajtanád. Meg ha külső multivibrátor belefér, akkor már futhat a pic főoszcillátora folyamatosan, és akkor onnan is ki lehet kezdőértékkel hajtani a Timer1-et, hogy neked megfelelő idő után csorduljon túl. Szóval nekem kicsit furcsa amit akarsz csinálni...
Az a lényeg, hogy a timer1 100us-onként számoljon egyet. A kezdőértékes megoldás azért nem kedvező itt, mert jóval többet kéne programozni, mivel egy A/D értékkel lenne összehasonlítva (10 bit) CCP komparátorral, és minden egyes A/D értékhez másmilyen értékkel kéne feltölteni kezdetkor a timer1-et, és az a vége általában, hogy bizonyos értéken felül/tatományban elcsúszik a két érték, és néhány helyen nagyobb lesz a hiba.
Az egész pedig arra kell, hogy egy potival állítható késleltetőt készítsek, aminek az értékét egy LCD-n jelzem ki.
Mekkora késleltetésről van szó, amit a potméterrel kellene állítani? Ilyen tól-ig értékre gondolok, hogy 100us-1ms között, vagy mondjuk 1s-10s között?
Egyelőre 100us-100ms. De lehetséges, hogy jól jön, ha van egy lehetőség a tartományok közti váltásra.
Akkor Timert beállítod 100us-os túlcsordulásra, egyesével növeled egy változó értékét minden megszakításkor, és amikor a változó elérte az ADC eredményét, akkor telt le a potméterrel beállított késleltetés. Tartományok közötti váltásnál meg újraszámolod a Timer kezdőértékét és kész. Nem értem, minek bonyolítani ezt CCP-vel, komparátorral meg multivibrátorral...
|
Bejelentkezés
Hirdetés |