Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   605 / 1319
(#) icserny válasza Hujikolp hozzászólására (») Nov 15, 2009 /
 
Idézet:
„a GOTO $-1 mennyit megy vissza?”

Könnyű lesz megérteni, ha arra gondolsz, hogy nem "mennyit megy vissza?", hanem "milyen címre ugrik?".

A "$-1" egy kifejezés, amit a fordító kiértékel, s erre a címre irányítja a GOTO utasítással a programot. A "$-$"kifejezés esetén például a 0 címre ugrik a GOTO utasítás. Ennél "visszább" már nehéz volna küldeni...
(#) trudnai válasza icserny hozzászólására (») Nov 16, 2009 /
 
Idézet:
„A "$-1" egy kifejezés, amit a fordító kiértékel, s erre a címre irányítja a GOTO utasítással a programot. A "$-$"kifejezés esetén például a 0 címre ugrik a GOTO utasítás. Ennél "visszább" már nehéz volna küldeni...”


Pedig lehet... PAGESEL-t beallitja egy elozo lapra...
(#) watt válasza Hujikolp hozzászólására (») Nov 16, 2009 /
 
A többiek már a lényeget leírták, én még csak annyit tanácsolnék, hogy ne használd. Használj cimkéket, jobban jársz! Persze az így megírt programot értelmezni lehet, nehezen, csak randa és igénytelen. Szerintem!!!
(#) Kriss válasza watt hozzászólására (») Nov 16, 2009 /
 
Üdv!

Azt szeretném kérdezni hogy PIC 18-nál a CBLOCK 0X0020 után hány regiszter fér el az Access bankban? Ugyanis mikor a 41. regiszternek értéket adok meghal a program egy része, viszont mikor a 42.-nek is értéket adok, akkor meg helyrejön. (Az utóbb felsorolt 2 regiszter semmit nem csinál a programban csak van.) Ugyanígy elrontja a programot a cblockban 2. helyen álló flag1 reg. 6. és 7. bitjének állítása, hiába hogy azok semmilyen szerepet nem töltenek be a programban.
(#) icserny válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Az adatlapban kell megnézni,mert van, amelyikben 0-7F az Access Bank RAM része, és van, amelyiknél csak 0-5f (tehát több helyet foglal az SFR tartománya).

Egyébként miért 0x020-tól kezded, miért nem nullától?

Idézet:
„mikor a 41. regiszternek értéket adok meghal a program egy része, viszont mikor a 42.-nek is értéket adok, akkor meg helyrejön.”
Ezt kicsit érthetőbben is mondd el!
(#) Hujikolp válasza watt hozzászólására (») Nov 16, 2009 /
 
Köszönöm mindenkinek a segítséget! :eljen:

Címkékkel tényleg átláthatóbb, akkor majd azzal fogom megcsinálni
(#) Kriss válasza icserny hozzászólására (») Nov 16, 2009 /
 
Jelenleg a programban 40 regiszter van felsorolova és amikor létrehozok egy 41.-et akkor még semmi gond mindaddig még bármilyen értéket nem adok neki, mert akkor leáll az összes low prioritású megszakítás. Amikor viszont csinálok egy 42.-et és amikor értéket adok neki akkor megint működik a program. Ha 0x000tól kezdem akkor is ugyanez történik.
(#) potyo válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Csatold a programodat, ami a hibás működést produkálja.
(#) trudnai válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Valamit nyilvanvaloan elirtal amitol az SFR-t turkalod. A 40 db regiszter byte vagy word vagy dwrod meretu amugy?

(amugy javasolnam terj at linker scriptre, ott ilyen jellegu hibak nem lephetnek fel...)
(#) Kriss válasza potyo hozzászólására (») Nov 16, 2009 /
 
Csatolom a teljes projectet proteus szimulációs fájlal együtt és az IR jeleket is mp3ban, ezeket majd wav-ba kell konvertálni és betallózni proteusban. Az xxx regisztert kiszedve működik rendesen a program. Magamtól sajnos sosem jönnék rá hogy mi a hiba mert még nagyon kezdő vagyok PIC téren, úgyhogy nagyon hálás vagyok minden segítségért!
(#) potyo válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Ha jól nézem, akkor abszolút módban van a programod írva, viszont relokálható fordítást csinál az MPLAB. A Project->Build Options->Project->MPASM/C17/C18 Suite fülön állítsd át Generate absolute code-ra. Nembiztos, hogy ebből fakad a probléma, de egy hibalehetőséggel kevesebb.
(#) Kriss válasza potyo hozzászólására (») Nov 16, 2009 /
 
Kipróbáltam, de sajnos ez sem segített.
(#) icserny válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Assembler interrupt kezeléshez nem értek,de néhány dolog feltűnt:

1. Programmegszakításnál nem kellene valamit menteni? (pl. STATUS, WREG)
2. Az LPM-ből való visszatérésnél miért RETFIE FAST szerepel? Az árnyékregisztereket ugyanis HPM használja, illetve felülírja!

(a kódot nem látók kedvéért: HPM és LPM a magas, illetve az alacsony prioritású programmegszakítás kiszolgálását végző eljárások a becsatolt programban)
(#) Kriss válasza icserny hozzászólására (») Nov 16, 2009 /
 
Na ezt nem tudtam. Én azt hittem hogy a low prioritású megszakításnál is használható a retfie fast.
(#) watt válasza Kriss hozzászólására (») Nov 16, 2009 /
 
De nem ez a nagyobbik baj. Mi van a mentésekkel? Így soha nem fog működni. Nézd meg az adatlapban miket és hogyan kell menteni.
(#) potyo válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Nem használható. Sőt egyes chipeknél még a high-nál sem, mert hiba van a chipen. Erratat ellenőrizni kell ezirányba.
(#) Kriss válasza potyo hozzászólására (») Nov 16, 2009 /
 
Szimulációban mindenesetre működik. Épp most teszteltem hogy ha low-ban átírom a w-t meg a statust, aztán retfie fast-al kilépek a megszakításból akkor visszaállítja a w-t is meg a statust is arra ami a megszakítás előtt volt.
(#) trudnai válasza potyo hozzászólására (») Nov 16, 2009 /
 
Idézet:
„Nem használható. Sőt egyes chipeknél még a high-nál sem, mert hiba van a chipen. Erratat ellenőrizni kell ezirányba.”


Azokra volt workaround, de valoban "normalisan" nem lehetett hasznalni, es a workaround miatt meg nem lett sokkal gyorsabb a mentes mintha szoftveresen csinalna azt meg az ember.
(#) watt válasza Kriss hozzászólására (») Nov 16, 2009 /
 
A szimulációba nincsenek bedrótozva a chip hibái!
(#) trudnai válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Idézet:
„Szimulációban mindenesetre működik.”


Szimulatorban vagy a valos chip-en szeretned, hogy mukodjon?

Amugy csak a magas prioritasnal lehet hasznalni - pontosabban az alacsonynal is fog mukodni, csak a bibi az az, hogy egyetlen tarolo helye van. Tehat mig szepen az alacsony prioritasu megszakitast kiszolgalod jon egy magas prioritasu megszakitas, ami miatt az az egyetlen helyen tarolt WREG es STATUS szepen felulirodik... mikor az alacsony szintubol kilepsz pedig ezt a mar atirtat fogja vissza tolteni -- hat ezert nem lehet azt alacsony szintunel hasznalni...

Magas szintunel pedig a mar emlitett hiba miatt nem lehet -- ha jol tevedek a ket szavas adat mozgatasok kornyeken volt a hiba, es valahogy ugy lehetett megkerulni a problemat, hogy az ISR-t CALL FAST-tal kellett meghivni, az sima RETURN-nel tert vissza majd onnan RETFIE FAST -- utana kellene nezni...

(#) Kriss válasza trudnai hozzászólására (») Nov 16, 2009 /
 
Akkor tehát az alacsony szintű megszakítás közben történhet magas szintű megszakítás? Azt hittem hogy megszakítás alatt tiltva vannak a megszakítások. Lesz mit javítani akkor a programon. De ezek még mindig nem lehetnek felelősek a fő hibáért vagy igen?
(#) potyo válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Idézet:
„Akkor tehát az alacsony szintű megszakítás közben történhet magas szintű megszakítás?”


Vajon miért van alacsony szintűnek és magas szintűnek nevezve?
(#) Kriss válasza potyo hozzászólására (») Nov 16, 2009 /
 
Hát én arra gondoltam hogy azért van hogy ne legyen egyrakáson a sok megszakítás és így jobban elkülönül hogy kétfelé van osztva.
(#) watt válasza Kriss hozzászólására (») Nov 16, 2009 /
 
Arra elég lenne néhány szubrutin. Olvasd el az adatlapot, benne van hogy működik...
(#) googa hozzászólása Nov 16, 2009 /
 
Sziasztok! Van egy karakteres LCD modulom, amit már nem egyszer működtettem 16F-es PIC-eken. Most építettem egy eszközt, amiben 18F2520-as PIC buzog és a B-portot tüskesoron kivezettem, hogy mindenféle diagnosztikai ki és bemenetnek használhassam. Ráraktam az LCD-t, megírtam a szokásos kis programot és szép kis fekete négyzetekkel tölti ki az egész sort. Utána néztem, ADCOn regiszterben az analóg pineket, digitálisra kapcsoltam, teljes outputnak állítottam be a B-portot és még az INTCON-t is kikapcsoltam. Elvileg minden rendben van és menni kellene... Mivel a 18-as család nekem újdonság ezért kérdezlek titeket, hogy mit lehetne még kipróbálni. Tudom, hogy így elég nehéz, de vannak itt okos elmék, hátha! Köszi urak!
(#) Kriss válasza potyo hozzászólására (») Nov 16, 2009 /
 
Egyébként hogyan kellett volna írni vagy mit kellene ahhoz változtatni, hogy a program megfeleljen a relocation mód szabályainak?
(#) watt válasza googa hozzászólására (») Nov 16, 2009 /
 
Mondjuk az időzítésekre tippelek, ha netán gyorsabb az oszci. De igazából ennyiből nem lehet mit mondani.
(#) googa válasza googa hozzászólására (») Nov 16, 2009 /
 
Mondom tovább, érdekes...vagyis googa tapasztalatlan. Szóval kapott egy LED-sort tesztelés képen a B-port és a program összesen annyi, hogy B-port felkapcsol és úgy marad. Ehhez képest az történik, hogy vagy elindul tápráadásra, vagy nem. Ha elindul, akkor egy következő pillanatban le is kapcsol a LED-sor, talán újraindul a PIC. Ez mitől lehet? Talán, ha ezt rendezem, menni fog az LCD is.

Watchdog kikapcsolva, az nem okozhat resetet...
(#) potyo válasza googa hozzászólására (») Nov 16, 2009 /
 
LVP?
(#) googa válasza potyo hozzászólására (») Nov 16, 2009 /
 
LVP off-ban van. A jelenség akkor jelentkezik többször, ha PICKIT2-ről tápolom. Ha külső tápról megy, akkor többször beindul Most pl. fixen világít a LED-sor. Kicsit kilátástalan...
Következő: »»   605 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem