Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   724 / 1320
(#) icserny válasza speki hozzászólására (») Ápr 11, 2010 /
 
Ezzel akkor nem tudok mit kezdeni, mivel azt sem tudjuk, hogy mit csinál a programozód.
(#) szilva válasza speki hozzászólására (») Ápr 11, 2010 /
 
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?
(#) watt hozzászólása Ápr 12, 2010 /
 
Ha van valaki, akinek korábban gondja volt LPT égetőkkel, kérem nézzen be ide: Bővebben: Link
(#) Attila86 hozzászólása Ápr 12, 2010 /
 
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.
(#) icserny válasza Attila86 hozzászólására (») Ápr 12, 2010 /
 
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á...
(#) Hp41C válasza Attila86 hozzászólására (») Ápr 12, 2010 / 1
 
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:
  1. movlw   minta_tábla+(TablSize+1)
és ezzel visszavezetted egy relokálható szimbólum és egy konstans összegére.....

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?
(#) Hp41C válasza Hp41C hozzászólására (») Ápr 12, 2010 /
 
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:
  1. btfss   STATUS, C               ;ha nem az utolsó digit van bekapcsolva, akkor
  2.                 goto    TABLA2          ;ugorjunk az adott digitet vezérlő rutinhoz

helyett a
  1. bnc     TABLA2          ;ugorjunk az adott digitet vezérlő rutinhoz

- 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)....
(#) Attila86 válasza Hp41C hozzászólására (») Ápr 12, 2010 /
 
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!
(#) Hp41C válasza Attila86 hozzászólására (») Ápr 12, 2010 /
 
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...)
(#) Attila86 válasza Hp41C hozzászólására (») Ápr 12, 2010 /
 
Idézet:
  1. movlw   minta_tábla+(TablSize+1)

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.
(#) icserny válasza Attila86 hozzászólására (») Ápr 13, 2010 /
 
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ó:
  1. MOVLW high minta_tábla
(#) balogpepe hozzászólása Ápr 13, 2010 /
 
Ü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ő?
(#) icserny válasza balogpepe hozzászólására (») Ápr 13, 2010 /
 
Meg lehet próbálni összevonni két memórialapot (a linker állományt kell átszabni). Például így:
  1. ACCESSBANK NAME=accessram  START=0x0               END=0x5F
  2. DATABANK   NAME=gpr0       START=0x60              END=0xFF
  3. DATABANK   NAME=gpr1       START=0x100             END=0x11F
  4. DATABANK   NAME=gpr2       START=0x120             END=0x2FF

Elvileg gpr2-be most pont befér a tömböd...
(#) Hp41C válasza icserny hozzászólására (») Ápr 13, 2010 / 1
 
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
  1. movlw   minta_tábla+(TablSize+1)

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
  1. movlw   high(minta_tábla+(TablSize+1))

Ezt is le tudja fordítani....
(#) Attila86 válasza Hp41C hozzászólására (») Ápr 13, 2010 /
 
Idézet:
„movlw high(minta_tábla+(TablSize+1))”

Ez már jó, köszönöm!
(#) balogpepe válasza icserny hozzászólására (») Ápr 13, 2010 /
 
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!
(#) lidi hozzászólása Ápr 13, 2010 /
 
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ő ?
(#) BlackStar hozzászólása Ápr 13, 2010 /
 
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
(#) potyo válasza lidi hozzászólására (») Ápr 13, 2010 /
 
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.
(#) potyo válasza BlackStar hozzászólására (») Ápr 13, 2010 /
 
Pickit kettő.
(#) lidi válasza potyo hozzászólására (») Ápr 13, 2010 /
 
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.
(#) potyo válasza lidi hozzászólására (») Ápr 13, 2010 /
 
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?
(#) BlackStar válasza potyo hozzászólására (») Ápr 13, 2010 /
 
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
(#) icserny válasza BlackStar hozzászólására (») Ápr 13, 2010 /
 
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.
(#) trudnai válasza BlackStar hozzászólására (») Ápr 13, 2010 /
 
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.
(#) Attila86 hozzászólása Ápr 13, 2010 /
 
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...

tábla2.png
    
(#) potyo válasza Attila86 hozzászólására (») Ápr 13, 2010 /
 
Á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?
(#) icserny válasza Attila86 hozzászólására (») Ápr 13, 2010 / 1
 
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.
(#) Attila86 válasza icserny hozzászólására (») Ápr 13, 2010 /
 
Í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.
(#) potyo hozzászólása Ápr 14, 2010 /
 
Láttátok? Link
Következő: »»   724 / 1320
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