Fórum témák
» Több friss téma |
Köszi, nem a beszerzésével van a gond. Volt ott is ahonnét a többi cuccot rendeltem (RET) . Csak egy ilyen kis tételt külön nagyon drága kiszállíttatni. Majd nézek valami kétkapus rf FET et valami itthon elheverő tunerben.
No, meg is van. BF996 om van itthon 20 db, mondjuk ez SMD de amúgy is át kell terveznem a panelját mert az IC- k is SMD kivitelűek amiket rendeltem, utálok furkálni... Köszi.
Szia! Próbálom az általad ajánlott LCD adatbeviteli módszert, de fordításkor hiányolja a fordító a 14. sorban meghívott "CharToLcd" rutint. A CIM és Index regiszereket lefoglaltam. Le is fordulna a kód csak az a rutin hiányzik. Annak hogyan kéne kinéznie?
Próbálom proli007 adat kiíró rutinjával (átneveztem a rutint), de sajnos nem igazán megy. Illetve működik csak éppen a helyes karakterek helyett #2 jelenik meg ki karaktrenként. Tehát a szöveg4 ("stb") így néz ki az LCD re kiírva: #2#2#2 Mi lehet a gond?
Valahogy így. Magyarázat a mellékletben.
A hozzászólás módosítva: Ápr 22, 2020
Szia! Még egyszer köszönöm a segítséget! Gyakorlatilag megírtad helyettem a kódot, gondolom látva hogy nem igazán vágom a dolgokat.
![]() ![]() ![]() Mivel kaptam több megoldást és rávezetést másoktól is példakódok vagy ajánlások formájában, + a netről is csipegettem példakódokat, ezek kombinációiból varrtam össze a kódomat. Jó volt ez így mert bár annak szántad, mégsem kész megoldást kaptam! Gondolkodni is kellett, nem is keveset. "Folyt is a víz a hátamon" ahogy ítt egy fórumtársunk megjósolta, bár ez még mindig csak a 16 os széria és nem a 18 as. ... ![]() Szoszo, a Te kódodnál kicsit elakadtam mert a táblázatot (szövegX..stb) a negyedik memórialapra tetted, org 0x1800, a program többi része viszont első ránézésre a Page0 án van hiszen org 0x00 nál kezdődik a program. Nem láttam hogy hol vannak a lapváltások, nem találtam pagesel t..stb. Egyeszerően nem értettem hogy a program lapok között hogyan oldottad meg az átjárásokat. Aztán megtaláltam a cikkedet a memórialapok kezelésről és kezdett kitisztulni a kép. ![]() Még egyszer köszönöm Neked és Mindenkinek a segítséget, jó kis lecke volt! A hozzászólás módosítva: Ápr 25, 2020
Program lapot váltani a PCLATH megfelelő bitjeinek állításával lehet. A kódban két helyen történik:
Ebben a részletben a szöveg kezdőcíme és az index alapján. A C bit ellenőrzése oldja meg a 256 utasításos laphatár kezelését. A rutin hívása után van a második részlet: movlw high(Loop) ; Az ugrás cél címének felső byte-ja. movwf PCLATH Az első goto vagy call előtt be kell állítani azt a memórialapot, amire az ugrás cél címe került a fordításkor. A pagesel macro a PCLATH 4. és 3. bitjét állítja a hagyományos PIC16 -ok esetén. Annyival elegánsabb, hogy más PIC család esetén az azokon szükséges módon állítja a be a kívánt lapot. Még egy adalék: A probléma mentes használathoz a megszakítási rutin elején a PCLATH értékét menteni kell, a 0. lapra kell állítani és a visszatérés előtt a mentett értéket vissza kell állítani. A hozzászólás módosítva: Ápr 25, 2020
Köszönöm az újabb fejtágítót, jól jött mert a kódom még nem tökéletes. Néha megbolondul és végtelen ciklusba kerül (újra és újra ugyan azt a szöveget írja ki a kijelzőre) vagy éppen ismeretlen karaktereket ír ki az LCD re. Gyanítom hogy a rutinhívások ból vagy egy GOTO ból visszatérve nem arra a lapra érkezik vissza amelyikre kéne, vagy a laphatárt lépi túl. Ennek ellenőrzését én kihagytam mert e nélkül is működik a dolog, de csak egy ideig... Előbb utóbb megbolondul. De az instrukcióid alapján szerintem ezt már megoldom.
Köszönöm a segítségedet! Hagyom had follyon a víz a hátamon, ha fogytam 3 kilót és még mindíg nem megy, akkor esetleg még kérdeznék... ![]()
Használd az MpLab beépített szimulátorát!
Most lehet nagy butaságot kérdezek... De mitól esik be a megszakításba a program? A portb globális interruptjától? Vagy a C bit átbillenésétől? Ez csak annyiban lényeges hogy ahogy írtam én már megcseréltem a PORTB t a PORTD vel. Tehát PORTB vagy PORTB0 megszakítás nem keletkezhet mert ezeket a portokat nem használom. Illetve csak az E és a RS lábakat vezérlem velük Portb4, 5. A megszakításban pedig nem kell a többi esetleges megszakítást lekezelni? Tehát ha számunkra lényegtelen vagy nem releváns dolog miatt keletkezik megszakítás akkor retfie val kilép. Én ezt anno ha jól emlékszem úgy oldottam meg hogy a megszakítás rutinban a mentések után lechekkoltam hogy valóban az generálta e a megszakítást amit én vártam? Ha nem akkor kilépett a megszakításból. Ha igen akkor lekezeltem ahogy akartam. Az inicializálást rám bíztad, nyilván nem tudhatod hogy én mit használok mire... De melyik megszakítást kéne engedélyeznem hogy a kód múködjön? Mert jelenleg nálam a globális interrupt is tiltva van tehát nem is működhet a kód. Amivel eddig szenvedtem az nem használt megszakítást, de már látom nem fogom megúszni...
Nem értem a kérdésedet.
- Ha eddig a programodban nem volt engedélyezve a megszakítás, továbbra sem kell engedélyezni semelyiket sem. INTCON.GIE = 0. - Ha volt engedélyezett megszakításod, a szöveg elővétele megváltoztatja (ha csak átmenetileg is) a PCLATH értékét. A megszakítás kiszolgáló rutinnak mentenie kell a PCLATH értékét, önmagára kell állítania, hogy benne levő ugrások jó helyre történjenek és a kilépés előtt vissza kell állítania a mentett PCLATH értéket.
Ne haragudj hogy értetlenkedem, mint említettem több kódból varrtam össze a mostani kódot. De már sikerült úgy belenyúlnom hogy egyáltalán nem működik tehát vissza a kályhához. Nem volt engedélyezve a megszakítás, pont ez zavart össze mert a tiedben van megszakítás rutin. A kérdésem arra vonatkozott hogy mi az az esemény amitől megszakításba kerül a programod? Maga a laphatár átlépése megszakítást generál pl? Ezt nem hiszem mert akkor nem kéne a laphatár elérését külön figyelned. Nálam addig működött (megszakítás nélkül) míg nem lépte át a laphatárt. De mivel betettem a programba vagy 5 + szöveget így már átlépi a laphatárt. Ezért van hogy az első 3 szöveget kiírja normálisan utána megbolondul a program. Amíg a rutinok, a táblázat is egy lapon vannak a főprogrammal addig vissza tud térni a program oda ahonnét ugrott. A Te programodban már más a helyzet mert a főprogram a page0 án van de a táblázatot 0x1800 ra azaz eleve a page3 ra tetted. Ha a page0 ról hivja meg a program a táblázatot lapváltás nélkül, ez nem is fog menni. Ha jól értelmezem...
Szégyenlem az értetlenkedésemet, és gondolom sokan fejet csóválva unnak is már itt a fórumon. De sajna úgy hozta az élet hogy most sok mindent újra kell tanulnom ami régebben már ment, rengeteg minden "kiesett" a fejemből. Anno használtam én már megszakítást, lapváltást is. Igaz csak F648 as esetében egy project kapcsán, ami eredetileg F628 ra íródott de aztán "kinőttem" és ki lett cserélve a lábkompatibilis (csak 2+ 2k s) F648 asra. Tehát sorry, de bizonyos okokból kicsit nehezebben mennek a dolgok most egy ideje, igyekszem de nem megy valami gyorsan ez az újra tanulás. A hozzászólás módosítva: Ápr 26, 2020
Menyus, szerintem ne érezd magad rosszul emiatt, azért ez a PIC kezdőknek fórum.
Mindenki elkezdte valahogy és öröm, ha a magyarázat sikeresen megvilágít egy problemát.
Köszi, nehéz ez nekem most. Azért gáz ez mert nem voltam ennyire láma régebben, no nem voltam még közép szinten sem egy nagy koponya programozásban, de hobbiszinten ezek a dolgok már mentek! Engem főleg zavar mert tudom hogy tudtam régebben, most meg az istennek se megy, mint még sok minden ezen kívül. Nem mennék bele a részletekbe mi miért van most így ahogy mert ez itt senkit nem érdekel, és én sem vagyok rá büszke. De tetszik vagy nem (már nekem), ezt dobta az élet... De mindenesetre köszönöm a megértésedet.
![]()
Szia!
HP41C kolléga nem használt benne megszakítást ( nincs engedélyezve a programjában, ill. nem foglalkozott vele!), csak azt próbálta megmutatni Neked, hogy ha megszakítást használtál esetleg, akkor így tedd a PCLATH miatt ! A hozzászólás módosítva: Ápr 27, 2020
Értem, köszönöm. De Ő a teljes inicializálást kihagyta a példakódból, mert nyílván nem tudta nálam mi hogyan van beállítva, mit mire használok így ezért nem foglalkozott vele. Én így viszont nem láttam az INTCON regisztert sem amiből kiderül hogy használ megszakítást vagy sem, ha igen milyet? Ezért kérdeztem milyen esemény váltja ki a megszakítást? Én csak a megszakítás rutinban lévő mentéseket és visszaállításokat láttam. Ebből feltételeztem hogy megszakítást használ. Mert a megszakítás területén (0x004 -> ) volt tartalom, majd egy retfie. Ez zavart meg. Számodra miből derül ki hogy nem is használ megszakítást? Nem értem hogy ha az inicializálás nem látszik mert nincs is (és nyílván a nélkül nem is működhetne a program) akkor miből derül ki hogy használ e megszakítást vagy sem? Lehet "ránézésre látszik" hogy ez csak egy lehetséges megoldás, én viszont (hibásan) egy kész megoldásnak vettem mert a deklarációktól az end - ig ott volt előttem a "majdnem kész" program.
Akkor ismét vissza a kályhához mert most a megszakításos verziót írtam meg (ami nem működik így) , holott nem is kell megszakítás csak a a lapváltásokra kell odafigyelnem. Ha jól értelmezem. ![]() ![]() A hozzászólás módosítva: Ápr 27, 2020
Ha megnézed, az IT-ben nem történik semmi, csak az adatok mentése és visszatöltése. A pontok jelentenék a feladatokat.
Igen, de gondoltam ezen kívül nem is kell más mert Hp41C a PCLATH mnetését visszaállítását említette és azt tartalmazza is a mentés visszaállítás.
Sziasztok
Segítségre van szükségem. Mivel a 18f-es pic-ben nem lehet a movfw utasítást használni, utána olvastam de nemjött össze. pl. MOVFW BILLI MOVWF PORTB ez működik a 16-ba a 18-asra ezt a megoldást találtam MOVF BILLI,W MOVWF PORTB De ez a megoldás nem működik. A w regiszterből a f-be szeretném tölteni. A hozzászólás módosítva: Ápr 27, 2020
Miért nem próbálod egyből a BILLI-ből a PORTB-be? MOVFF BILLI, PORTB
Egyébként a második megoldásodnak működnie kéne. A hozzászólás módosítva: Ápr 27, 2020
Sajnos nem müködik, de szerintem ezzel is baj lehet
movf KESLTET,W andlw b'00001111' movwf Time incf Time,1 bcf STATUS,C, ACCESS RLCF Time,1 bcf STATUS,C, ACCESS RLCF Time,1 bcf STATUS,C, ACCESS RLCF Time,1 bcf STATUS,C, ACCESS RLCF Time,1
Szimulátorban nézted, hogy mi nem működik pontosan?
Most nézem benne
itt megál goto $+1 ez a delay része, lehet itt ál meg? Delay ;4993 cycles movlw 0xE6 movwf d1 movlw 0x04 movwf d2 Delay_0 decfsz d1, f goto $+2 decfsz d2, f goto Delay_0 ;3 cycles goto $+1 nop ;4 cycles (including call) return A hozzászólás módosítva: Ápr 27, 2020
Idézet: „Mivel a 18f-es pic-ben nem lehet a movfw utasítást használni, utána olvastam de nemjött össze.” Már miért ne lehetne használni? Ugyan van még egy paramétere, ami azt állítja be, hogy a BSR -ral kiválasztott bankot vagy az access bankot használja.
vagy, ha a BILLI a 0x00 .. 0x5F és a 0xF60 .. 0xFFF közötti címeken van,
működik.
A 18F -eken egy utasítás 2 (nop, stb.), 4 (goto, call, movff) ill. 6 byte (movffl).
A goto $+1 kerülendő, hiszen páratlan címre hivatkozik. goto $+2 kell helyette.
Sajnos nem működik
ha át írom 2-re akkor meg a ledek halványabbak lesznek Valami kimaradt az biztos A A hozzászólás módosítva: Ápr 27, 2020
Annyit elértem hogy már működik, de a ledek fényereje halványabb. töröltem a goto $+1-et
így már valamennyire működik, de a ledek haloványabbak Idézet: „Igen, de gondoltam ezen kívül nem is kell más” Akkor nem érne semmit a megszakítás, ha csak annyit tenne, hogy belép, elmenti, majd visszatölti a W-t, a STATUS és a PCLATH regisztereket, úgy csak felesleges időhúzás lenne ( amit kerülni kell!) ! ! Idézet: „Számodra miből derül ki hogy nem is használ megszakítást?” A fenti részből, ill. ha megnézed, akkor látod, hogy vannak benne "beírandó" részek, azaz Ő csak egy sablont, egy követendő programkialakítást akart sugallni ( nekem ebből látszott...). HP41C csak azt akarta mutatni ezzel a résszel, hogy, ha Te használsz megszakítást olyan programban, ahol a méret miatt a PCLATH-ot is használod, akkor azt így kell kialakítani, hiyzen a megszakításhívás olyan, mint a szubrutinhívás, csak nem tudjuk "mikor üt be a ménkő", azaz pl. nem tudjuk, melyik lapon járunk akkor éppen ! |
Bejelentkezés
Hirdetés |