- ACCESSBANK NAME=accessram START=0x0 END=0x5F
- DATABANK NAME=gpr0 START=0x60 END=0xFF
- DATABANK NAME=gpr1 START=0x100 END=0x11F
- DATABANK NAME=gpr2 START=0x120 END=0x2FF
Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Ezzel akkor nem tudok mit kezdeni, mivel azt sem tudjuk, hogy mit csinál a programozód.
A programozó szoftverben a hex betöltése után nem tudod kézzel megadni, hogy mettől meddig írja vagy olvassa a PIC memóriáját?
Ha van valaki, akinek korábban gondja volt LPT égetőkkel, kérem nézzen be ide: Bővebben: Link
Ha ez működik:
clrf összeg+2 És például ez is: lfsr FSR1, minta_tábla+3 Meg ez is: movlw utolsó_elem Akkor ez miért nem? movlw utolsó_elem+1 A tábla utolsó eleme címének felső bájtját szeretném betenni a W-be.
Azért nem működik, mert az utolso_elem+1 egy 12 bites cím. Ha neked csak a felső fele kell, akkor használd a "high" operátort!
MOVLW high utolso_elem+1 Mostmár csak azt ellenőrizd a szimulátorban, hogy az 1-et mihez adja hozzá...
Szia!
A probléma a relokálható kód értelmezésében van....: Az "utolsó_elem" egy relokálható szimbólum és egy konstans összege, az "utolsó_elem+1" egy relokálható szimbólum és két konstans összege.... Írd így:
Eddig tart az assembler és a linker megfejtő képessége... Nem lenne egyszerűbb a sok osztogatás helyett egy bináris -> BCD átalakító rutin?
Továbbá
- a call helyett használd a rcall-t, - a goto heyett a bra-t (van feltételes is belőle pl. bnn ) pl:
helyett a
- a goto 4 byte-os <---> ugrótáblák, de ezt már megbeszéltük régebben.... - az ugrótábláknál az add PCL,w előtt a PCLATH és PCLATU regisztereket is fel kell tölteni (egy movff PCL, DUMMY megteszi)....
Az osztogatásos bináris -> BCD átalakító rutint én írtam magamtól, ez volt az első bonyolultabb feladat amit sikerült megoldanom. Szóval büszke vagyok rá és ezért használom a sajátomat.
Az rcall miért jobb mint a call? A goto-k helyett már bra-t használok egy ideje, de amikor ezt a programot elkezdtem írni akkor még nem. Ezért van benne sok helyen még goto. A kijelző-vezérlő rutint régebben írtam meg, amikor még egy csomó dolgot nem tudtam. Azóta sokat tanultam és ezért majd az egész kijelző-meghajtást újra fogom írni szerintem. Ezért ezekkel nem is szeretnék most foglalkozni. Egyenlőre a 8-8db minta eldobásán dolgozom, majd ha ezzel megvagyok akkor jöhet a kijelző-meghajtás átírása. (Igazából már megírtam egy rutint ami eldobálja szépen a legkisebb és legnagyobb mintákat, de azóta kitaláltam egy másik algoritmust ami több mint 500-szor gyorsabban fut le és most azt programozom. ) A segítséget köszönöm!
Szia!
A rcall csak két byte, de csak a hívástól max +-1k-ra levő rutint lehet hívni...(fele helyfoglalás..) Én is dédelgettem egy ideig a saját BCD-bináris, bináris- BCD rutinjaimat, de amikor egy kicsit hosszabb számot (2000000) kellett konvertálnom, letöltöttem a belinkeltet és megdöbbentem mennyi helyem szabadult fel... (Egy 1 ppm felbontású frekvencia és periódusidő mérő automatikus méréshatárváltással, frekvencia és priódusidő kijelzéssel (48 bites szám osztása 24 bitessel), LCD kijelző kezelésével, uart kommunikációval, 2 csatorna A/D és D/A lehetőséggel nem éri el a 3200 byte helyfoglalást...) Idézet: „
Ez így nem jó sajnos. Az utolsó minta címe 0x19F elvileg. Ennek a címnek a felső byte-ja 0x1. De nem ez kerül be a W-be a szimulátor szerint hanem valami más. Idézet: „movlw minta_tábla+(TablSize+1)” Már megint kihagytad a "high" operátort! Egyébként az utolsó elemnek ugyanaz lesz a lapcíme (a cím felső bájtja), mint az első elemnek, tehát gyakorlatilag ez is jó:
Üdv mindenkinek!
Kezdő pices vagyok, és egy nokia 3410-es lcd-t próbálok meghajtani egy 18F2550-sel. Ha egyetlen karaktert kell kiírni akkor minden rendben azonban ha beteszem a karakterkészletet a programba akkor nem tudja lefordítani az mplab, mert kb 480 bájt a mérete és nem fér el egyetlen bankban. A programot C18-al fordítom. Próbáltam #pragma idata gpr2 kóddal áthelyezni, de mivel nagyobb mint 256 bájt, így is hibát jelez. Ilyenkor mi a teendő?
Meg lehet próbálni összevonni két memórialapot (a linker állományt kell átszabni). Például így:
Elvileg gpr2-be most pont befér a tömböd...
Szia!
Az előző hozzászólásodban adott megoldás csak az érték felső nyolc bitjének eltolását oldja meg, a kifejezést az MpLAb nem tudja kiértékelni, túl összetettnek találja (kipróbáltam) . Ezek után írtam a
javaslatomat, amit a fordító már le tud fordítani.... A hibát megszünteti. Sajnos nem ad rá egy figyelmeztetést, ami egyértelműen közli, hogy a kifejezés értéke nem ábrázolható 8 biten, az alsó nyolc bitet használja fel - mint az abszolút kód generálásnál. Már nem jelez hibát. Amit Attila86 szeretne az valóban a
Ezt is le tudja fordítani.... Idézet: „movlw high(minta_tábla+(TablSize+1))” Ez már jó, köszönöm!
Ez megoldotta a problémát! Nem gondoltam, hogy ilyen egyszerűen lehet babrálni ezekkel a memóriakiosztásokkal! Köszönöm a segítséget!
Elméletben tudom hogy nem szabad ellenállás nélkül ledet kötnöm portlábra. De gyakorlatban mi fog történni ?
Túl sok áramot fog kapni a led, és/vagy tönkremegy a portláb ? Vagy egyik sem, mert leesik annyira a fesz a portlábon hogy nem tud 25mA nél nagyobbat kiadni ? 3 digites multiplex led kijelző lenne, digiteket a pic hajtaná közvetlenül, és a közös katódokat is a pic húzná le, tranyó nélkül. Tudom hogy így elvileg 1 lábra jutna a 7 szegmens árama. Kérdés hogy tuti megsül-e, vagy kibírja. Vagy ha mondjuk a digit kiválasztást tranyóval leválasztom, akkor már jó vagyok-e, vagy még mindig veszélyben vannak a szegmens meghajtó kimenetek, és a led kijelző ?
Sziasztok!
Szeretném a véleményeteket kérni. Sajnos elromlott az ICD2 klón programozóm. Sürgősen vennem kell egy programozót. Melyik programozót javasoljátok PICKit2 vagy PICKit3. A válaszokat előre is köszönöm
Gyakorlatban bármelyik megtörténhet. A 25mA egy olyan adat, hogy annyit biztosan bir a láb, ezt garantálják. Hogy gyakorlatban mennyit bir, azt esetleg egyedi méréssel lehet meghatározni. Feszültségesés megint ilyen a lábnál, hogy ami az adatlapban szerepel, attól rosszabb nem lesz, jobb lehet.
Digitekhez egy-egy erősítőüzemben hajtott tranzisztorral szinte semmit sem bonyolítasz, és akár többszáz mA-el is meghajthatod. A szegmenseket - ha nem valami nagyáramú a kijelződ - rákötheted a picre egy-egy soros ellenállással.
Magyarán te is a tutit ajánlod inkább: azaz ne spóroljam ki se a digit meghajtó tranyót (és annak bázis ellenállását ) és se a szegmensek ellenállásait. Ilyenkor Kár hogy nem áramgenerátoros a kimenet.
A bázisellenállás kihagyható, ha erősítőüzemben használod a tranzisztort. Azon a hét vagy nyolc ellenálláson mit spórolnál meg? Azt a 20Ft-ot?
Köszönöm válaszod.
A ChipCAD-nél a PICKit3 ajánlották de nem indokolták meg miért. Nem ismerem a PICKit programozót. Miért a PICKit2 javaslod? Csak röviden a lényeget leírnád. Köszönöm
A PICkit2 egyszerűbb felépítésű, emiatt akár házilag javítható, utánépíthető. Van saját kezelőprogramja, s számos olyan szolgáltatása (Logikai eszköz, 3 csatornás logikai analizátor, UART kommunikáció, hordozható programozó), amelyek a PICkit3-nál egyelőre hiányzanak.
Ugyanakkor számítani kell rá, hogy a PICkit2 gyári támogatását előbb-utóbb beszüntetik.
A PicKit3-asat keruldd el nagy ivben! A boltban persze, hogy azt javasoljak, mivel a beragadt raktar keszlettol meg szeretnenek szabadulni -- ami ertheto, de a Te erdekeiddel ellentetes!
Ahogy icserny irta a PicKit2 tamogatottsaga elobb-utobb meg fog szunni, sot, ez egyszer mar meg is tortent! Csakhogy a PicKit3 annyira rosszu sikeredett, hogy kenytelenek voltak nem is olyan regen megiscsak ujabb update-et csinalni a 2-eshez... Amugy ha meg is szunik a tamogatottsaga attol meg a PICjeidet fogod tudni programozni, es a Microchip nagyon hires arrol, hogy a chip-jeit hosszu tavon tamogatjak, tehat kb 10 evig nem lesz gondod hacsak nem akarsz mindenaron a legeslegujabb chipeken dolgozni.
A tábla a 0x100-as címtől kezdődik, minden minta ami benne van két bájtos. A legelső minta felső bájtját (0x101) viszont miért nem akarja megjeleníteni egy sorban az MPLAB? Külön be tudom tenni a 0x101-es regisztert, de úgy egyben mint a többit nem akarja megmutatni. Miért? Próbáltam már mindent...
Átváltottad 16 bitesre a kijelzést? Illetve a többi értéket jól mutatja, nincsenek a felső és alsó bájtok elcsúszva?
Próbálj meg jobb egérgombbal rákattintani a minta_tabla nevére, és a Properties manüpontban nézd meg, hogy 16 bitesre át tudod-e állítani.
Így sikerült, köszönöm!
Potyo: A többi értéket jól mutatja, nincsenek elcsúszva és elvileg mind 16 bitesre volt állítva. |
Bejelentkezés
Hirdetés |