Fórum témák
» Több friss téma |
Szia!
Mivel char word és Dword is van a mentési értékek között, én készítenék egy struktúrát, és az egészet elmenteném eepromba. Bekapcsoláskor pedig abból visszatölteném a struktúrába. A nevével hivatkozhatnál rá. Egy komparátorral érzékelni lehetne a tápfesz eltűnését, és elmenthető az adat űjra az eepromba. (esetleg) A hozzászólás módosítva: Ápr 12, 2015
Srácok kérnék egy kis segítséget.
Bit tologatásról lenne szó. Van egy változó amiben a biteket akarom balra tolni, de a bajom az, hogy ha elkezdem tolni balra, akkor értelemszerűen nullákkal tölti fel a még ismeretlen biteket. Mutatom a példát: 0b11111110, ha ezt elkezdem balra tolni így fog kinézni: 0b11111100, ez ebben a formában nekem nem jó. Itt a jó megoldásnak amit használnék, ennek kellene lennie: 0b11111101, és minden további balra léptetésnél a belépő bitnek 1-nek kellene lennie. Ezt, hogy tudom megoldani? Előre is köszi.. Elfelejtettem, hogy ciklusban lenne így automatikusnak kellene lennie:
A hozzászólás módosítva: Ápr 13, 2015
Közben megoldottam így, de persze nem a legszebb:
A hozzászólás módosítva: Ápr 13, 2015
Ma úgy látszik ilyen napom van, nem pörög az agyam, vagy csak igen lassan.
Következő problémába botlottam: Van egy másodperc számlálom, ami char típusú és 0-tól 9-ig számol. 0,1,2,3,4,5,6,7,8 és 9, tehát rendesen előre számol. Az lenne a gondom, hogy ezt nem tudom megfordítani. Tehát megfordítva így nézne ki: 0,8,4,C,2,A,6,E,1,9 Tehát amikor 1-et mutat a másodperc a 0x08-at kellene kiküldenie, ha viszont 5 mutat akkor a 0x0A-t. Hogy tudom ezt megoldani? Így néz ki ez kódban:
Itt az mp_1-ben a másodpercek pörögnek 0-9-ig. Előre is köszi a segítséget.
Ha lehet pazarolni az erőforrást (és mivel C, ezért úgyis mindegy ), én inkább beraknám egy tömbbe (ezt így kell írni?), és a másodperc lenne a tömb index..
Egyébként kellett egy kis idő, míg leesett, hogy csak az alsó nibblét akarod tükrözni önmagában. Hiába na, este van.
Igen ez a táblás indexelés jó ötlet, de el akartam kerülni, mert a felső 4bit is majd lesz használva egy másik részéhez a programnak..
Bár ez nem lenne akadálya.. Idézet: „Bár ez nem lenne akadálya..” Nem bizony. Kimaszkolod és kész.
Igen, de most még is ezt választottam, ehhez a feladathoz most ez is teljesen jó:
A hozzászólás módosítva: Ápr 14, 2015
Köszönöm, de az i változót is használom a ciklusban másra.
A legrosszabb esetben, ha kevés lesz az erőforrás ami nem valószínű , táblába rendezem és indexelem a dolgot..
Ettol meg hasznalhatod az 'i' valtozot. Beleteheted a for-ba igy:
De mar onmagaban attol rovidebb es gyorsabb lesz a forditott kod, hogy a for ciklusban a feltetelvizsgalat nem az 'i''-t hasonlitja ossze 8-cal, hanem az oszlopot nullaval. Ebben az esetben a tablazatos megoldas nem eredmenyez jobb kodot, mert egy 8 bites PIC-en egy sima shift-elesnel es egy negalasnal a tablazatkezeles sokkkkkal bonyolultabb. A hozzászólás módosítva: Ápr 14, 2015
Van egy programom, még kb 1 éve írtam.
Mivel a C18 és később kiderült, hogy a Hi-Tech10-12-16 fordító sincs megfelelően felkészítve a lebegőpontos számok kezelésére, legalább is a printx() függvényeket tekintve, írnom kellett egy tizedes számokat is megjeleníteni képes illetve átalakítani képes rutint. Mivel nem volt jobb ötletem, úgy oldottam meg, hogy a rutin előbb szétszedi darabokra, átkonvertálja char típusra majd egy tömbbe bele teszi. A végén egy globális változóba (tömbbe) belemásolom és string-ként ki tudom íratni. Eddig nem kellett érdemben használnom, de most jó lenne, mert pont egy olyan projekten dolgozom ahol minimum 2tizedes pontossággal látnom kellene a mért adatokat. Most megnézve a programot, működik is rendesen, de baromira pocsékolja az erőforrást. Amennyiben lenne jobb és hatékonyabb, gyorsabb megoldás szívesen tanulnék belőle és használnék korszerűbb rutint ehhez. A kód így néz ki:
Előre is köszi..
A szám 100 -szorosának egész részét konvertáld át karakterláncba és a kiírásnál az utolsó két karakter előtt írj ki egy pontot.
Most így oldottam meg:
Erre gondoltál te is elvileg..
Hali!
biztos szükséges a lebegőpötty? Én kerülöm ahol csak lehet, a számot szorzom 100-al, int vagy long-ot használok amibe belefér, megcsinálom amit kell egészekkel, kijelzéskor pedig vagy saját rutin vagy a printf-el a szám/100, és a szám modulo 100 ... ha nagyobb pontosság kell akkor 100 helyett ezer....
Igen, feszültség mérést akarok, és ott bizony van törtszám..
Mármint a végeredményben amit ki kell jeleznem... Idézet: „a tablazatkezeles sokkkkkal bonyolultabb” Miért is?
Szia!
2,2/20=0,11 <-- ez float, sok számolással, nehéz aritmetikával ! Osztandó szorozva 100-al: 220/20=11, az eredményt osztjuk 100-al ( ami csak annyit jelent, hogy a tizedesvesszőt FIXEN, ELŐRE TUDVA 2 jeggyel előbb jelezzük ki ! ), ugyanúgy 0,11 és ez sokkal gyorsabb, egyszerűbb műveleteteket eredményez ! Remélem sikerült rávilágítanom a helyes útra ?!
Mert a 8 bites PIC utasitaskeszlete enyhen szolva szegenyes. Emlekeim szerint a retlw az egyetlen lehetoseg a flash-bol adat felolvasasara, azokbol meg csak ugy lehet tablat csinalni, ha 256 szohataron vannak. Ez kulon macera. Vagy ez mar nem igy van? De, ha van mas megoldas a flash olvasasra, akkor az biztos komplikaltabb, mint egy shift es egy negalas utasitas. De az is lehet, hogy tevedek, volt mar ilyen.
Ez igaz a 16F-es PIC-ekre, ott tényleg elég szegényes az utasításkészlet, bár ezesetben szerintem még a RETLW is használható lenne, esetleg annyit lehet kifogásolni, hogy a verem is használva lesz, a PC miatt..
Nade nem úgy a 18F-nél. Be lettek vezetve a táblakezelő utasítások, amivel elég hatékonyan lehet olvasni, és írni a programmemóriát. Ráadásul elég gyors, mert 2 ciklusidő alatt kiolvas bárhonnan, a 21 bites címről. Ráadásul lehet pre és és postinkrementálást-dekrementálást végezni a mutatóval, amihez nem kell külön utasítás. Szóval rendkívül hasznos dolog.
Hali!
Milyen feszültségmérő az aminek float a kimenete? Egész szám lesz az, csak a konvertálásod után lehetne float, de azt meg minek, konvertáld úgy hogy az eredmény*100 legyen vagy még inkább számolj milivoltban, jelezz ki xxx/1000 pötty xxx%1000 Lásd Kissi válaszát is A hozzászólás módosítva: Ápr 15, 2015
Akkor mea culpa. Nem tudtam, hogy a 18-as sorozatnak vannak ezek az utasitasai.
Az advanced midrange -ben új lehetőség van a táblázat kezelésére:
- retlw -s táblázatokhoz brw (relatív ugrás WREG tartalma alapján), - ha az FSRxH regiszter legfelső bitje 1, akkor az indirekt műveletek a program memóriát érik el. A hozzászólás módosítva: Ápr 16, 2015
Ezek a 12F1xxx PIC-ek (?).
Közben megnéztem, valóban, ez gyakorlatilag hellyettesíti a 18F-es táblaolvasó utasítást, jónak tűnik.
Linux, MPLAB-X, XC8, free licence.
Sehogy nem sikerül cpp-t használnom. Én vagyok a béna, vagy ez nem megy az XC8-ban?
Tudomásom szerint az XC8 csak C, nem pedig C++. Egyedül a PIC32 kapcsán emlegetnek C++ fordítót (XC32++).
Köszönöm a választ!
Kezdtem én is sejteni. Csak akkor igazán csinálhattak volna a fordítótól függően megjelenő menüpontokat. Mert a menüpontok megengedik, hogy cpp-t hozzak létre, igaz, egyből hiányol is dolgokat. |
Bejelentkezés
Hirdetés |