Fórum témák
» Több friss téma |
Így meg már működik, előbb nem ment, vagy csak kezdek megbolondulni... a MOVLW csak literális értéket mozgathat , de a változó is literális nem? Ezek szerint itt nem jó. szerk.: a literális nem lehet változó most nézem, remélem ez volt a hiba ![]() Ha igen, elnézést a bakimért, de hát ezért van a fórum ![]() Köszönöm mindenkinek az eddigi segítséget!
Kicsit hosszúra fog nyúlni a topik, ha mind a 85 utasításnál külön el kell mondani, hogy a http://esca.atomki.hu/PIC18/intro.html címen mintapéldákkal együtt le van írva, hogy melyik utasítás mire való.
![]()
Hali
Talalsz mintakat minden processzorra kulon a C:\Proramfiles\Microchip\MPASM Suite\Template\code alkonyvtarban. Probald meg ertelmezni a 18F1320temp.asm filet. Valahogy igy kell felepiteni a te altalad irt ASM filet. Persze nem minden szukseges neked. Segitseget kaphatsz az ASM parancsok mukodeserol a MPLAB ASM helpjeben, vagy az eszkoz doksijaban. Termeszetesen kulfoldiul van leirva, de szotarral eleg konnyu boldogulni. Nagyon fontos az eszkoz reszletes megismerese is. Bizony elsore egy kicsit bonyolult onerobol tanulni, de itt ezen a forumon mindig vannak segitokesz emberkek. Ha sokat foglalkozol vele hamarosan belejossz mint kiskutya az ugatasba. Nem art elsore valami egyszeru peldaval kezdeni, mert ott rogton megismered a MPLAB-ot, Az ASM nyelv rejtelmeit, az utasitaszkeszletet, valamint magat az altalad kivalasztott eszkozt is. Probalj meg felhajtani a neten mintapeldakat. Lehetoleg ne valami uberbonyolult dologba kezdjel eloszor, hanem a legegyszerubb peldat keressed. Ott latni fogod az ASM programok rejtelmeit, felepiteset, esetleges trukkoket, es ezutan mar mindig konnyebb lesz magasabb szintu programokat megoldani. A doksikban levo mintapeldak (mint a Te esetedben) felteteleznek egy alap ASM ismeretet. Pont ezert egy kicsit nehez kezdoknek alkalmazni ezeket. De gondolom idovel neked is megadatik majd ez az alap, es utana johet a "nuklearis eromu vezerles megoldasa 16F84-re" Bocs ez csak vicc volt, de altalaban mindenki igy indult el. Udv Vili
Egyébként innen szoktam "puskázni"
![]() De ráfogom arra hogy figyelmetlen voltam, ez a napi 5 órás alvás lehet nem elég... ![]() vilmosd: igyekezek :yes: Mégegyszer köszi a segítségeket!
Jó hát
![]() Sikerült a timer interrupt, viszont nemértem hogy a megszakítási frekvenciát hogyan állítom be (milyen gyakran hatjsa végre az interruptban lévő szubrutint, ami itt az RTCisr).
Hali
Meg egy tanacs. Nem fontos megfogadni, de lehet hasznos is. Ajanlanam induloba egy 20 labas probapanel megepiteset (nem dugdosos panel). A 16F asamblere csak 35 utasirasbol al, tehat hamarabb megismered az utasitaskeszletet. A 20 labas probapanelbe bele lehet tenni a 8 , 14 es 20 labas PICeket. a 12F683, 16F694 es a 16F690 egyforma bekotesu a tap (1. lab) felol. Ezek az eszkozok olcsok, de igen sok interface van beleintegralva. ASM tanulasra alkalmasabbak, mint a 18F sorozat (csak 35 utasitas). Raadasul ezekre sokkal tobb pelda talalhato a neten. Sot sok a magyar nyelvu irodalom is. Viszont az ASM szintaxisa, directivak egyebek megegyezik a nagyokeval. Gondolom nem csak egy projektot akarsz megcsinalni. tehat az erre koltott energia (penz, ido, agysejtek) nem vesz karba. Amikor mar elegge begyakoroltad a kicsiken a jatekot, at lehet terni a nagyobb testverekre. Utana mar nem kell mindennap feltenned 20-30 kerdest mert Te is elertel a "kezdo" szinvonalra, es tudni fogod az alapveto trukkoket az ASM vilagaban. Amennyiben erdekel egy ilyen penel dokumentacioja, szivesen segitek. Most, ha jol emlekszem nincsen csak sima 20 labas panel tervem, de rovidesen, (ha lesz ra ido) elkeszul a ICSP-vel ellatott panel is. Egy kis befektetessel gyorsabban tudsz eredmenyt elerni. Udv Vili Ps : szoktam aludni, de most nalam 17:43 van.
Hogy all a mostani ASM listad? Lathatnam?
Idézet: „A CBLOCK 0x20 helyett mehet a 0x00?” Igen. Ha jól látom az adatlapban, akkor 0x00-tól 0x7F-ig terjedő RAM területet használhatod adattárolásra a bankregiszter használata nélkül.
Bemásolom az egészet...
A secs meg is jelenik az RB-n, viszont kb 15Hz-el...
Szia!
A timer1 ebben a beállításban a belső órát (4MHz negyedét) 1 előosztással 32768-cal osztja... Nem a T1 oszcillátoráét... A 65. sorban az 1. bitet is állítsd 1-re: külső órajel. A megszakítási rutinban egy kijárat legyen. Most több helyen tér vissza és még a visszatérés módja is különböző: 80, 85, 90. sor befault, 93. sorban a regiszterek visszaállításával... Szia
Az RTC programok általában a Timer1 saját oszcillátorának használatát feltételezik, ami 32768 Hz-es órakvarccal megy. Ha TMR1H-t 0x80-nal inicializálod (lásd RTCinit első két utasítása, és RTCisr első utasítása), akkor 1 másodpercenként csordul túl Timer1.
Ha az utasításciklusokat számoltatod, akkor az említett két helyen kell más értéket betölteni, és a nagy frekvencia miatt szükség lesz egy szoftveres számlálóra, ami a másodperceknél kisebb időegységeket számlálja. Csak a kettő hatványai szerinti osztást lesz nehéz összeegyeztetni a kettőtől különböző törzstényezőkből álló órajelfrekvenciával...
Hali
Szoval a listadat nem igy kellene megcsinalni. Latom nem erted meg teljesen az interrupt kezelest . Majd kesobb irok a Te programodrol. Most mellekelek egy szajbaragos ASM doksit. Addig is tanulmanyozzad. Udv Vili
Bölcsebb volna előbb az alapokat lerakni.
Csak byte-okat küldözgetek ki LATB-be, (egyébként LPT-re már írtam komplett LCD kezelő programot, mert az LCDSmartie nem tud mit kezdeni a 4bites kijelzőkkel, ráadásul az enyém 24 oszlopos) tehát egy nibble, enable, második nibble, aztán enable --> ez egy betű.
A Hello Wo-ig eljutottam, viszont az 'r' betűt nem akarja kiíni, de más karaktereket meg igen. Gondoltam az LCD.vel van a baj, de LPT-n ugyanúgy (másik programommal) nibbléket küldtem kifele. De ott meg kiírja. Szóval a PIC szúr el valamit. Pedig dettó ugyanazt csináltam meg LPT-ről is. Nem tetszik nekem ez... Már vagy 3 órája csak azon agyalok miért nem 'r' betűt ír oda... ![]() Egyébként csak nálam vannak ilyen idióta esetek? Idézet: Ezt nem tarto valószínűnek! „Szóval a PIC szúr el valamit.” ![]()
Mármint a program, amit én csináltam asm-ben
![]() De 3 órája nézek 5 sort és jónak tűnik szóval nem tudom hol lehet a hiba :wilting:
Nemegyszer volt már, hogy fél napig néztem valamit, hogy miért nem jó...
Egyre rosszabb, már a kijelző se akar működni.
Feladtam.
Szia!
Töltsd fel (féjl mellékletként) a programot.... Az MpLab -ban van még sok lehetőség: pl. a Simulator Logic Analyzer... A B portra kíadott adatok időzítését is láhatod vele... Szia
Hali
Amint latom meg sok hianyossag van az ASM tudasodban. Eloszor is meg kellene ertened a programok strukturajat. Nem nehez, de eloszor is minden programban az elejen ugye megadjuk a PIC tipusat, majd a configot (ez megvolt). Utana beirjok a kezdocimre (0x00) hogy mit fogunk csinalni itt. Mivel keves memoria van a IT cimekig ezert elugrunk a foprogram kezdocimere (szabadon valaszthato, vagy csak egy cimke es GO) Ezutan, ha hasznaljuk az IT-t, a IT vektorokra is beirjuk a IT rutin kezdetere mutato ugrast. Mostmar az elejevel keszen is lennenk. Most kezdodik a munka. A foprogram eleje az inicializals. Itt meg kell adni az altalunk hasznalt egysegek alaphelyzetbe allitasat, es az altalunk kivant funkciokat be kell allitani (adatlap vonatkozo fejezeteinek tanulmanyozasa). Ha megcsinaltuk ezeket, akkor johet a fo programhurok. Jelen esetben csak kiirunk egy szamlalot a portb-re. De van egy IT-nk ami barmely pillanatban beuthet. Mi tortenik ilyenkor? A PIC megszakitja a jelen programfutast es elugrik az IT vektorra. Ez idaig rendben is volnna, de az IT vegrehajtasban is hasznaljuk a W, a STATUS, es mas kozos regisztereket. Tehat ha azt akarjuk, hogy a visszatereskor a fo hurok azonos allapotba keruljon, az IT kezdeten el kell menteni a kivant regisztereket, majd a visszateres elott helyre kell allitani azokat. gondolj bele, ha peldaul a fo hurokban csinalsz epp egy bit vizsgalatot es a CARRY bit allapotatol fuggoen fogod a programot folytatni, mi fog tortenni ha beut az IT? Mivel ott is hasznalod a STATUS-t, meg fog valtozni pl a CARRY bit. Visszateres utan nem tudjuk milyen allapotban van, tehat az elozo vizsgalat erdmenye nem biztos hogy megfelelo iranyba tereli a programunkat. Erre szolgal az IT szubrutin elejen, es a vegen a 3-3 sor. Igy mar nyugodtan jatszhatunk az IT rutinban a kozos regiszterekkel, de a vegen mindent visszaalitottunk az eredeti allapotba. Igy kell korulbelul a programokat szervezni, es ha koveted ezeket a tanacsokat kevesebb problemad lesz a kesobbiekben. Ha lehet ilyen egyszeru programokkal kezd el az ismerkedest. Nem jo otlet az LCD kezelessel kezdeni. Probalj minel egyszerubb programokat irn, majd ha mar megismerted az alapokat, az interrupt kezelest, es a periferiak kezeleset, el lehet kezdeni valami egigero projekt tervezeset. De addig meg sok viz le fog folyni a Dunan. Ajanlom figyelmedbe a DS33014K.pdf dokumentet a MC honlapjan. Sokmindent leir az ASM programozas rejtelmeirol. MPASM user guide. Mellekelem a komplett projektet. Nezd at a valtoztatasokat, es igy probald meg folytatni a programot. Udv Vili
Sziasztok!
Bocsánat, de még mindig az 1MHz -t számolja, a TMR1 megszakítás 30,5175813 ms -onként for beérkezni 1 s helyett. A megszakítási rutinban megvalósított időszámlálás csak akkor lesz jó, ha a TMR1 oszcillátor bemenetére egy 32.768 kHz-es kristály kerül két 22pF kondenzátorral, és a TMR1 a külső órajelet számolja..... Sziasztok
Hali
En nem valtoztattam a kollega programjan, csak megprobaltam elmagyarazni neki a programiras mikentjet. Termeszetesen ha kulso oszcit akar hasznalni at kell irni a TMR1 inicializalast, de igy le tudja szimulalni az MPLAB-ban Ha elesben megcsinalja az mar mas. Ott at kell allitani a TMR1 orajel forrast.
Udv Vili
Bocs
Ha már ennyien segítetek, csak nem adom fel
![]() vilmosd: csak azért akarom rámadzagolni az LCD-t a PIC-re hogy lássam mennyi idő telik el az infrán vett jelek között. Na meg persze lehet vele több dolgot is csinálni ![]()
Csatoltam a programot, (a Hello-t kéne csak kiírnia) közben sikerült visszahozni, egy delay rutin nem volt jó, de a Hello helyett csak a Hell-t írja ki
![]() Amit tudni kell a kijelzőről, hogy ugye alapból csak 4 adatbit kivezetése van (tehát az inicializálásban elég a "Kijelző és kurzor alaphelyzetbe" parancsot kiadni [0000 0010] ). A bekötése benne van az asm-ben. Idézet: „a Hello helyett csak a Hell-t írja ki” Próbálj a karakterek küldése között hosszabb szünetet tartani! |
Bejelentkezés
Hirdetés |