Fórum témák
» Több friss téma |
A mostani projektem egyik kezdő eleme lenne, hogy megállapítja mekkora memória van belepattintva a hardverbe.
A megalapított memóriától függően állítaná be a főprogramot amely majd a fő funkciókat fogja levezérelni. Birs Alma: így már értem mire gondolsz, csak elég sok munka van vele. Sok erőforrást igényel, hogy minden egyes byte-nál : olvasunk, mentünk, írunk, újraolvasunk, vizsgálunk/feltétel, majd vissza írjuk az elmentett adatot. Aszt hittem van ennél gyorsabb és hatékonyabb megoldása. Köszi az infót, ha más nem akkor ez lesz a nyerő...
A későbbiek folyamán cserélgetni akarod azokat a csipeket?
Megoldás lehet, hogy első használatba vételkor "formattálod", az elején pár bájtot fix tartalommal, és a memória méretével megtöltesz. Az ugye egyértelmű, hogy egy család tagjainak kezelése kompatibilis. A legnagyobb méret legmagasabb címét beolvasod, mented, majd beleírsz valamit, ellenőrzöd. Ha sikerült, akkor győztél. Visszaírhatod (ha kell) az eredeti tartalmat, és le van tudva a feladat. Ha nem, a következő méret(általában fele) következik, egészen addig, amíg elérsz a legkisebb méretig. Ha az sem jó, akkor hibás, vagy nincs memória bedugva.
Húú de király vagy..
Nah ez a jó megoldás. Isten vagy... És igen, cserélgetem a memóriát. Meg fogom osztani ezt a projektem is veletek, ha végre teljesen kész lesz. Már majdnem kész van, csak pár alkatrészt kell vegyek és kész is. Természetesen egy családból lesznek és leprogramozom az összes végcímet és azokkal fog azonosítani. Köszi mindenkinek...
Esetleg ezekben a memóriákban nincs azonosító lekérhetőség mint a 27Cxx típusokban?
Ez is nagyon jó ötlet, de nem tudom, hogy van e a 25LCxxx családban ilyen.
Ha lenne akkor az megoldaná a dolgot. Adatlapján nem látok ilyet.
Egy apró bökkenő azért még akad:
- Legyen egy típus 2x kapacitásssal (azaz log2(x) + 1 cím bitet kezel) és egy másik x kapacitással (azaz log2(x) cím bitet kezel). A legnagyobb cím (x-1). Ha a nagyobbat teszteled a legfelső memória rekesszel, az írható és olvasható, azaz rendben. Ha a kisebbet teszteled, ez a cím írható és az utoljára beírt adat vissza is olvasható, a programod a nagynak fogja hinni. A memória az (x-1) cím legfelső bitjét nem kezeli, így a saját kapacitácának megfelelő címet fogja átírni ill. a tartalmát visszaadni. Nem egyszerűbb egy típusazonosítóval rendelkező memóriát (családot) használni? SPI memóriáknál szabványos módon kiolvasható: (0x90 vagy 0xAB parancskód). Egyébként is meg kell még tudni az egy "menetben" írható byte -os számát is. Nem tudom mekkora kapacitásra gondoltál. pl: SST25VF512 ... SST25VF080
Á, dehogy vitatkozom én bárkivel is, Veled pedig főleg nem.
Ilyen ez a fordító, ez van, ha tetszik, ha nem. Sok vitatkozni való ezen nincs. Max azt írhatom, hogy kár, hogy így van. Oszt annyi. ASM kódot egyébként írtam úgy, hogy az eljárások függvények egy külön implementált stack-en várták a paramétereiket, és ott is adták vissza a visszatérési értéket. A függvények, eljárások pedig szintén ezen a stack-en hozták létre a lokális változóikat. Ha a stack kezelést sikerül megírni, az stabilan működik, akkor ez a megoldás nagyon leegyszerűsíti a paraméterátadást, a memória gazdálkodást. De ezt nem én találtam. Úgy tanították, hogy ez így kell csinálni. De nem csak a paraméterátadás, lokális változók kezelése amikor a fordítónak stack-et érdemes használnia mindenek felett. Szívesen megnéznék pl. egy olyan kódot, amelyik zárójelezett matematikai kifejezéseket dolgoz fel (pl. csak átírja lengyel formára) stack nélkül. Belehülyülsz, ha megpróbálod Míg stack-el, majdhogynem triviális. Persze, minthogy egy általad is javasolt chip, ahol a nem ilyen sekély, pl. a 188F4520 v.s. 16F877 mindössze 100-200 forinttal kerül többe...valóban nem sok érelme van, hogy az ember a fejét törje. Semmi kedvem C fordítót írni, de a téma után érdeklődőknek sok szeretettel ajánlom az általam igen nagyra becsült Csörnyei tanár úr ide vágó munkáit: Bevezetés a fordítóprogramok elméletébe, I. II.; Formális nyelvek és fordítóprogramok; Fordítási algoritmusok stb. De persze az ezekben leírtak mind alapvetően Neumann elvre szólnak, az is igaz!
Hát az a korlát azért nem egy, vagy kettő, lehet az eepromot éppen elégszer írni ahhoz, hogy ez a kód lefusson. De ha nagyon kell itta megoldás erre is:
Elgondolod az elméleti maximálsi memóriaméretet. Mondjuk azt mondod, hogy 64K-nál biztosan nem nagyobb a memória. Azután a legnagyobb címtől (itt 65535) haladsz lefelé! Az első eset, a mikor vissza tudod olvasni a beírt kódot, az a címezhető terület legutolsó rekesze lesz. Így csak ezt az egye rekeszt módosítottad. Mivel a programod meg jó eséllyel alulról tölti a a memóriát, éppen ezt a rekeszt használja legritkábban.
Arra gondoltam, hogy a program elején elkezdem visszafelé ellenőrizni minden már létező vagy is elérhető memória utolsó címét, hogy oda tudok e írni illetve tudok e onnan olvasni.
Úgy néztem, 25LCxxx családnál 1,2,4,8,16,32,64,128,256,512,1024kbit-es memóriák léteznek. Csak duplázza kell a memória címet léptetnem vagy felezve... Elvileg ez működhet, szóval ki fogom próbálni... Ha van jobb ötlet akkor várom. brato bejegyzése alapján ha létezik ilyen aszosító lekérdezés az még jó lehet... , de nem találtam ilyet az adatlapban. (25LCxxx adatlapját nézegettem)
Miért van az, hogy MPlab-nál elindítom a fordítást és csak ezt írja ki a Build ablakban:
Release build of project `D:\PIC\CCP1_877A.mcp' started. Language tool versions: MPASMWIN.exe v5.30.01, mplink.exe v4.30.01 Sun Oct 12 21:24:46 2014 ---------------------------------------------------------------------- Clean: Deleting intermediary and output files. Clean: Deleted file "D:\PIC\CCP1_877A.mcs". Clean: Done. Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F877A "CCP_1.2.asm" /l"CCP_1.2.lst" /e"CCP_1.2.err" /o"CCP_1.2.o" és itt megáll a történet, nem csinál semmit. A hozzászólás módosítva: Okt 12, 2014
Igen erre gondoltam is, de azt hittem elkerülhető lesz a léptetés miatt.
Gondolok itt arra, hogy amikor léptetek duplázódik mindig a léptető cím ezzel midig előre tolva a címzés hosszúságát. Tehát előröl haladva az 1,2,4 kbite-es memóriáknál 8bites címmel kérdeznék be, a 16,32,64,128,512-eseknél 16bites címmel, és a az 1024-esnél pedig a 24bites címzéssel. Erre ugyan kell majd egy újabb kis feltétel, de ha az elejéről indulok akkor megoldható lenne. Vagy marad az eredeti koncesszió, hogy nem lesz a hardvert ennyire rugalmas és csak 1 memóriát fog ismerni vagy a választott egynek a memória címzésével egyenlő memóriákat beleteszem fixen és akkor azok közül lehet majd választani. Agyalok még rajta. Köszi a segítséget.. Fú, az előző bejegyzésem tele van helyesírási hibával! Bocsánatot kérek! Figyelmetlen voltam. Mentségül szolgáljon, hogy asszony nyaggatott, induljunk már vásárolni. Bocs még egyszer!!
Csak egy adatlapot néztem meg, de volt ahol írták, hogy olvasáskor az utolsó bájt után átfordul 0x000 bájtra , ezt talán ki lehetne használni ha minden típusban így van.
Vess egy pillantást erre a fórumra is
Ide jön a link felirata! A hozzászólás módosítva: Okt 13, 2014
Sziasztok
Egy 18F14K50-el küzdök de valamiért az RA0 és azRA1-es lábon alapból feszültséget mérek, ez normális? Vagy csak a porogramot szurtam el valahol? Flowcode-ban írogatok. Vagy itt szurok el valamit? Idézet: „//C kód: osccon = 0x70;” A hozzászólás módosítva: Okt 13, 2014
Az RA0 és RA1 kivezetések az USB port adatvonalai (D+ és D-). Ezeket csak korlátozottan lehet más célra használni (az USB illesztő letiltása után digitális bemenetek lehetnek, de 3,6V a maximális megengedett feszültség).
nedudgi és Birs Alma is ezt javasolta..
Köszi azért..
Igen ezzel tisztába vagyok csak a kikapcsolás nem stimmel számomra hogy milyen C kód kell hozzá. Már a leírásban is megtalátam de C ismeret hiányában nem tudom mi a parancs.
Azt hiszem megvan minden része.
Miért nem csinálsz neki egy projectet? MpLab 8.90 alatt fordul.
Sziasztok.
Némi segítséget szeretnék kérni. PIC-kel kell olyat csináljak, hogy a PWM jelnek egyik gomb növeli a frekvenciáját, másik pedig a kitöltési tényezőt. Adatlap szerint valamennyire sikerült összehoznom a pwm-et, de nem igazán sikerült megértenem pontosan regiszterek funkcióit. Azt jól sikerült megértenem hogy a PR2-esel tudom a frekvenciát állítani és a CCPR1L-el a kitöltési tényezőt? Eddig ennyit írtam. (Ami a tolt címke után van az jó eséllyel átkrül a timer majd megszakításába, amint rájövök melyik tartotik a pwm-hez)
Létrehoztam a projektet, de úgy sem csinált semmit. Letöltöttem az MPlab V8.92-öt, ezzel most megy. Köszi!
Sajnos nincs időm most jobban belenézni az adatlapba és a programba sem, de jól érted a PR2 és a CCPR1L részét. Annyit tennék hozzá, hogy a freki függ a pic frekijétől, tehát az alkalmazott kvarctól. Illetve nem látom a config részt a program elején.
Van a MC-nek i2c-s 8 bites meghajtója? 7-segmenses LED-et akarok meghajtani vele. Én csak NXp meg TI csipet találtam, de azokat sem tudom hol lehet beszerezni.
Vagy egyéb gyártó is megfelel ha van. A hozzászólás módosítva: Okt 14, 2014
Köszönöm de sajnos a flow nem tudja értelmezni.
|
Bejelentkezés
Hirdetés |