Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Lehet az a baj, hogy túl sokat akarok egyszerre.
Először ez volt a gond, de már egy ideje rájöttem hogy az alapoknál "lemaradtam" ezért a kezdő részeket igyekszem értelmezni. Bár nem is birok most annyit foglalkozni vele, mint kellene. (érettségi, felvételi, suli stb..) Majd a nyári szünetben.
Az MPLAB-ban létrehoztam egy új projektet, de a programkód minden betűje fekete és a "Text mode"-nál nem is tudom átállítani semmire. Miért?
Ha minden igaz, és jól olvstam, akkor színes lesz, ha elmented a fájlt .asm kiterjesztéssel.
Persze lehet, hogy tévedek. Azért egy próbát megér.
Ok.. Közben tanulgatok én is, bár még ott nem tartok ahol te
Egyszerűen nem értem ezt a megszakítás dolgot hogy hogyan működik. Illetve a megszakítást még nagyjából értem csak a lapváltást nem hogy miért kell hozzá...
Tudna valaki küldeni nekem egy egyszerű mintaprogramot asm-ben, amiben van megszakítás-kezelés valamelyik TIMER-ra?
A lapozas azert kell, mert a PIC kulonbozo lapokon tarolja a dolgait. Mint egy konyv: Egy lapon korlatozott a sorok, bekezdesek szama, ezert tobb lapja van egy konyvnek. Ha egy bizonyos dologra kivancsi vagy, elobb oda kell lapozni, hogy el tudd olvasni.
Megszakitasnal kb ugy lehet folytatni ezt az analogiat, hogy olvasod a konyvet, kozben jon valaki aki mondja: "Figyi, bocsika, meg tudnad nekem nezni milyen autoban ul a foszereplo?". Te meg megjegyzed hol tartottal (egy konyvjelzot beleteszel), majd atlapozol arra az oldalra ahol arrol van szo, hogy ki milyen autoban ul, majd mikor vegeztel a konyvjelzo alapjan vissza megy arra az oldalra, ahol eppen tartottal. Mivel nem tudod, hogy epp mikor fognak felbe szakitani, ezert kell a konyvjelzo -- mindig vissza talalsz oda, ahonnan megszakitottak. Ez ugye a kontextus mentesnek felel meg a PIC-eknel...
Maga a megszakítás elmenti a visszatérési lapot is, csak a megszakításból hívott rutinok esetén kell a lapot beállítani, de ezt is csak 18F-től kisebb PIC-ek esetében. Rosszul tudom?
Sziasztok!
Vannak olyan regiszterek, amiket a nagyobb pic-ek elmentenek (WREG, STATUS, BSR), de itt többről van szó. Minden olyan regisztert, amit a megszakítási rutin megváltoztat (kényszerűségből - azaz nem a megváltoztatása a cél) menteni és visszaállítani kell. Ezeket már nem menti a hardver. Az előbbi analógiájára: legyen többkötetes a könyv, amit olvasunk, az autó egy másik kötetben szerepel. Nem elég a lapszámot (PC), hanem a kötetazonosítót (PCLATU, PCLATH) is menteni kell. Továbbmentve ilyen regiszterek még az FSR, FRS0..3H és FSR0..3L - ha a megszakítáasi rutinban indirekt címzés is van, ha még netalán szorzunk is, akkor a PRODH, PRODL stb... Nagyobb PIC-ek esetén többszintű lehet a megszakítás: a magasabb szintű félbeszakíthatja az alacsonyabb kiszolgálását - általában csak egyszeri HW mentésre van lehetőség. Analógia: Miközben az auto típusát keressük, vásvalaki egy másik szereplő ruhája iránt érdeklődik... Sziasztok
Hat ezert nem szeretem a kifejezeseket magyaritani Mivel a "lapozas" ugye a "page", de azt hittem, hogy a ram lapokra, azaz a "bank"-okra vonatkozik a kerdes
Amugy igen, a stacken a teljes cim eltarolodik igy a return jol ter vissza, de ettol fuggetlenul azt hiszem a PCLH nem fog valtozni. Tehat ha az ISR azt modositja akkor azt is bel ekell venni a kontextus mentesbe. De nem tudom, mar kezdek rozsdasodni - remelem egy honapon belul megint aktiv leszek
Azért Attila kérdése nem pont ez volt, és én sem azt állítottam, hogy ha ilyen regisztereket használunk a megszakításban, akkor azokat nem kell menteni(sőt bármely RAM rekeszünket is el kell, ha megszakításban hazsnálnánk, pl. RAM helyszűke miatt), csak azt, hogy a megszakítás alapból elmenti az egész visszatérési címét és nem rontja el az említett regiszetereket. Tehát ha a megszakításban nem piszkáljuk ezeket, akkor nem szükséges menteni. 18F-eknél nem szükséges ezeket a regisztereket piszkálni, kivéve ha indirekt címzést, vagy ha retlw-s tömbkezelést használunk, amit ugyen nem túl elegáns, mikor erre külön utasítások vannak!
Naszóval ennyit akartam ezzel kapcsolatban mondani!
Miért akarsz lapozni(lapozás a program flash memóriát érinti, a bankváltás a RAM-ot. Melyikről van most szó?) a megszakítás alatt, mit szeretnél?
Jól (nem)értetted a kérdést, és én is elbizonytalanodtam a lap és bank ügyben.
Volt korábban ez a problémám: Bővebben: Hozzászólás
Erre azóta kaptam válaszokat, de bármennyiszer is olvasom át őket, nem értem igazán a dolgot. A probléma gyökere az, hogy a megszakításban hívott tábla nem működik rendesen mert teljesen más helyre ugrik vissza és nem értem hogy hogyan lehetne ezt kiküszöbölni. Ezért szerettem volna kérni egy biztosan működő, megszakítást kezelő rutint tartalmazó programot hogy abból lelessem hogy mit ronthattam el.
Az oldalamon bemutatom az adattábla kezelését 18F-ek esetében. Ha ezt használod, akkor nem kell mentened, mert a tábla pointerek tartalmazzák a megfelelő címet, és így nem sérülnek meg a lapmutatók értékei. Sokkal egyszerűbb és gyorsabb az adatok kezelése.
Sziasztok!
Az lenne a kérdésem, hogy elég-e ha az olcsóbbikat veszem meg kezdésnek? Vagy nem.Bővebben: Link
Egyrészt a hivatalos forgalmazónál ez a PIC 330Ft nettó(ha már itt is így van megadva), másrészt ebben nincs A/D. Kezdéshez én 18F-et ajánlanék(Keress rá az okokra, kismilliószor leírtuk az indokainkat. Az oldalamon is olvashatsz erről, ott típusokat is említek.).
Szia!
Feltűnt nekem, hogy 18F -es pic-et programozol, és a 16F sorozat dokumentációját olvasod.... Mintha ezeket a kérdéseket egyszer már megválaszoltam Neked: - A 18F-en egy goto utasítás 4 bájtot foglal, a címzés byte-os: azaz a memóriában egy goto mondjuk a 0x100 címre kerül, akkor a következő utasítás a 0x104-re fog kerülni. TABLA2: - A működés látszatát kelti, de valójában nem oda ugrik, ahova szeretnéd (az első két goto még jó helyre ugrik.) A goto kódolása olyan, hogy a második szóra való ugrás egy nop végrehajtásával egyenértékű (2. goto ezért működik). A harmadik a másodiknál megadott címre ugrik..... - Javasoltam, hogy a goto helyett használj bra utasítást, ami csak két byte - működik - kipróbáltam a szimulátoron az előző verziódat. - Nincs feltöltve a PCLATH, PCLATU: ajánlottam, hogy az addwf PCL,f előtt olvasd ki a PCL-t egy változóba - ez feltölti a PCLATHU és PCLATH regisztereket. Szerencséd volt itt, a címkék mind az első 256 program bájton voltak (az előző verziót próbáltam...). TABLA1: - Nincs feltöltve a PCLATH, PCLATU: ajánlottam, hogy az addwf PCL,f előtt olvasd ki a PCL-t egy változóba - ez feltölti a PCLATHU és PCLATH regisztereket. Itt már nem volt szerencséd (az előző verziót próbáltam...). A megszakítási cím a 16F dokumentációjából származik, nem a 18F -éből. Még azt is kipróbáltam, hogy a megszakítás tényleg a 0x008 ill. 0x018 címekre ugrik. Most nem emlékszem pontosan melyik szintű megszakítást használtad, de a 0x08-ra tettem egy ugrást a 0x18-ra. A megszakítási rutint áttettem a 0x18-ra. Ekkor mindegy melyiket állítod be, mindkettőnél a megszakítási rutin fog lefutni. A megszakítási rutinban nem kell állítgatni a GIE -t. Még egyszer ajánlom, hogy állítsd be a MPlab szimulátorát és próbáld ki Te is a programot lépésenként futtatni: Töltsd be a projectet. Debugger / Select tool / MPLAB SIM. A beállítás után újra le kell fordítani a programot. F6 - Reset , F7 egy lépés - a szubrutin hívásba belép, F8 - egy lépés - a szubrutin hívásba nem lép be. A sor elejére (a sötétebb részbe) kétszer kattintva lehelyezhetsz töréspontot - a program futása megszakad, ha a töréspontra ráfut. Kb. egy óra múlva működni fog... Szia
Visszaolvasgattam és láttam, hogy Attila86-nak ajánlottad a 18f2550-et, szerintem az nekem is bőven elég árban is jó ! Mit rendeljek még kezdéshez. Eddig ledek nyomógombok, 7szegmenses kijelző, potik, Rs232. Mi kellmég?
Ezt így nem lehet leírni. Most is az oldalamat ajánlom, ahol egy fajta próbapanelt is találsz. Aztán azt kötsz rá, amit akarsz. Persze érteni kell az elektronikához, ez nyílvánvaló, és azt se árt, ha van valami elképzelésed mit akarsz megépíteni!
Idézet: „Mit rendeljek még kezdéshez?” Esetleg USB-B aljzatot és 20 MHz-es kvarcot (legalábbis 4 MHz többszöröse legyen: 4, 8, 12, 16 vagy 20 MHz) Esetleg I2C vagy SPI perifériák (hőmérő, portbővítő, EEPROM, digitális potméter, stb. - ami érdekel) Én a PIC18F2550 helyett annak nagyobbik testvéréve készítettem kísérleti áramkört. Egy másik érdekes megközelítás a PIC18F2550-re épülő Pinguino project. Mellesleg a Processing fejlesztői környezetét kipróbáltam, de nem ajánlom. A fapadosabbnak tűnő MPLAB hibadiagnosztikája jobb és itt több segítséget kapsz hozzá.
Azt elfelejtettem mondani hogy ICD2-es égetőm lesz. Rendelek 4Mhz és 20Mhz-es rezonátort és kvarcot is.
Szia!
Idézet: „Mintha ezeket a kérdéseket egyszer már megválaszoltam Neked:” Igen, de akkor sem értettem teljesen. Na megpróbálom megint megemészteni...
Kérdezz vissza, melyik választ nem érted! Tisztázni kell mind, különben elakadsz! Tudod már használni a szimulátort? Talán az a legfontosabb lépés, hogy lásd mit csinálsz!
A szimulátor persze, tudom használni! A 16 bites bináris számot 5db decimális számmá konvertáló szubrutinom megírásába bele is őrültem volna ha nincs a szimulátor.
Egyébként miért nem tudom most lefordítani a programomat?
|
Bejelentkezés
Hirdetés |