Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   24 / 118
(#) potyo válasza gulasoft hozzászólására (») Júl 14, 2009 /
 
Inkább úgy mondd, hogy PC szerűbb...
(#) messer hozzászólása Júl 14, 2009 /
 
Kérdésem az volna, hogy mikor meghívok egy delay_ms(1000); késleltetést, hogyan reseteljem a wdt-t?
(#) potyo válasza messer hozzászólására (») Júl 14, 2009 /
 
Ne használj ekkora késleltetést!
(#) messer válasza potyo hozzászólására (») Júl 14, 2009 /
 
Értem, tehát a mindenkori wdt osztó által beállított késleltetésnél nem használhatok nagyobb időzítést Kár hogy nem tesz a fordító néha clrwdt-t a sorok közé.
(#) potyo válasza messer hozzászólására (») Júl 14, 2009 /
 
Ez nem időzítés, hanem késleltetés, különböztessük meg a kettőt!

Egyébként sem szép dolog ilyen mértékű késleltetést használni, de ha már nagyon ekkorát akarsz, meg közben wdt is kell, akkor konfigurálj be egy timert, hogy 1s után csorduljon túl, és futtass egy akármilyen ciklust, amig nem csordul túl a timer, illetve törölgesd a wdt-t a ciklusban.
(#) messer válasza potyo hozzászólására (») Júl 14, 2009 /
 
Kell ekkora mert a led így villog. Miért nem illik nagy késleltetést használni? Sokat agyaltam már azon, hogy igazán jól használni a wdt-t nagyon nehéz sőt....
(#) potyo válasza messer hozzászólására (») Júl 14, 2009 /
 
Gondoltam, hogy ledhez kell...

Azért nem illik, mert feleslegesen foglalja a kontroller idejét. Amíg ez a delay fut, addig nem csinál semmit (hacsak nem jön be valami megszakítás). A másik, hogy így sosem lehet pontosan 1Hz-es villogást produkálni, ha közben megszakítás is van, hanem csak úgy körülbelül 1Hz-et fogsz kapni. Arra meg egy NE555 is jó, nem kell hozzá PIC...

A WDT-t egyáltalán nem nehéz használni, hanem arról nehéz leszokni, hogy ilyen delay() cuccokat használj. Én már csináltam pár programot, de delay-t még sosem használtam. Ha erról leszoksz, akkor már a WDT nem lesz probléma...

Ja, ezért se komálom a CCS-t, mert a hozzáadott demókban ilyen delay-eket használnak, ami kezdetben biztosan egyszerű, csak ekkora késleltetéseknél zsákutca lesz, amikor a ledvillogtatásnál bonyolultabb dolgot kellene csinálni...
(#) MPi-c válasza messer hozzászólására (») Júl 15, 2009 / 1
 
Idézet:
„Kérdésem az volna, hogy mikor meghívok egy delay_ms(1000); késleltetést, hogyan reseteljem a wdt-t?”


Pl.:
#use delay(clock=4000000, restart_wdt)

De, vedd elő CCS Reference Manual-t!
(#) messer válasza potyo hozzászólására (») Júl 15, 2009 /
 
Biztos igazad van, de miért használjak 555-öst mikor kétszer ennyibe kerül mint egy pici pic mellette a pic még logikai feltételeket is csinál.Ha nincs közben más feladat úgy gondolom, hogy nyugodtan használhatok ilyen delay-eket (minek bonyolítsam az életem ha nem muszáj ??
(#) messer válasza MPi-c hozzászólására (») Júl 15, 2009 /
 
Ez volta kérdés köszönöm MPi.

(#) gulasoft hozzászólása Júl 15, 2009 /
 
A ccs-nek legalább tisztességes helpje van, most kipróbáltam a Mplab C18-át egy istennek nem találom hogyan lehet hivatkozni a PORTA-ra, még jó hogy megvettem a Kónya féle könyv 3. kiadását, de az hogy nincs rendes helpje egyébként egy vicc.
(#) gulasoft hozzászólása Júl 15, 2009 /
 
ÁÁÁ egy kalap izé ez az mplab help! Eleve pdf-ekben van, próbáljátok ki, írjátok be a helpbe hogy port, hozza a supportokat is, és ha megnézitek az indexet porta van sima port nuku. Nosza megkerestem az indexben a trist, pofára esés nincs tris az indexben. Azért ez nagyon gáz!
(#) Hacsi válasza potyo hozzászólására (») Júl 15, 2009 /
 
A fenti timeres túlcsordulós időzítés esethez kérném tanácsod.
Hogy csinálak 45 db különböző időzítést eltérő feladatokhoz egy 18F452-ben? Van köztük 10 ms-os és 30 perces is. Létezik erre megoldás ?
(#) gulasoft hozzászólása Júl 15, 2009 /
 
Minél tovább nézem ez annál gázosabb.
Van egy user manual chm, hát azt ne tudjátok meg mekkora nulla!
Beírtam a témakörökbe, hogy keressen porta-t kihozta a header file-oknál, és ott írta hogy a portabits-el lehet állítani a biteket egyesével.
Nosza beírtam a témakörökbe hogy portabits visszahozta azt az oldalt ahol a porta-nal adott egy pici utalást hogy van ilyen is.
Azért a ccs helpje meg e között ég és föld a különbség!
(#) kisszee válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Hello,

a Help menü Topics feliratára kattintva találsz olyat, hogy MPLAB C18 users guide, ott megkeresed "processor-specific header files" -t, azon belül gyönyörűen el van magyarázva pont PORTA segítségével, hogy hogyan tudod használni az IO -kat, a topicok között pedig van még egyéb nyalánkság is, példáu a Libraries, ami segít használni a beépített könyvtári függvényeket (példákkal illusztrálva). Egy header filet megnyitva, vagy pedig belenézegetve a Getting Started vagy Users Guide helpekbe meg lehet találni azt a TRIS regisztert is. Kétlem, hogy, ha valaki tudja használni a PORTA -t, akkor a PORTB -t ne tudná, úgyis kénytelen lesz megnyitni az adatlapot plusz a header filet, hogy tudja milyen szimbólumok felhasználásával lehet elérni az egyes funkciókat...
(#) potyo válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Idézet:
„most kipróbáltam a Mplab C18-át egy istennek nem találom hogyan lehet hivatkozni a PORTA-ra”


PORTA=valami, valami=PORTA, PORTAbits.RA0=1 esetleg if (PORTAbits.RA1) {}? Csak egy demóprogramot kell megnézni, és már világos is minden...
(#) potyo válasza Hacsi hozzászólására (») Júl 15, 2009 /
 
Annyit mondanék, hogy biztosan meg lehet csinálni delay nélkül is, de a feladat ismerete nélkül ettől többet nem tudok mondani...
(#) gulasoft válasza Hacsi hozzászólására (») Júl 15, 2009 /
 
Az alábbi megoldás nem jó?
Csinálsz egy 10ms-eset és 45db számlálót növelsz 10ms-enként. A timer interrupt 10ms-enként meghívódik növeli a 45 számlálódat és programban figyeled a számlálót is, ha elérte a 30 percet, akkor azt csinálod amit ott kell, ha van egy 10 percesed, akkor azt csinálod amit 10 percnél kell.... és persze ott 0-ázod a számlálót is.
Vagy egyet növelsz, és mikor interrupt van, akkor osztod ezt a növeltet az időzítéseddel, ha egésszámmal osztható akkor megvan, persze valahol túl fog csordulni, úgyhogy lehet percesekre másik váltózót kéne növelgetni és ritkábban.
pl. egy mp az 1000ms tehát 10ms-enként egyet nőve az 100 interrupt után lesz 100, ha ezt a változót elosztod 100-al, akkor csak 100-nál, 200-nál, 300-nál .... lenne 100-al egésszámszor osztható. Persze 45 ilyen osztásba belegebed a processzor a 45 változó is lehet megfekszi a hasát mire mindet megnöveli, de az még mindíg rövidebb idő mint a 45 osztás.
(#) icserny válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Idézet:
„nem találom hogyan lehet hivatkozni a PORTA-ra”

Eleve rossz helyen keresed. Nem a C fordító, hanem processzor specifikus header fáljok mondják meg, hogy kit minek hívnak. A fodító erről csak akkor vesz tudomást amikor becsatolod a header fájlt.
(#) gulasoft válasza potyo hozzászólására (») Júl 15, 2009 /
 
De basszus nem demóprogramot akarok nézegetni, hanem a helpet szeretném használni, csak míg a ccs-nek rendes helpje van addig ennek a mplab c18-nak egy hulladék! És ez egy egyszerű példa. Hol van az mplab helb-ben leírva pl. hogy a trisb=0 az a B portot outputnak definiálja? Ezek alapvető infók hogy fogom megtalálni ha valami bonyeszosabb kell? Átnézek 1000 demó programot hátha valahol bekkomentezték az adott rész mire való?
Azért a mikrochip adhatott volna rendes leírást a C-jéhez, bezzeg minden chiphez hozzávágják az assebbly instrukciókat 200 oldalas leírással. Értem én hogy az assembly az alap, de ha csinálnak egy c fordítót olyan nagy megerőltetés lett volna egy tisztességes helpet csinálni hozzá? Mindegy majd olvasom a könyvet, csak zavaró baromira.
(#) potyo válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Idézet:
„Hol van az mplab helb-ben leírva pl. hogy a trisb=0 az a B portot outputnak definiálja?”


Miért kellene ennek egyáltalán a help-ben lennie? Ja, hogy azért, mert a CCS használóknak nem szokásuk az adatlapot kinyitni? Annak, hogy a PORTB-be nullát írva az kimenetté válik, annak a helye az adatlapban van, nem máshol! Most őszintén, sorolják fel a fordító helpjében az összes kontrollerüknél az összes regisztert, hogy annak melyik bitje mire való? Ugye te sem gondolod komolyan...
(#) gulasoft válasza icserny hozzászólására (») Júl 15, 2009 /
 
Olvastad Te a manualt? A processzor specifikus header file két oldal, slussz passz!
A többit nézegesd a header file-okban. Szerinted ilyen a tisztességes help? 6 helyről kell összevadászni az infót? Nézd meg a ccs helpjét! Ott nincs ilyen hogy nézegesd a header fileokat. Le van írva mi mire való.
(#) kisszee válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Idézet:
„Le van írva mi mire való.”


Ezt csak azért nem hiszem el, mert sacc per kb. 10 000 féle PIC létezik, akkora help nincs a világon, ami összefogja mindegyiket.

De még áll a kérdésem, ha tudod használni a PORTA -t, sőt már rájöttél, hogy a bitjeire külön hogy lehet hivatkozni, akkor ezt miért kell még ezt tovább ragozni?
(#) gulasoft válasza potyo hozzászólására (») Júl 15, 2009 /
 
Szerintem meg nem.
Ha ez általános hogy egy adott portra 0-át írva output lesz, akkor annak ott kell lenni a C leírásban.
Az mplab C18 nem egy általános fordító, amivel lehet pc-re meg linuxra meg minden szirszarra fordítani! Az mplab C18 fordító az mplab 18-as szériához készült, nem a 16 biteshez, és nem a 32 biteshez, hanem a 8bites 18-as sorozathoz. Ha egy ilyen speciális fordítót csinálnak akkor helpben az általános regiszterek és portok leírásának benne kéne lenni. Szerinted a ccs-ben miért van benne?
Azért hogy ne kelljen 6 direktory-ból összevadászni az infókat. Persze biztos vannak olyan speckó 18-as chipek amiben vannak speciális regiszterek, és akkor lehet nézegetni a header file-okat, de C azért terjedt el mert könnyen portolható. Hát ez nagyon nem igaz a microchip esetén. Ha lett volna egy kis eszük, akkor adtak volna egy szabványt a C-hez, de szerintem későn kapcsoltak, igy ahányan c fordítót írtak annyi megvalósítás született a portok, regiszterek és fordítási opciók elérésére.
Annyira nem konzekvens, hogy míg a C30-ban _options-al, addíg a C18-ban pragmával kell megadni a konfigurációs biteket, nem beszélve a ccs fuses-ről. Legalább cégen belül tarthattak volna valami szabványt.
(#) gulasoft hozzászólása Júl 15, 2009 /
 
Itt a hivatalos microchip hozzáállás:
* MPLAB C18 C Compiler Getting Started (PDF)
* PIC18 Configuration Settings Help (hlpPIC18ConfigSet.chm)
* COFF File Format Help (hlpCOFFfile.chm)
* MPLAB C18 C Compiler User's Guide Help (hlpC18ug.chm)
* MPLAB C18 C Compiler Libraries (hlpC18Lib.chm)
* Hardware Peripheral Library Function Documention found under the \doc\periph_lib directory.

Csak ez 6 file amiből össze kell szedni az infót + a könyvtárakban nézegesd a header file-okat. Köszi nagyon összeszedett infó
(#) potyo válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
A fordítóhoz tartozó help-be nem másolhatja be a negyed adatlapot. Ráadásul vannak eltérések az egyes chipeknél a regiszterek között, akkor azt mind külön másolja be oda (pl. EEPROM-kezelő regisztereket tekintve van háromféle eset)? Érdekes, az említett dokumentumok közül nekem eddig csak egyre volt szükségem rendszeresen a fordítóval kapcsolatban, abból is csak addig, amíg kiírtam, hogy az adott chipnél milyen config bitek vannak. Azonkívül elég az adatlap (szerintem ezzel így vagyunk elég sokan, akik C18-at használunk)...

A C30 és C32 GCC alapú, míg a C18 nem. Ennyit arról, hogy miért különböznek (amúgy meg szerintem 8 bites int után a CCS se nagyon ugrálhat a következetesség mellett)...

A C nem azért terjedt el, mert könnyen portolható, hanem azért, mert asm szintű szabadságot nyújt (tehát nem csinál maga semmit, nem akar okoskodni, hanem azt csinálja csak, amire az ember kiadja a parancsot, még ha az hülyeség is), ugyanakkor gyorsabb fejlesztést tesz lehetővé. A portolhatóság a magasabb szintű nyelvek sajátja, a C (főleg a kontrolleres C) pedig nem magas szintű nyelv. Ezenkívül a kontrolleren gyakran szűkös időzítéseket kell betartani, így arra a céleszközre kell az egészet kihegyezni, és ezzel gyakran a portolhatóság meg is bukott...
(#) icserny válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Idézet:
„Ha ez általános hogy egy adott portra 0-át írva output lesz, akkor annak ott kell lenni a C leírásban.”

Miért kellene? Ennek semmi köze a C-hez! Ennek a mikrovezérlő adatlapjába van a helye, meg a Family Reference Manualban.

Próbáld megérteni, hogy a C fordító számára a regiszterek csupán kötött című változók. Nem tartozik rá, hogy melyik adatbitre mit csinál a mikrovezérlő. Mint ahogy az sem, hogy melyik konfig bitnek mi a szerepe.
(#) gulasoft hozzászólása Júl 15, 2009 /
 
Valaki magyarázza ezt meg nekem legyen olyan kedves:
A szimulátorban látszik, hogy csak a D port 4. bitjét rakta 1-be, a watch-ban látszik a trisd és a portd is, ott a kódban egy direkt értékadás. A PORTDbits-ek azért vannak kicsillagozva, mert már a hajam téptem miért nem tette a 2. bitet egybe.
Ott áll a futás a függvény végén, a PORTD mégis csak 0x10

És a másik kép ugyan ez a megoldás ccs-el, és az meg tökéletes.
Biztos én vagyok a tökéletlen csak nem tudom hol.
(#) potyo válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Le kéne tiltani a komparátort a lábakon, mielőtt digitális célra akarod használni. Adatlap->IO Ports->PortD->Example 9-4
(#) gulasoft válasza gulasoft hozzászólására (») Júl 15, 2009 /
 
Ja c18 ezt fordította ha a dissassebler listát nézem:
0010 0E12 MOVLW 0x12
0012 6E83 MOVWF 0xf83, ACCESS

és miután kijavítottam a ccs-ben az értékadás végéről hiányzó 0-át ezt fordította a ccs:

000E 0E12 MOVLW 0x12
0010 6E8C MOVWF 0xf8c, ACCESS

berakja 0x12-őt a work-be és onnan teszi valahova ami mind a 2-nél máshol van, kérdés hogy a ccs miért tudja megcsinálni a microchip saját fordítója meg miért nem. És erről nem szól a help.
Következő: »»   24 / 118
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