MPLAB: problém s funkciou Stopwatch
Moderátori: psichac, Moderátori
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
MPLAB: problém s funkciou Stopwatch
Momentalne sa hram v MPLAB-e so simulaciou programu. Kedze zatial programujem len "blikacky", casto robim s casovymi sluckami. Chcel som si zistit presny cas jednotlivych casovych sluciek, ale narazil som na problem. Neviem, ako docielit, aby som nemusel dlho cakat na vysledok. Samozrejme nekrokujem cez F7 /po jednom/, ale cez Ctrl+F9. Aj tak je to velmi pomale-kym prejde niekolkosekundovu slucku, prejde par minut. Nevie niekto poradit, ako tento proces urychlit?
0
![Obrázok](http://www.rakeshmondal.info/PIC18F4550/MPLAB-X-small1.jpg)
-
- Stály člen
- Príspevky: 258
- Dátum registrácie: 07 Jún 2009, 00:00
- Bydlisko: Bratislava, Hlohovec
- Vek: 39
Hovoria ti nieco breakpointy? Zapnes MPLABSIM, nastavis si breakpoint na zaciatok slucky , dalsi na koniec slucky (dvojklik na dany riadok, vlavo sa to zobrazi ako cerveny kruzok a v jeho strede bude B), das si master reset , das run, program, ti zastane na prvom breakpointe cize na zaciatku slucky, vynulujes STOPWATCH a das znova run, program ti zastane na dalsom breakpointe cize na konci slucky. Kuknes na stopwatch a mas tam cas ktory trvala slucka, samozrejme si treba spravne nastavit hodnotu frekvencie v menu - debugger - settings - osc/trace. Jop alebo ked ches vidiet ako ti to beha tam vsetko, tak si v settings - animation/realtime updates nastav do kolonky animate step time mansi cas ako 300ms co tam je.
0
Hledej mne lásko má, kde je pivo tam jsem já.
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
-
- Stály člen
- Príspevky: 258
- Dátum registrácie: 07 Jún 2009, 00:00
- Bydlisko: Bratislava, Hlohovec
- Vek: 39
Nemozne ......, v kazdom jednom MPLABe co som kedy pouzival mi to slo bez problemu ..., jedine ze by si niekde zacyklil slusku vtedy ti to bdue nacitavat do aleluja ....., za dalsie opis nacitava mi to po mikrosekundach je super ... , jezis to si sa kde dostal ku takej verzii? kto ti to poradil aby si ju stahoval? ved ta verzia ma okolo 10 rokov ved to si este pamatam z 1998/99 tusim ze vysla a kristus vie ci nie skorej ...., robil si nieco s nastaveniami simulatora? ak hej tak ich daj pekne do povodneho stavu a jedine co zmen je velkost frekvencie krystalu ...., osobne nevidim dovod preco by taka banalna vec nemala fungovat , posli mi ten program ze nech si to vyskusam lebo toto sa mi este v zivote nestalo a to uz som mal tu cest s vela vela verziami mplabu
0
Hledej mne lásko má, kde je pivo tam jsem já.
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
-
- Stály člen
- Príspevky: 258
- Dátum registrácie: 07 Jún 2009, 00:00
- Bydlisko: Bratislava, Hlohovec
- Vek: 39
1. tak sa toho rovno zbav a daj si niektoru z novsich vezrii ... pr. 8.50 alebo 8.56 ..
2. tie ucebnice od benu to je tiez kapitola sama o sebe .... ak by som sa mal ucit programovat podla toho ... tak dakujem (prelistoval som si ich a osobny nazor , autor tym zbytocne zabil svoj cas a zabija tym aj cas ludi co to citaju ...)
3. nechcem byt zly a hnusny ale to si nevies napisat slucku sam? sak to je primitivna banalita, ktora je na zaciatku samozrejmostou ....
4. nie RETURN urcite vadit nemoze , pretoze na konci kazdeho podprogramu sa tato instrukcia priam nachadzat musi! , ale pozor - zalezi od mikrokontrolera niektore picka maju instrukcnu sadu kde namiesto return mas retlw cize na konci podprogramu sa pise napr. retlw 0x00, v niektorych programoch je to vyhoda pretoze mozes o skonceni podprogramu touto instrukciou zabit dve muchy jednou ranou a priamo predat akumulatoru nejake cislo a usetrit tym nejake miesto v pamati (vacsinou byva tato instrukcia v mikrokontroleroch s malom programovej pamate v PIC12 som ju videl a neviem ci aj stara dama 16F84a ju nema, cisty priklad - skonci podprogram a ty chces do akumulatora vlozit cislo 20h, takze ked mas k dispozicii retlw das retlw 0x20 a mas to tam, inak by si musel napisat return a za nim movlw 0x20, dalej sa to vyuziva pri tabulkach - citanie konstant z programovej pamate a podobne )
5. ak sa chces naucit programovat zober si mikrokontroler, jeho datasheet a precitaj si ho namiesto kniziek od benu , urcite sa dozvies viac osoznych informacii a hlavne tvor programy sam z vlastnej hlavy a nekopci to , sem tam sa mozno potrapis ale tym lepsie pre teba a tvoju hlavu
6. osobne si myslim ze ked sa budeme bavit stylom a nemoze tomu vadit instrukcia return, tvoj problem budeme riesit pol roka
7. napisal som ti ako to urychlit resp. ako sa to robi , kedze ti to nefunguje chyba je niekde u teba , su dve moznosti 1. budes sa trapit a hladat to sam (osobne by som si ju zvolil) 2. das sem ten tvoj napisany program ja alebo uz niekto iny ho skompiluje vyskusa a povie ti kde je chyba (ak je v programe) , ak nie tak sa pokusi nasimulovat v mplabsim take spravanie ako uvadzas ...
2. tie ucebnice od benu to je tiez kapitola sama o sebe .... ak by som sa mal ucit programovat podla toho ... tak dakujem (prelistoval som si ich a osobny nazor , autor tym zbytocne zabil svoj cas a zabija tym aj cas ludi co to citaju ...)
3. nechcem byt zly a hnusny ale to si nevies napisat slucku sam? sak to je primitivna banalita, ktora je na zaciatku samozrejmostou ....
4. nie RETURN urcite vadit nemoze , pretoze na konci kazdeho podprogramu sa tato instrukcia priam nachadzat musi! , ale pozor - zalezi od mikrokontrolera niektore picka maju instrukcnu sadu kde namiesto return mas retlw cize na konci podprogramu sa pise napr. retlw 0x00, v niektorych programoch je to vyhoda pretoze mozes o skonceni podprogramu touto instrukciou zabit dve muchy jednou ranou a priamo predat akumulatoru nejake cislo a usetrit tym nejake miesto v pamati (vacsinou byva tato instrukcia v mikrokontroleroch s malom programovej pamate v PIC12 som ju videl a neviem ci aj stara dama 16F84a ju nema, cisty priklad - skonci podprogram a ty chces do akumulatora vlozit cislo 20h, takze ked mas k dispozicii retlw das retlw 0x20 a mas to tam, inak by si musel napisat return a za nim movlw 0x20, dalej sa to vyuziva pri tabulkach - citanie konstant z programovej pamate a podobne )
5. ak sa chces naucit programovat zober si mikrokontroler, jeho datasheet a precitaj si ho namiesto kniziek od benu , urcite sa dozvies viac osoznych informacii a hlavne tvor programy sam z vlastnej hlavy a nekopci to , sem tam sa mozno potrapis ale tym lepsie pre teba a tvoju hlavu
6. osobne si myslim ze ked sa budeme bavit stylom a nemoze tomu vadit instrukcia return, tvoj problem budeme riesit pol roka
7. napisal som ti ako to urychlit resp. ako sa to robi , kedze ti to nefunguje chyba je niekde u teba , su dve moznosti 1. budes sa trapit a hladat to sam (osobne by som si ju zvolil) 2. das sem ten tvoj napisany program ja alebo uz niekto iny ho skompiluje vyskusa a povie ti kde je chyba (ak je v programe) , ak nie tak sa pokusi nasimulovat v mplabsim take spravanie ako uvadzas ...
0
Hledej mne lásko má, kde je pivo tam jsem já.
retlw je klasicka instrukcia, nenahradzuje return. Vyuziva 2 programove cykly, takze na usetrenie pamate alebo podobne veci co si pisal urcite nie je. Nainstaluj si aktualny MPLAB, stiahnes ho z domovskej stranky. V ramci programu sa posuvaj pravym tlacitkom a volbou "set PC at cursor". Daj moznost RUN a program musi bezat v realnom case. (a rychlejsie
).
![Smile :)](./images/smilies/icon_smile.gif)
0
-
- Stály člen
- Príspevky: 258
- Dátum registrácie: 07 Jún 2009, 00:00
- Bydlisko: Bratislava, Hlohovec
- Vek: 39
To exekutor: ja som nenapisal ze ho nahradzuje , v niektorych instrukcnych sadach pre niektore pic jednoducho return nenajdes je tam miesto neho retlw (najma v tych kde je menej program flash), to ze sa vykona v dvoch cykloch je pekne ale s miestom v programovej pamati to nema nic spolocne ...., okrem toho su to instrukcne cykly a nie programove .... 1 instrukcny cyklus je v picku fkrystalu/4 ..... tzn. return aj retlw sa vykonaju za cas 2* (fkrystalu/4)na minus prvu .... ja tam suvis s miestom v programovej pamati nevidim, pisal som ze s retlw mozes usetrit miesto v pamati oponoval si ze nie .... precitaj si prosim co sa pise v instruction set pri tejto instrukcii ked uz pises to co pises a nezavadzaj ludi a ked uz chces pisat nieco o cykloch a podobne nauc sa asopn terminologiu ....., a precitaj si moj jednoduchy prikald co som dal eurobastlerovi a pochopis ze to co pisem dava zmysel a viem preco to pisem ...., myslim ze retlw 0x20 namiesto return a za nim movlw 0x20 usetrenim pamate je ......, ale mozno sa mi to len zda ze namiesto dvoch instrukcii v programovej pamati tam bude potom len jedna ..... a este to bude aj rychlejsie kedze retlw trva 2 instrukcne cykly , a returm + movlw 0x20 bude trvat 3 instrukcne cykly ....
0
Hledej mne lásko má, kde je pivo tam jsem já.
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
Rychlost behu simulacie zavisi silne na procesore pc, aj ked sa to nezda tak simulacia dost zatazuje pocitac.Moja skusenost s Athlon na 2,6G a C2D na 2,6G je 10:1. Dalsia vec je sposob nastavenia simulacie v menu "Simulator seting" "Animation/Realtime updates" polozka "Animated step time" ktora vklada cakanie medzi jednotlive kroky simulacie ale len pre animamaciu pohibu po programe - nastavte to na najnisiu hodnotu.
0
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
Nefunguje to. Idem podla tychto krokov:
1. File -> Open casovac.asm
2. Debugger -> Select Tool -> MPLAB SIM
3. Debugger -> Settings -> Osc/Trace -> nastavim frekvenciu na 4Mhz
4. Debugger -> Settings -> Animation/Realtime Updates -> Animate Step Delay -> No delay
5. Dam si breakpointy na zaciatok a koniec slucky
6. Stlacim F6
7. Stlacim F9
Vyhodi mi hlasenie: One or more breakpoints could not be resolved. Select breakpoints from Debugger Menu for details.
///////Simulacia uz ide, zabudol som dat Project -> Build All
Novy problem: Stopwatch mi ukazuju na tuto cast programu tvanie 3 mikrosekundy. Breakpointy davam na prvy a posledny riadok tejto casti programu:
INCFSZ REG1,1
GOTO $-1
INCFSZ REG2,1
GOTO $-3
INCFSZ REG3,1
GOTO $-5
CLRF REG1
1. File -> Open casovac.asm
2. Debugger -> Select Tool -> MPLAB SIM
3. Debugger -> Settings -> Osc/Trace -> nastavim frekvenciu na 4Mhz
4. Debugger -> Settings -> Animation/Realtime Updates -> Animate Step Delay -> No delay
5. Dam si breakpointy na zaciatok a koniec slucky
6. Stlacim F6
7. Stlacim F9
Vyhodi mi hlasenie: One or more breakpoints could not be resolved. Select breakpoints from Debugger Menu for details.
///////Simulacia uz ide, zabudol som dat Project -> Build All
![Embarassed :oops:](./images/smilies/icon_redface.gif)
Novy problem: Stopwatch mi ukazuju na tuto cast programu tvanie 3 mikrosekundy. Breakpointy davam na prvy a posledny riadok tejto casti programu:
INCFSZ REG1,1
GOTO $-1
INCFSZ REG2,1
GOTO $-3
INCFSZ REG3,1
GOTO $-5
CLRF REG1
0
![Obrázok](http://www.rakeshmondal.info/PIC18F4550/MPLAB-X-small1.jpg)
- eurobastler
- Ultimate člen
- Príspevky: 3903
- Dátum registrácie: 19 Apr 2009, 00:00
- Bydlisko: BA
- Vek: 35
Pri stopwatch som rezignoval. Program si robi,co chce. Raz mi vobec nejde spustit, raz ide, ked nabehne, tak kazda slucka podla neho trva rovnako.
Tak som sa rozhodol, ze uplne presny cas slucky nepotrebujem. Pracujem na multifunkcnom blikaci, kde to nebude kriticke. Vrasky na cele mi sposobuje tato cast programu:
MOVLW 1Dh
MOVWF PORTA
MOVLW 00h
MOVWF PORTB
BSF STATUS,RP0
MOVLW 02h
MOVWF 85h
GOTO START
Prikazom BSF STATUS,RP0 sa prepnem do banky RP1.To funguje, ale ked chcem preniest hodnotu 02h do TRISA, vzdy ma MPLAB potesi nasledovnou hlaskou:
Message[302] Register in operand not in bank 0. Ensure that bank bits are correct.
Zaujimave je aj to, ze ked dam Build all, vypise tuto hlasku, ale ked dam Step Into, opyta sa ma, ci si prajem "build it all" a potrdim OK, tak uz chyby nevypisuje.
Tak som sa rozhodol, ze uplne presny cas slucky nepotrebujem. Pracujem na multifunkcnom blikaci, kde to nebude kriticke. Vrasky na cele mi sposobuje tato cast programu:
MOVLW 1Dh
MOVWF PORTA
MOVLW 00h
MOVWF PORTB
BSF STATUS,RP0
MOVLW 02h
MOVWF 85h
GOTO START
Prikazom BSF STATUS,RP0 sa prepnem do banky RP1.To funguje, ale ked chcem preniest hodnotu 02h do TRISA, vzdy ma MPLAB potesi nasledovnou hlaskou:
Message[302] Register in operand not in bank 0. Ensure that bank bits are correct.
Zaujimave je aj to, ze ked dam Build all, vypise tuto hlasku, ale ked dam Step Into, opyta sa ma, ci si prajem "build it all" a potrdim OK, tak uz chyby nevypisuje.
0
![Obrázok](http://www.rakeshmondal.info/PIC18F4550/MPLAB-X-small1.jpg)
Je to len informacna sprava, toto som riesil tuna: http://svetelektro.com/modules.php?name ... highlight=
0
MESSAGE xxx , to sú iba upozornenia, že MPLAB niečo autpmaticky doplnil, ak to tam nechceš daj do hlavičky ERRORLEVEL -302
teda pre poriadok sa spýtam či ti funguje ten program tak ako má. Ak áno tak kašli na to upozornenie, ale ak nie tak sem daj aj číslo riadku a celú rutinu, lebo z tvojeho popisu neni celkom jasné kde máš prípadnú chybu.
a ten STOPWATCH ? ti neje, ani keď si to spravil tak ako som ti písal? inak STOPWATCH si určite nerobí čo chce, len ho zle používaš
teda pre poriadok sa spýtam či ti funguje ten program tak ako má. Ak áno tak kašli na to upozornenie, ale ak nie tak sem daj aj číslo riadku a celú rutinu, lebo z tvojeho popisu neni celkom jasné kde máš prípadnú chybu.
a ten STOPWATCH ? ti neje, ani keď si to spravil tak ako som ti písal? inak STOPWATCH si určite nerobí čo chce, len ho zle používaš
0
-
- Stály člen
- Príspevky: 258
- Dátum registrácie: 07 Jún 2009, 00:00
- Bydlisko: Bratislava, Hlohovec
- Vek: 39
No musim sa trosku zamiesat zas aj ja.
PIC maju defaultnu banku registrov (datovu banku) - 0. Hlaska:
Message[302] Register in operand not in bank 0. Ensure that bank bits are correct.
, znamena len tolko ze niekde v programe si pouzil register, ktory sa nenachadza v banke 0 a ty ako programator mas zaistit korektne nastavenie banky kde sa pouzity register nachadza (bitmi RP0 RP1, niekde len RP0 .. zalezi od mcu), to si urobil takze pohoda, len sa potom nezabudni vratit do banky 0 ak tam mas registre s ktorymi pracujes, co v pripade tvojom bude takmer na 100 percent iste kedze robis ledkove efekty kde musis menit hodnoty na porte (ak to nerobis cez nepriame adresovanie, v podstate cez pointre ... ale myslim ze nie na to mas este cas).
Co sa tyka Stopwatch:
1. zapnem MPLAB SIM
2. debugger - settings - osc/trace - processor frequency (nastavim hodnotu podla toho aky mam krystal)
3. zapnem si stopwatch
4. rebuild project
5. nastavim breakpoint na instrukciu pred zaciatkom slucky
6. nastavim si breakpoint na instukciu za koncom slucky
7. kliknem processor reset (F6)
8. kliknem run (F9), simulator sa zastavi na prvom breakapointe
9. kliknem step into (F7), tym som sa dostal na zaciatok mojej oneskorovacej slucky, vynulujem stopwatch kliknutim na tlacitko ZERO
10. kliknem na run (F9)
11. kuknem stopwatch a mam zobrazeny cas
Tento postup si pamatam este z doby ked som zacinal s pickami, neviem skade ho mam (mozno z nejake user guide, mozno som sa k tomu doklikal sam bohvie) a asi ani neni najlahsi a najkratsi ale nikdy ma nesklamal, rozmyslal som ze ti sem dam ozaj uz obrazkovy navod ale ked mne sa to tak nechce ukladat a este do toho kreslit co kde stlacit
, ale ked ho budes moc chciet tak ho urobim.
![Smile :-)](./images/smilies/icon_smile.gif)
Message[302] Register in operand not in bank 0. Ensure that bank bits are correct.
, znamena len tolko ze niekde v programe si pouzil register, ktory sa nenachadza v banke 0 a ty ako programator mas zaistit korektne nastavenie banky kde sa pouzity register nachadza (bitmi RP0 RP1, niekde len RP0 .. zalezi od mcu), to si urobil takze pohoda, len sa potom nezabudni vratit do banky 0 ak tam mas registre s ktorymi pracujes, co v pripade tvojom bude takmer na 100 percent iste kedze robis ledkove efekty kde musis menit hodnoty na porte (ak to nerobis cez nepriame adresovanie, v podstate cez pointre ... ale myslim ze nie na to mas este cas).
Co sa tyka Stopwatch:
1. zapnem MPLAB SIM
2. debugger - settings - osc/trace - processor frequency (nastavim hodnotu podla toho aky mam krystal)
3. zapnem si stopwatch
4. rebuild project
5. nastavim breakpoint na instrukciu pred zaciatkom slucky
6. nastavim si breakpoint na instukciu za koncom slucky
7. kliknem processor reset (F6)
8. kliknem run (F9), simulator sa zastavi na prvom breakapointe
9. kliknem step into (F7), tym som sa dostal na zaciatok mojej oneskorovacej slucky, vynulujem stopwatch kliknutim na tlacitko ZERO
10. kliknem na run (F9)
11. kuknem stopwatch a mam zobrazeny cas
Tento postup si pamatam este z doby ked som zacinal s pickami, neviem skade ho mam (mozno z nejake user guide, mozno som sa k tomu doklikal sam bohvie) a asi ani neni najlahsi a najkratsi ale nikdy ma nesklamal, rozmyslal som ze ti sem dam ozaj uz obrazkovy navod ale ked mne sa to tak nechce ukladat a este do toho kreslit co kde stlacit
![Sad :-(](./images/smilies/icon_sad.gif)
0
Hledej mne lásko má, kde je pivo tam jsem já.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 0 Odpovedí
- 1795 Zobrazení
-
Posledný príspevok od používateľa liptacik
-
- 19 Odpovedí
- 2222 Zobrazení
-
Posledný príspevok od používateľa 5ko
-
- 14 Odpovedí
- 1374 Zobrazení
-
Posledný príspevok od používateľa cs001
-
- 2 Odpovedí
- 1687 Zobrazení
-
Posledný príspevok od používateľa romiadam
-
- 2 Odpovedí
- 727 Zobrazení
-
Posledný príspevok od používateľa Edgar