Fórum témák
» Több friss téma |
Fórum » PIC programozás
A const módosítót tipust a CCS a programmemóriában történő tárolás jelzéséhez használja, ezért nem működik a sima char pointerrel, mert az az adatmemóriára célzódik.
Amúgy mutass egy kódot, hogy mit akarsz csinálni, mert ebből nem egyértelmű (számomra), hogy mit is szeretnél. Ha pointer kell a tömb kezdő elemére, akkor írd oda a tömb nevét, az maga egy pointer. Arra másik pointert létrehozni nem látom értelmét.
Azért kellene a másik mutató hogy azt egy for ciklusban egyesével növelgetve végig tudjak lépkedni a tömb elemein.
Ahhoz minek a mutató? Tömb indexe nem jó?
itt a kód:
[/code] const BYTE glcd_chars[]={//sok bit}; void glcd_printChars(int8 address,char *sptr) { int1 i; int8 j,k; BYTE *pTemp; i=1; pTemp=glcd_chars; if(address>122) return; if(address<64) glcd_setAddress(GLCD_LEFT,address); else glcd_setAddress(GLCD_RIGHT,address-64); for(j=0;*sptr!=0x00;j++) { pTemp=((*sptr-48)*5)+pTemp; for(k=0;k<1;k++) { if((i+address)<64) { glcd_writeByte(GLCD_LEFT,*pTemp++); } else { if(i)glcd_setAddress(GLCD_RIGHT,--i); glcd_writeByte(GLCD_RIGHT,*pTemp++); } } sptr++; } }>>
A tömb indexe csak 255 lehet max és ennél több elem van benne.
Ez a sor biztosan jó?
A jobboldali pTemp helyett nem glcd_chars kellene, hogy álljon? Mert így minden egyes lefutáskor a pTemp előző értékét is hozzáadod a következőhöz, ami szerintem nem azt eredményezi, amire számítasz (mellesleg nem ártana kommentezni is a kódot). Ha erre válaszolsz, akkor majd leírom, hogy én hogyan gondoltam megoldani, de ettől függ a megoldásom.
De igen igazad van! De ettül függetlenül ha minden egyéb sort kiveszek és csak simán a pTemp-et iratom ki a glcd_writeByte-al akkor nem a tömb első sorát írja ki a kijelzőre. Amugy köszönöm a segítséget!!
Szerintem így kellene:
Az a k-s for ciklus nem ötször kellene, hogy lefusson? Mert így nem sok értelme van a ciklusnak, ha csak egyszer fut le. Meg az i változó szerepét sem értem (eleve nem kap kezdőértéket). A tömb indexe amúgy annyi, amennyit megadsz neki indexeléskor. Ha olyan változót használsz indexelésre, aminek nem lehet 255-től nagyobb az értéke (egy bájt), akkor persze max. 255 az index. De kétbájtos változóval már 65535 is lehet az index.
Hello de a k valóban 5 csak a debugolás miatt irtam átt 1-re. Ez a 16 bittes dolog biztossan működik egy 8 bites processzoron mert én eddig ahányszór próbálkoztam vele mindíg 8 bites lett az eredmény. Az i kap értéket 1-et még a legelején az értelme az hogy a kijelző jobb oldalán az első byte kiírása előtt 0-rá állítja a kezdő oszlopot. és ezért csak egyszer kell lefutnia.
Nem a kontroller miatt lett neked 8 bites az eredmény, hanem a C olyan, hogy 8 bites operandusok esetén 8 bites eredményt állít elő, függetlenül attól, hogy az eredmény esetleg több mint 8 biten férne el (ezesetben a felső biteket eldobja). Legalább egy fontos operandust castolni kell 16 bitesre, akkor 16 bites eredményt fog generálni. Ezért van ott az, hogy (int16)48, mert így kényszerítve van, hogy a 48-at 16 bites számként kezelje, és akkor már sptr[j]-48 is 16 bites, majd ezt öttel szorozva megint 16 bites, és k-t hozzáadva is szintén 16 bites az eredmény, és ezzel a 16 bittel indexeli a glcd_chars tömböt. Legalábbis így szokott lenni, nem próbáltam ki a kódot, remélem, hogy a CCS is így csinálja. De az biztos, hogy ebbe az irányba kell elindulni...
Köszönöm!! így valóban 16 bites érték lesz. Nagy tanulság ez nekem. Köszönöm mégegyszer így már működik úgy ahogy illik.
Idézet: „Ezért van ott az, hogy (int16)48, mert így kényszerítve van, hogy a 48-at 16 bites számként kezelje” ...ami egyebkent szebb lenne ha igy lenne castolva:
persze ettol a lenyegi resze nem valtozik.
A L az már long, nem? Az U lenne az unsigned, ha jól emlékszem. Amúgy azért nem mertem azt írni, mert a CCS-ben a sima int tipus 8 bites, aztán ha véletlen a 48U is 8 bites lesz, akkor épp hülyeséget mondtam volna. Az L meg bántotta a szépérzékemet, mert ágyúval verébre kategóriának tartottam ide.
Sziasztok!
Segítséget kérnék. Adjatok tanácsot. Meglévő programon szeretnék változtatni.Milyen progit ajánlatok a hex nézegetésére és turkálására,illetve valami linket kérnék gyorstalpalónak,hogy a program "káoszán" eligazodjak,hogy tudjam hova nyúljak bele. Amúgy PIC 16F84A-ra írt progiról van szó. Előre is köszi Üdv. Peti
Szia!
Visszafejteni az MPLAB is jó ( disassembly! ), de a kapott "anyag" azért nem olyan könnyen emészthető ( főleg, ha nincs gyakorlatod!) ! A hardver és a szoftver ezeknél az eszközöknél szorosan összefüggő dolgok, ezért csak mindkét területen megfelelő ismeretek birtokában lehet egyáltalán esélyed arra, hogy belenyúlj ( nem beszélve arról, ha szándékosan nehezítették: indirekt címzés, ide-oda ugrálás, külső eszköz által eleve figyelmen kívül hagyott utasítások, stb.) ! Erről egyébként emlékeim szerint volt már itt szó, ha jól tudom trudnai kolléga oldalán van ( volt?) fent egy disassembláló progi! Jó munkát! Steve
Én meg Oshon szimulátort ajánlanám de tényleg nem lesz könnyű.
Szia!
Nézd meg az itt található pic disassembler-t.. Módszerek: -Ha csak néhány utasítás hiányzik valahonnan (pl. inicializálásból a 16F84 -> 16F628 áttérésnél : A resetnél levő ugrás kicserélése a szabad memória területe történő ugrással, ott a hiányzó utasítások (komparátor kikapcsolás) lefuttatása, a végén az eredeti reset címre ugrás). Ez máshol is jól használható... - Utasítások beszúrása (eeprom regiszterek bankjának módosítása): Egy utasítás helyére call, a szabad memória területen a felhasznált utasítás és a többi, ami kell és egy return. - Változó helyfoglalás módosítása: A fenti utalásban szereplő disassemblerrel visszafordítani, a változó definíciók (LRAM00..) helyettesítése egy cblock -kal, és újrafordítás. Szerencséd van a 16F84 nagyon kicsi memóriákkal rendelkezik, az újabb típusokba könnyen áttehető a program... Szia
Sziasztok!
Szeretném megtanulni a PIC-ek programozását és ehhez szeretnék segítséget kérni. Pic-ben teljesen kezdő vagyok. A legnagyobb gondom hogy honnan tudnék megtanulni programozni mert ugyan híradásipari iskolába jártam programozni nem volt lehetőségem megtanulni. Égető áramkört építettem csak a programozással vagyok gondban. A segítséget előre is köszönöm: Gábor U.i: az is nagy segítség lenne ha ajánlanátok valamilyen írásos forrást ahonnan tudok tanulni.
Ha meg egyaltalan nem programoztal semmit, akkor inkabb a BASIC-kel kezdd PC-n, az ad nemi sikerelmenyt es magat a programozasi gondolkodast elsajatithatod.
Igazabol a programozas lenyege a feladat helyes megfogalmazasa, a nyelv csak masodlagos. A tobbi nyelv is linearis, csak masok lesznek az utasitasok, de az elv ugyanaz. Szerintem.
Sziasztok!
Köszönöm a sok segítséget a programkód visszaolvasásával kapcsiba,le is szedtem egy csomó progit,de ez a programozás nekem kínai. Úgyhogy a segítségeteket kérném a nyűgöm megoldásában. Az alább közölt kapcsirajzba és a hex-ekbe engedélyt kértem a szerzőtől,tehát nyugodtan garázdálkodhattok benne. Arról lenne szó hogy úgy van megírva a progi hogy bekapcsoláskor,ha azonnal nem kap jelet akkor hibakódot ír ki,amit csak reseteléssel lehet eltüntetni. Ezt kellene a programból kiszedni. Tehát bekapcsoláskor jelenjen meg a ford. kiírása (ha nincs jel,akkor 0). A másik verzió pedig az lenne,hogy a 2x20-as kijelző helyett 4 tagos 7 szegmenses kijelzőn legyen a kiírás. A motorvezérlő része nem kell. Segítségeteket előre is köszönöm. Üdv. Peti
Szia!
ha nem kell a motorvezérkő része, akkor marad a 4 tagos fordulatszám kijelző, ehhez pedig nem célszerű a PIC van erre digitális IC és olcsóbb, egyszerűbb.
Szia!
Már régóta keresek jól,stabilan működő fordszám mérőt. Ez ebbe a verzióba nagyon jól működik,csak a kijelzést kellene módosítani. Nem tudom,amit te javasoltál ott megoldható-e a jó jelfeldolgozás.
Ez miért nem jó? Ha módosítani akarod, akkor a forráskódot egyszerűbb, mint egy visszafordított hex-et silabizálni.
Szia!
Ezzel még nem találkoztam,de kipróbálom és meglátjuk. Köszi a linket.
Szia!
Valaki már megépítette az előző hozzászólás linkjénél lévő kapcsolást? A proginál valami nem kerek. A kijelzőn csak kockák láthatóak. A programozást pickit 2-vel csináltam és közbe nem nyafogott. Ugyhogy szerintem azt nem rontottam el. Mi lehet a bibi?
Van egy szörnyű gyanúm, hogy a PIC 13-as lábát össze kellene kötni az LCD 14-es lábával (ha az a D7-es láb).
Összekötve. De az eredmény ugyanaz.
Egyéb ötlet? |
Bejelentkezés
Hirdetés |