Fórum témák
» Több friss téma |
Az elv már megvan, már csak a kivitelezés van hátra. Azt találtam ki, hogy a számból kivonok 10-et és megnézem, hogy az eredmény pozitív-e. Ha igen akkor újból levonok 10-et. Ha már az eredmény negatív akkor hozzáadok 10-et. Ha megszámolom hányszor vontam le, akkor megvan a tízesek száma és a maradék is.
Hát szinte biztos, hogy nem a legelegánsabb megoldás, de a szimulátor szerint működik:
Az osztás nem kevesebb lépésből van meg?
89%10 Maradék az egyesek. 89/10 Eredmény a tízesek. A hozzászólás módosítva: Jún 5, 2016
Hát... nem. C-ben biztos hogy rövidebbnek tűnik, de nem az. Egyébként meg erre való a szimulátor, hogy kipróbáljuk.
Ezért írtam, hogy assembly. C-ben csak ennyit írsz és a fordító megoldja helyetted, de ha megnézed mire fordult le, szinte biztos vagyok benne, hogy sokkal hosszabb mint amit én írtam.
Egyébként csak a két egymás utáni C bit ellenőrzés piszkálja a csőrőm, de egyenlőre nem tudtam jobbat.
Értem.
Pali79: Fura ez a C. Nem néztem amúgy mit fordít le, de gondoltam megkérdezem Lassan rászánom magam, hogy letöltsem az új MPLAB-ot (X-et), kíváncsi leszek, hogy az mennyire sok sallangot fordít majd bele a projektekbe. Más: Ha már itt tartunk. MPLAB X-nél is külön kell letölteni a fordítókat? Tehát 10-12-16-os PIC-eknél XC8, 18-as családnál XC18 és 32-es családnál XC32? Vagy itt egyben vannak a fordítók? A rég megírt programok amelyeket Hi-Tech és C18-ban írtam kompatibilisek lesznek az új X fordítókkal? Mik a tapasztalatok?
PIC24FJ256GB106 leírását tanulmányozom ... angol tudás hiányában kicsit elkeveredtem ...
Valaki segítene, hogy az alábbi lábak mire is valók: VBUS VUSB VDDCORE/VCAP
VBUS - USB feszültség host módban (5V)
VBUSON - USB OTG módban külső törltéspumpa vezérlése VBUSSST - USB OTG mód belső töltéspumpa visszacsatolás VUSB - az USB irnterfész (vagy SIE) tápfeszültsége (3,3V) VDDCORE/VCAP - ha a mag tápfeszültség (2,5 V?) belső LDO-val történik, akkor ide egy pufferkondenzátort kell kötni (a földre megy a másik láb). Ha pedig letiltjuk a belső LDO-t, akkor itt kell bevinni a mag számára a tápfeszültséget. Magyarázat: az USB illesztő jelszintje 3,3 V (max. 3,6 V lehet a D+, D- vonalakon). Host módban (OTG vagy állandó host) azonban 5 V-ot is ki kell adni a csatlakozó eszköznek. Ez némi bonyodalommal jár... A hozzászólás módosítva: Jún 6, 2016
Idézet: „Egyébként csak a két egymás utáni C bit ellenőrzés piszkálja a csőrőm, de egyenlőre nem tudtam jobbat.” Én hozzáadok tízet ( visszaadom !), mikor már nem tudta kivonni ![]()
A piclist -et linkeltem be többször, de két helyiérték esetén nem érdemes áttérni.
Az MPLAB X csak a keretrendszer az ASM fordítóval, ahhoz is kell külön telepíteni a C fordító(ka)t. Simán használhatod benne a régi C18, C30, C32, hitech C stb. fordítókat is. Az XC sorozatból a szám a bitszámot jelenti, tehát az XC8 lefedi az összes 8 bites családot (PIC10, 12, 16, 18), az XC16 a 16biteseket, az XC32 meg a 32biteseket. Ez értelmesebb elnevezés szerintem mint a régi sorozatnál. Az XC-t még nem próbáltam a régi MPLAB-ban, de nem zárom ki, hogy az is használható.
A sallang: amit fordít, az attól függ, milyen verziót használsz. A free sajnos az optimalizálás kihagyásán felül még büntetésből további sallangokat is tesz bele, a pro verzió bekapcsolt optimalizációval azért egész használható, ha tudod mit milyen módon írj meg. Remélem előbb-utóbb az MC észbe fog kapni a fordítói árképzésében ha még jobban elterjed az ARM család az ingyenes C/C++ fordítóival (az ATMELT, amihez 8 bites kategóriában is jól használható ingyenes C fordító van mondjuk jól felvásárolta).
Természetesen PRO módban használnám az új fordítókat is.
Kaptam egy jó ajánlatot, így lehet áttérek rá. Csak ne legyen rosszabb mint az előzők.
VBUSA PIC állítja elő az 5V-os feszültséget? Mekkora a terhelhetősége?
VUSB Az USB rész blokkvázlata alapján van a PIC-ben egy "USB 3,3V regulator". Ez a VUSB lábra adott tápfeszből (3,3V) csinál 3,3V-ot, vagy a VBUS lábra adott 5V-bol csinál 3,3V-ot és azt adja ki a VUSB lábon? Vagy mi célt szolgál az a regulator?
A VBUS feszültséget nem (egy)maga a PIC állítja elő, hanem külső tápot vagy kapcsolóelemeket vezérel (PWM jellel).
A PIC-en a VBUS láb az bemenet, tehát csak detektálásra, összehasonlításra van. Nézd meg az adatlap 210. oldalán a 18-6 és 18-7 ábrákat! A hozzászólás módosítva: Jún 6, 2016
A VUSB láb a belső 3.3V LDO kivezetése a configban általában van egy ENVREG bit (vagy ilyesmi), ami engedélyezi a belső LDO-t vagy kikapcsolja, ha engedélyezve van általában egy 10μ tantál megy rá, ha ki van kapcsolva akkor külső 3.3V, ha 5V-ot kötsz rá több mint valószínű, hogy a SIE-t kinyírja és lehet a Host-al sem tesz jót.
A VBUS-t én mindig 5V-ra kötöttem nem néztem sose, hogy mit csinál a PIC, ha nincs rákötve feszültség.
Üdv.
PIC18F46K22 PWM kimenőjelet szeretnék TMR2, és pld. CCP4, de ez mindegy melyik. Nem találom, hogy hol lehet beállítani melyik portra menjen a jel, portc, vagy portd valamelyik lenne jó. Annyit találtam, hogy CCPTMRS1 regiszterben tudom a TMR2-höz hozzárendelni a CCP4-et. Nem találok CCPxCON regisztert, gondolom más van helyette. A program basic, de közvetlen regiszterek írásával működtetném. Köszönöm.
Ha megnézed én is pont ezt csinálom, de csak azért nem tudtam kiküszöbölni a C bit vizsgálatát, hogy csak akkor növeljem a tízesek számát ha valóban kell is. Ha a máshova teszem a növelést akkor nem jól számol.
Már csak az lenne a kérdés, a kimenetet hogy tudom kiválasztani, melyik lábon legyen a PWM.
Ott nincs, ha jól értelmezem. Érdekes, hogy az adatlapon van PWMxCON, 1,2,3-hoz, de semmi részletesebb ezekről a regiszterekről nincs. Más PIC típusnál leírtak szerint nincs a config reg.-ben portválasztás. Belebújok jobban az adatlapba.
Találtam mintapéldákat, ott sincs portválasztás. Köszi. A hozzászólás módosítva: Jún 6, 2016
Nem lehet állítani, hogy melyikre menjen, fix helye van. Adatlap 9. oldal.
Akkor nem csoda, hogy nem találtam.
Köszi.
Egy kicsit korán örültem. Tök jó ez a rutin, ha nem pont 10 az a szám amit szét kellene bontani. Vagyis még ezzel sincs baj, ha csak egyszer fut le a rutin amíg a szám 10. Ha többször akkor már nem jó, mert folyamatosan növeli a tízesek értékét.
Valóban, de én így gondoltam:
A hozzászólás módosítva: Jún 6, 2016
A lényege ugyan az és a problémája is: ha a "szam" változó értéke 10 és többször is lefut a rutin amíg az értéke nem változik, a "tizesek" értéke folyamatosan növekszik.
Az nem lehet, mert carry csak addig van, amíg nem negatív az eredmény ( figyeltél rá, hogy btfss-et írtam ?! ) !
ehelyett használhatod a rövidítés érdekében:
A hozzászólás módosítva: Jún 6, 2016
Ha 10-ből kivonok 10-et az még nem negatív. Ez itt a gond.
És az miért baj? 10-ben meg is van a 10
![]() ![]() szerk.: előtte a tizesek-et nullázod ?! A hozzászólás módosítva: Jún 6, 2016
Már megfejtettem: a gond az volt, hogy az "egyesek" és "tizesek" változók az aktuális értékeket tartalmazták mikor beléptek a rutinba. Ha ilyenkor a "szam" értéke még mindig 10 akkor a "tizesek" értéke növekedik 1-el. Ha újra a rutinra megyünk és az "szam" értéke még mindig 10 és a "tizesek" értéke még mindig 1 akkor mire a rutin végére érünk a "tizesek" értéke már 2 lesz. És ez így tovább.
Tehát a rutin legelején törölni kell a regisztereket és biztosítani kell, hogy az ugrással nem a legelejére menjen. Idézet: „szerk.: előtte a tizesek-et nullázod ?!” ![]() Jár így az ember ![]() A hozzászólás módosítva: Jún 6, 2016
|
Bejelentkezés
Hirdetés |