Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   546 / 1319
(#) mateakos válasza feki00 hozzászólására (») Aug 16, 2009 /
 
Átbogarásztam a forráskódot, amennyire tudtam optimalizáltam is.
Készítettem egy tesztet, amit MPLAB SIM szimulátorral lefuttattam.
4 bájtos bináris számokat alakított át
de csak 0-tól 65535-ig teszteltem, mert sokáig tartott volna minden 4 bájtos számra tesztelni.
Az eredmények a következőek:
tesztkörnyezet üresjáratban: 1312268 ciklus
tesztkörnyezet az optimalizálás előtti M_BCD és M_CLR eljárással: 455344328 ciklus
tesztkörnyezet az optimalizálás utáni M_BCD (M_CLR bele lett építve) eljárással: 337182920 ciklus
M_BCD + M_CLR optimalizálás előtti hossza: 72 utasítás
M_BCD optimalizálás utáni hossza (M_CLR bele lett építve): 57 utasítás (az optimalizálás előttinek 79%-a)

Futási idők a tesztkörnyezet futási idejét levonva:
optimalizálás előtt: 454032060
optimalizálás után: 335870652 (az optimalizálás előttinek 74%-a)

Nézd meg, hogy milyen rövidítéseket csináltam, melléklem az optimalizált változatot. Szerintem még tovább is optimalizálható, de tőlem ennyi tellett.
Egyébként még nem ismertem ezt az algoritmust, úgyhogy én is tanultam belőle.

main2.asm
    
(#) feki00 válasza mateakos hozzászólására (») Aug 16, 2009 /
 
Hűha, nagyon köszi a segítséget, nem gondoltam hogy ennyire le lehet csökkenteni a futásidejét.
Volt pár dolog ami új volt nekem az optimalizálásod után, én is tanultam újat

Még egyszer köszi
(#) googa hozzászólása Aug 17, 2009 /
 
Sziasztok!

Tudnátok ajánlani minimum 256kbyte méretű flash memória IC-t? I2C vagy SPI kommunikációval kellene.

Köszi!
(#) icserny válasza googa hozzászólására (») Aug 17, 2009 /
 
Itt nézz körül!
(#) szilva válasza watt hozzászólására (») Aug 17, 2009 /
 
Szerintem ez azRCD programmer-nek egy igénytelenül lebutított változata. Valamikor a kezdet kezdetén én megépítettem az RCD-t egy lukacsos próbapanelen, de természetesen PICkit2 típusú ICSP csatlakozóval a szélén. Pár 16F-et és 12F-et sikeresen programoztam vele. Igaz, én tudtam, hogy rendes soros portom van.

Annyival volt szimpatikusabb az RCD a különböző JDM-eknél, hogy ennek a PIC oldali földje a PC normál GND-jével van összekötve. Külső áramkörök matatásánál (ICSP összeköttetés) nem mindegy, a JDM-nél szerencsétlen esetben akár rövidzárat is előidézhetünk a COM port bitjei között a védőföldön keresztül. Ennek ellenére egy tapasztalatlan kezdőnek nem ajánlható, mert ha nem működik elsőre, nem tudja, merre induljon a hibakereséssel.
(#) mateakos válasza feki00 hozzászólására (») Aug 17, 2009 /
 
Van még néhány ötletem:
A program elején a BCD számhoz 2 szer annyi bájt van lefoglalva mint a binárishoz, azaz bitenként 0,5 darab 10 es számrendszerbeli számjegy.
Ha egy n bites bináris számhoz még 3 bitet hozzáveszünk, akkor a maximális ábrázolható szám az eddiginek 8 szorosa +7 lesz.
Ha egy k számjegyű tízes számrendszerbeli számhoz egy számjegyet hozzáveszünk, akkor a maximális ábrázolható szám az eddiginek 10 szerese +9 lesz.
Tehát elég három bitenként egy számjegyet venni.
Azaz a bitenként szükséges 10-es számrendszerbeli számjegyek száma nem több mint 0,3333...
n bites bináris szám ábrázolásához tízes számrendszerben biztos elegendő n/3 (felfele kerekítve egészre) számjegy, ami BCD-ben (n/3 (felfele kerekítve))/2 (felfele kerekítve) bájt.

Ennyi biztos elegendő, de mennyi szükséges?
A válasz nem is annyira bonyolult.
A legnagyobb n bites szám, mint tudjuk 2^n - 1.
2^n sohasem végződik nullára, tehát ha a -1et elhagyjuk, akkor nemhogy a számjegyek számában nem lesz külömbség, hanem semelyik számjegyben az utolsó kivételével. (már optimalizáltunk egy kicsit )
Egy szám számjegyeinek a számát meghatározhatjuk matematikai úton "akármilyen" számrendszerben, ha vesszük az "akármilyen" alapú logaritmusát, és felfelé kerekítjük az eredményt.
A szükséges számjegyek n bites bináris szám esetén tízes számrendszerben: lg(2^n) (felfelé kerekítve [lg - tízes alapú logaritmus])
Áttérhetünk más alapra is, tehát:
log(2^n)/log(10) uagyan azt kapjuk, de most már a log akárhanyas alapú logaritmust jelenthet (de a kettő azért legyen azonos )
Kettes alapú logaritmust használva:
n/log(10)= n*1/log(10) (itt már csak kettes alapú logaritmust vehetünk, mert a tört számlálójában már azzal számoltunk) 1/log(10) minden n esetén ugyan az lesz (lévén, hogy nincs is benne n), tehát kiszámolhatjuk előre.
1/(kettes alapú logaritmus 10) az kb 0.301029996
Tehát bitenként kb 0.301029996 db tízes számrendszerbeli számjegy szükséges.
Végül az n bites bináris szám ábrázolásához szükséges tízes számrendszerbeli számjegyek száma:
n*0.301029996 (felfele kerekítve, mert csak egész db számjegyünk lehet)
BCD ábrázolásban ez (n*0.301029996(felfele kerekítve))/2 (felfele kerekítve) bájtot jelent (mert félbájtunk sem szokott lenni)
Ez is gyorsít a programon, mert nem fogjuk mindig shiftelni a fölösleges úgyis mindig nulla bájtokat amit az előző változatokban megtettünk, és nem utolsó sorban nem foglalunk le fölösleges regisztereket.

Már van egyéb ötlet is az optimalizálásra, de azt még ki kell dolgozni.
(#) Kapitány002 hozzászólása Aug 17, 2009 /
 
Sziasztok!

A segítségeteket kérném. Mostanában kezdtem elmélyedni a PIC mikrovezérlők programozásában és van egy kis programrészlet, ami egyszerűen nem akar működni. Hol lehet a hiba? A programnak egyébként csak annyit kellene csinálnia, hogy folyamatosan küldi az üzenetet a számítógép soros portjára. (Annyit biztosan tudok, hogy a konfigurációs szót jól állítottam be és az MPASM is le tudta fordítani a progit.) Tudnátok segíteni? Előre is köszi!

USART1.ASM
    
(#) potyo válasza Kapitány002 hozzászólására (») Aug 17, 2009 /
 
Mondjuk az RCSTA, SPEN bitet be kellene állítani, mert azzal engedélyezed a soros portot a pic-en. A 12-6 táblázatot nézd meg, ott fehér háttérrel vannak azok a bitek, amiknek közük van a soros adatküldéshez.
(#) SzT3 hozzászólása Aug 17, 2009 /
 
Sziasztok
Volna egy gondom van egy conrados picprogramozó kártyám ami egyben tesztkártya is illetve van benne egy 16F627-es IC és nézegettem a programokat illetve irogattam át a villogás mintát és egyszercsak amikor töröltem volna az előző programot hogy rátöltsem a következőt azt irta ki hogy
No pic on board
Programmer must be set to pgm mode
pic type mismatched with software

namost ami lehetett hogy pici lányom sündörgött itt körülöttem és áttolta az adapter potiját 12 v ről 9 v ra és igy akartam nekiindulni a felprogramozásnak ezen van egy 3 állásos kapcsoló középső állása standbay ez alap van egy prog itt tudom felprogramozni és van egy run ebben az állásba meg elindul a felirt program.
NAmost most olyat csinál hogy lehuztom prog állásba kezdeném a törlést és akkor kiirja azt a hibaüzenetet és vele egyidőbe elindul a kártyán (ledeken) a program
Mit tudok vajon csinálni? Kérlek segítsetek. .
(#) potyo válasza SzT3 hozzászólására (») Aug 17, 2009 /
 
Ki kell mérni, hogy amikor programozás van, akkor miért nem jelenik meg a PIC-en a programozófeszültség. A 9V biztos nem tett tönkre semmit.
(#) SzT3 válasza potyo hozzászólására (») Aug 17, 2009 /
 
Énis ebbe bizom. . . Mármint hogy nem tett tönkre semmit. . .
Tudom ez édes kevés de kívülről nem látszik semmi se az áramköri oldalról se a kondi ellenállás ic oldaláról sehol nem látok melegedés nyomot nincs semmi felfújódva elszineződve?
MIt mérjek?. . SZerintem ez füstbe ment terv. . NA mindegy holnap jön a doki ő eldönti hogy mikor állhatok lábra asztán elviszem valami szakihoz aki többet ért hozzá mint én? Vagy elvileg kitudom énis mérni?
Mert amugy minden működik rajta. reset gomb kimenet bemenet (mármint program közbe. . .)
(#) SzT3 válasza potyo hozzászólására (») Aug 17, 2009 /
 
Még egy apró kiegészítés, van rajta 3 visszajelző led
az egyik a betápot jelzi a másikat amikor programozom a PIC et akkor világit hgy fut a programozás vagy az olvasás illetve egy figyelmeztető hogy most ne vedd ki a PIC-et
namost eddig ugy volt hogy lehúztam a kapcsolot progba. elindítottam az irást és csak akkor kezdett el világítani az irást jelölő led
de most amint lehuzom a kapcsolot prog állásba rögtön elkezd világítani.
ez jwlwnt valamit?
(#) mateakos válasza SzT3 hozzászólására (») Aug 18, 2009 /
 
A PIC VPP (4-es) és Vss (5-ös) lába között kell kb 12 V-nak lennie programozáskor (és a program kiolvasásakor is).
Kivéve ha az LVP (alacsonyfeszültségű programozás) mód be van kapcsolva a programozó szoftverében.
Ha valahol találsz olyat, akkor az legyen kikapcsolva.
(#) trudnai válasza SzT3 hozzászólására (») Aug 18, 2009 /
 
Idézet:
„Tudom ez édes kevés de kívülről nem látszik semmi se az áramköri oldalról se a kondi ellenállás ic oldaláról sehol nem látok melegedés nyomot nincs semmi felfújódva elszineződve?”


Nyilvan Te is tudod, hogy legtobbszor nem latszik, ha egy aramkori elem zarlatossa vagy szakadtta valik...

Amugy nem tudom milyen az a programozo/demo board amivel szenvedsz, de volt nekem anno egy Vellerman gyartmanyu aminel hasonlo modon kellett programozni ill futtatni a firmware-t (harom allasu kapcsoloval). Abban 3 tok volt ha jol emlekszem es egy jumperrel lehetett allitani, hogy melyik tokot hasznalom eppen. Ha neked is ilyesmid van akkor ellenorizd, hogy esetleg ez a jumper jol all-e. Azonkivul az enyemen volt egy kulon kristaly ami nem tudom miert nem akart mukodni egy ido utan -- ezt egy jumperrel lehetett letiltani, talan ezt is erdemes lehet letiltani ha van erre lehetoseged. (Amugy is nezd vegig, hogy minden jumper jol all-e, es probaldd meg vegig kovetni a Vpp es Vdd vonalakat a PIC-tol visszafele, hogy hol "akad el" a feszultseg szint -- ja es probaldd meg a PIC-edet egy baratodnal felprogramozni, hogy az jo-e)

Amugy a 12V helyett 9V nem okozhat gondot, csak ha pl forditott polaritast kapott. Megjegyzem az en panelem 15V-ot kert mert volt sajat regulatora, de hat nyilvan akkor a Tied mas ha 12V-t ker csak.
(#) feki00 válasza mateakos hozzászólására (») Aug 18, 2009 /
 
Helo

Csodálom a matekos levezetésed, egy-két helyen utánaszámoltam jónak tűnik, nem értem hogy jött ki, nem is baj Viszont nem tudom hogy MPLABba van-e felfele kerekítő függvény, a logaritmust még meg lehet oldani konstanssal.

Az ötletedből próbáltam ügyeskedni egy kicsit, minden bcd eltoló rutin előtt megnézi meddig van tele a bcd regiszter és csak a tele levő regisztereket tolja el. Ez kb 5 utasítással jelentett többet, de ez többször lefut egy konverzió alatt. Abban reménykedtem hogy ez a plusz idő visszajön majd hogy kevesebb bájtot kell eltolni, de nem így lett, visszanőtt 40000000ciklus felé a futásidő FFFF-ig számolásnál :no:

Szépnapot

(#) mateakos válasza feki00 hozzászólására (») Aug 18, 2009 /
 
A harmadik változat már csak 42 utasítás A legelsőnek 58 %-a.
A BCD regisztert a REG_X mellé tettem, így a shiftelés kisebb lett, mert egyszerre shiftelem a kettőt a REG_X-ből a biteket átcsúsztatva BCD-be.
REG_T2 fölöslegessé vált, tehát kisebb méret mellett még kevesebb regisztert is igényel.
Viszont a futásidő növekedett: 366672572 ciklus.
A legelsőnek 81%-a.
Tehát sebességre optimalizálni a második változatból érdemes kiindulni, méretre viszont a harmadikból.

Ezt a tesztet még az eredeti túlméretezett BCD regiszterrel futtattam, hogy össze lehessen hasonlítani az előző változatokkal. (Mert lehet, hogy az algoritmus lassúbbságát kompenzálta volna ha a már nem túlméretezett BCD regiszterrel tesztelem és akkor nem derül ki, hogy lassabb.)

main3.asm
    
(#) SzT3 válasza trudnai hozzászólására (») Aug 18, 2009 /
 
HAli stimmel ez is egy velleman.
csak ez 4 foglalatos. stb.
hát a sok rossz hir között történt egy jó is.
Ma amikor elkezdtem foglalkozni megint a kártyával. . mintha semmi baja nem lenne mükődik ir olvas töröl. . minden gond nélkül azóta is.
(#) SzT3 válasza SzT3 hozzászólására (») Aug 18, 2009 /
 
Sziasztok. . segítséget szeretnék kérni.
Az elmult napokba megszültük nagynehezen az áramkört az uln2003 -okal namost ami a gondom hogy MIvel tegnap sikerült megnyekkentenem a térdem ezért ágyhoz vagyok kötve és válalkoz szellemű egyént keresnék aki két példányba megépítené a az említett áramkört illetve a teszt áramkört Természetesen az alkatrészeket és a "munkadíjat" rendezem . Ha lenne valaki aki tudna rajtam segíteni kérem jelentkezzen. .
Előre is köszönöm
(#) googa hozzászólása Aug 19, 2009 /
 
Sziasztok! Tegnap már kérdeztem egy hasonlót a kezdő topikban, de ma újabb kérdésre ébredtem.
Szóval tervezek egy szerkezetet, aminek a központi vezérlő eleme egy PIC lesz, ami 5V-ról megy. Azonban vannak olyan periféria IC-k, és LCD kijelző, amik 3V-ról fognak üzemelni. Ezek a perifériák I2C-n, az LCD pedig SPI-n keresztül tudnak kommunikálni a PIC-el. Egyéb jelek, meg csak simán, lábról-lábra mennek.
A kérdésem a következő: Mivel a PIC 5V-os és a többiek 3V-osak, ezért a kommunikáció miatt kell valamilyen köztes eszközt alkalmazni? Mi lenne az és hogyan kell vele bánni?
Hálás köszönet!
(#) elektroláma válasza googa hozzászólására (») Aug 19, 2009 /
 
Egy topik

Ahol ott a gyártó ajánlása is:
PDF
(#) gulasoft válasza googa hozzászólására (») Aug 19, 2009 /
 
vagy használj 3.3V-os picet, van belűlük 18F-es, a 24-esből csak 3.3-as van.....
(#) googa válasza gulasoft hozzászólására (») Aug 19, 2009 /
 
Jó-jó, köszönöm mindenkinek! A 3,3V-os PIC-el meg az lenne a bajom, hogy az 5V-os eszközökkel, hogyan kkommunikálnék...
Egyébként valószínűleg jó nyomon vagyok, vagy FET-el, vagy cél IC-vel meg tudom valósítani.
(#) trudnai válasza googa hozzászólására (») Aug 19, 2009 /
 
Bemenetkent csak akkor lehet gond, ha smitt triggeres (azt hiszem az i2c ilyen). Ekkor erositot kellene tenni oda ill. ha annak a masik eszkoznek a kimenete OD-s akkor eleg az 5V-ra egy felhuzo... hmm mintha az i2c ezt lehetove tenne, de most szabin vagyok es nem ferek hozza az adatlapokhoz. Kimenetkent akar egy fesz oszto is megteszi, avagy ha a PIC kimenete OD-s akkor ugyanugy egy felhuzo ellenallas.

A Microchip oldalan ha keresgelsz van jo par doksi 3V-5V eszkozok illeszteserol, az egyszeru aramkoroktol kezdve a "korrekt" szintillesztesig szinte minden.

Ja, amugy szinte az osszes PIC tud 3V-rol is menni, persze meg kell nezned az adatlapot, hogy a kivant orajellel ilyen alacsony Vdd-vel elmegy-e.
(#) icserny válasza googa hozzászólására (») Aug 19, 2009 /
 
Idézet:
„A 3,3V-os PIC-el meg az lenne a bajom, hogy az 5V-os eszközökkel, hogyan kkommunikálnék...”

A 3,3 V-os PIC-eknek vannak "5 V toleráns" lábai, stb...
Persze, azt te tudod, hogy melyik jár kevesebb bonyodalommal.
(#) jdani hozzászólása Aug 19, 2009 /
 
Hali. Van egy PIC égetőm. viszont égetéskor hibát ir ki, viszont 80%-ba mégis működik a PIC, viszont nem teljesen. Lehet az a gond, hogy nullmodem kábelt használok (RS232) ?.. a pin-ek jól vabank bekötve..
(#) watt válasza jdani hozzászólására (») Aug 19, 2009 /
 
Milyen égetőd van?
(#) googa hozzászólása Aug 19, 2009 /
 
Sziasztok! Nagyon kellemetlen dolog történt. A PICKIT2 nem ismeri azt a PIC-et, amit azért vettem, hogy LCD-t hajtsak meg vele. Történetesen: PIC16F1936-ról van szó. Lehet segíteni a problémán? Hogyan? Köszi! goo

ui.: Érdekes, amit a neten találtam leírást, az szerint meg ismeri... Akkor valaki mutatna egy új firmware-t?
(#) potyo válasza googa hozzászólására (») Aug 19, 2009 /
 
Legújabb verziót leszedted a programjából?
(#) googa válasza potyo hozzászólására (») Aug 19, 2009 /
 
Na igen, rájöttem, az kellene...megkeresem, megpróbálom.

Itt van a legújabb verzió, ez isemeri!
(#) googa hozzászólása Aug 19, 2009 /
 
Na, akkor ez meg is volna, most már egy rakat új típust ismer a PICKIT2.
De, honnan lesznek nekem az MPASM-hez új INC fájlok? Pl. a 16F1936 hoz, ami most nekem annyira kellene.

Vagy milyen fordítót használtok ti?
Következő: »»   546 / 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