Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Szavasztok!
Az lenne a kerdesem, hogy valakinek vannak-e tapasztalatai a CCS-ben levo SD kartya ill. FAT driverrel kapcsolatban (mmcsd.c, fat.c). Elso nekifutasra nekem nem müxik... Koszi elore is! Üdv: P
Haho!
Lenne meg egy kerdesem. Van arra mod, hogy CCS-bol tudjak debuggolni. Egy PicKit2 debug express cuccom van, de azt nem tudom, hogy ezt ossze lehet-e valahogy baratkotatani a CCS compiler-rel. Programozasra kivaloan hasznalhati a Pickit2 de jo lenne valahogy debugolasra is befogni. Üdv: P
MPLAB alól elvileg mennie kell a dolognak. Csak az a kérdés, hogy be tudod-e hegeszeni a CCS fordítót MPLAB alá. Mintha láttam volna ilyenre utaló dolgot az MPLAB-ban...
Én MPLAB 8.0 alatt dolgozom PCWH CCS compilerrel, teljesen simán és zökkenőmentesen megy a dolog. Csupán a CCS oldaláról letölthető plugin kell hozzá, amely a MPLAB-ba berakja a CCS fordítót. Fontos még, hogy a projekt létrehozásakor használni kell a project wizard-ot. Én is PICKIT 2 -vel dolgozom, de még nem nagyon debuggoltam vele. Arra emlékszem a ChipCad tanfolyamról, hogy a Pickit2-nek korlátozottak a debugg lehetőségei, tehát max. azt tudod megtenni vele, hogy töréspontokat helyezel el a programban és azokon a pontokon tudod vizsgálni a controller állapotait, regisztereit, stb. Ezzel szemben - ha jól tudom - ICD2-vel akár lépésenként belülről lehet debuggolni, hiszen az ICD2 betölti az mc.-be az ehhez szükséges rutinokat. De, azt hiszem ebben Potyo kolléga sokkal illetékesebb...
Alapvetően mindkettő debug lehetőségei a chipbe épített lehetőségeken múlik. A Pickit 2 az utóbbi időben sokat fejlődött, manapság már szerintem egyenrangú az icd2-vel (bár nekem még nincs pickit2-m, így nem tudok róla érdemben nyilattkozni)
nekem egy 7.60-as MPLAB-om van. Most elinditottam, de a PICKIT2 a debug menuben inaktiv. ez nalad is igy van? Nalam rossz valami, vagy esetleg regi ez az MPLAB verzio?
A masik, hogyan lehet beallitani, hogy a CCS lib-eket + devicer header filokat lassa forditaskor? A "Set language Tool Location/CCS/Default Search..." menuben beallitottam, de semmi eredmeny. Sorry a 1.0-as kerdesekert de az MPLAB-ot nem nagyon hasznalom. P
Első körben rakd fel a legújabb MPLAB-ot.
Köszi!
MPLAB 8 installalva, PicKit2 debuggolas aktivalodott. Eddig jol nez ki a dolog... Esetleg az include-olassal kapcsolatos kerdesemre nem tudjatok a valaszt. "A masik, hogyan lehet beallitani, hogy a CCS lib-eket + devicer header filokat lassa forditaskor? A "Set language Tool Location/CCS/Default Search..." menuben beallitottam, de semmi eredmeny." Üdv: P
Ezért írtam az előbb, hogy használni kell a project wizardot. Addig, amíg nem azzal hoztam létre az új projektet, akármit állítottam, nem látta az include fájlokat. Sok kínlódás után, megpróbáltam a project wizardot és elsőre minden rendben ment és azóta is rendben megy. Ez az MPLAB egyik "hasfájása", úgy tűnik...
Köszi a segitseget.
Kicsit szenvedtem vele, de megvan a megoldas. Mindegy, h hogyan hozod letre a projektet lenyeg az, h a Project/Build options/Project menuben az search include path-ra kell felrakni a CCS drivers es devices konyvtarait. Ezutan minden megy tokeletesen. Üdv: P
Hali!
Újra a CCS fordító MMC/SD kártya és FAT támogatása ügyében írok. Valahogy nem igazán akar menni a CCS example könyvtárban lévő demo program. Viszont úgy láttam, hogy a CCS-nek van hivatalos ethernet develeopment board-ja amin vam MMC kártya slot és írták is, h támogatják is ezt. Viszont nem találtam sehol sem kapcsolási rajzot a board-ról. Ilyet nem lehetne valahonnan "szerezni"? Üdv: P
Sziasztok!
Megvan nekem a CCS 4.068 és van hozzá egy ICD2. Feltelepítettem hozzá az MPLAB 8.10-t, az ideutilsupd-et és a ICD2 interface-t, hogy tudjak debugolni a CCS-ben. Na ez a debugolás szépen megy 18f és 16f családoknál. Viszont nem megy a 30f-nél. Feljön egy ablak és olyasmit ír ki, hogy: Initialization of the device database for the requested device failed Run the full diagnostic :gomb ok :gomb No communication: pirossal a debug ablakban. És inaktív marad minden debughoz kapcsolódó ikon. Kérdésem, hogy mit kell csinálni? Valaki debugolt már CCS-ben 30f-es családból? A fuse-ok: #device ICD=TRUE #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD) #FUSES PR //Promiary Oscillator #FUSES NOCKSFSM //Clock Switching is disabled, fail Safe clock monitor is disabled #FUSES WPSB16 //Watch Dog Timer PreScalar B 1:16 #FUSES WPSA512 //Watch Dog Timer PreScalar A 1:512 #FUSES PUT64 //Power On Reset Timer value 64ms #FUSES NOBROWNOUT //No brownout reset #FUSES BORV27 //Brownout reset at 2.7V #FUSES LPOL_HIGH //Low-Side Transistors Polarity is Active-High (PWM 0,2,4 and 6) //PWM module low side output pins have active high output polar #FUSES HPOL_HIGH //High-Side Transistors Polarity is Active-High (PWM 1,3,5 and 7) //PWM module high side output pins have active high output polarity #FUSES NOPWMPIN //PWM outputs drive active state upon Reset #FUSES MCLR //Master Clear pin enabled #FUSES NOPROTECT //Code not protected from reading #FUSES NOWRT //Program memory not write protected #FUSES NODEBUG //No Debug mode for ICD #FUSES NOCOE //Device will reset into operational mode #FUSES ICS2 //I CD communication channel 2 #FUSES RESERVED //Used to set the reserved FUSE bits
Sziasztok!Egy kis csemege http://rapidshare.com/files/124042065/PCWH_v4.074.rar.html
Idézet: „#FUSES NODEBUG //No Debug mode for ICD” Szerintem ezzel tiltottad le a debug-olást...
Úgy látszik tényleg a FUSE-okkal van probléma. MPLAB-ba beimportálva azt a hibát írta ki, hogy rossz configurációs bit beállítások... Manuálisan beállítva a FUSE-okat az MPLAB-ban simán betölti a a progit és fut is.
Szóval akkor a CCS rosszul generálja le FUSE-okat a 30F-hez? Vagy én csesztem el valamit? Idézet: „Szóval akkor a CCS rosszul generálja le FUSE-okat a 30F-hez?” Olybá tűnik, hogy a CCS a ludas. Hiába kattintom be az általános opciók között, hogy Enable Integrated Chip Debugging (ICD), mindenképpen #FUSES NODEBUG kerül a [projektnev].h állományba. De - gondolom - ezt kézzel ki tudod javítani fordítás előtt.
Kellett volna egy I2C slave szoftveres implementáció PIC12F629-re. Gondoltam, megnézem, hogy a CCS-sel ketten mire megyünk...
Első nekifutásra ezzel próbálkoztam: #include <12F629.h> #use i2c(SLAVE, SCL=PIN_A1, SDA=PIN_A0, SLOW, FORCE_SW, NO_STRETCH) unsigned char command, data; void main() { i2c_start(); command=i2c_read(); data=i2c_read(); i2c_stop(); } Természetesen megnéztem a generált assembly kódot is, s már az i2c_start látványától lehidaltam:
..................... BANKSEL TRISIO ; Clock stretch, amit ugye elvileg BCF SCL ; letiltottam!!! BANKSEL GPIO BCF SCL .................... A szimbólumokat és a cimkéket átneveztem, hogy valamivel olvasmányosabb legyen. A GPIO és a TRISIO a PORTA és TRISA regisztereket takarja, s az SDA a GPIO,0 az SCL pedig a GPIO,1 bitnek felel meg. Az a kisebbik baj, hogy az órajelnyújtás (clock stretch) bennemaradt a tiltás ellenére, de az előtte levő kódban szerintem az SDA és SCL biteket összekeverték (magas SCL szint mellett az SDA vonalon kellene H->L átmenetre várni. Mindamellett a visszaugrálások logikája is kifogásolható... Úgy látszik, muszáj lesz saját kútfőből meríteni, bár még sohasem foglalkoztam I2C-vel.
Egy kicsit rendezetteb formában mégegyszer küldöm:
.................... i2c_start(); BANKSEL TRISIO BSF SCL ; SCL input legyen BSF SDA ; SDA input legyen BANKSEL GPIO SDA_HI: BTFSS SDA ; Varunk,hogy SDA=HI legyen GOTO SDA_HI SCL_DOWN: BTFSS SCL ; Varunk, hogy SCL=HI legyen GOTO SCL_DOWN BTFSC SCL ; Varunk,hogy SCL=LO legyen? GOTO SCL_DOWN ; Ez butasagnak tunik... ..................... BANKSEL TRISIO ; Clock stretch, amit ugye elvileg BCF SCL ; letiltottam!!! BANKSEL GPIO BCF SCL ....................
Sziasztok!
30F-nél megoldódott a probléma. Egymást kizáró Fuse-kat be lehet állítani. Viszont USB-s PIC-cel szívok egy kicsit. 20MHz-es kvarccal az alábbi beállítás szerint: #fuses HSPLL, NOWDT, NOPROTECT, NOLVP, NODEBUG, USBDIV, PLL5, CPUDIV1, VREGEN, NOMCLR #use delay(clock=20000000) Az alábbi kis programmal: usb_init(); do { usb_task(); if (usb_enumerated()) { printf(usb_cdc_putc, "C"); } } while (TRUE); Amit az egyik példából vettem. Csatlakozásnál gyorsan kétszer-hármszor jelez és egy idő múlva kiírja (ha kiírja), hogy nem ismeri fel az eszközt. A helyzetet bonyolítja, hogy legelőször felismerte és drivert keresett hozzá CCS PIC DEMO vagy valami hasonló néven. Mi lehet a baj? Valaki tudna küldeni egy működő FUSE beállításokat és esetleg egy hozzá tartozó egyszerű progit? üdv!
quote]Viszont USB-s PIC-cel szívok egy kicsit.[/quote]
Konkrétan milyen típussal? Idézet: „legelőször felismerte és drivert keresett hozzá” A CDC típusú eszköz esetén a Windowsnak kell egy .inf fájl a bemutatáshoz. Az USB rejtelmeivel való megismerkedéshez szerintem jobb volna először a Microchip FSUSB demóinak kipróbálása. Van HID, CDC és generic típusú eszközre is mintapélda. A CCS-nél nem mindig tudni, hogy mit csinál. Néha meg tudni, hogy hülyeséget csinál (lásd föntebb). Ráadásul a disassemly listája sokkal barátságtalanabb mint a Microchip C fordítójáé. Ha működik a program, akkor persze mindez nem érdekes. De ha nem működik, akkor annál kellemetlenebb... Idézet: „Valaki tudna küldeni egy működő FUSE beállításokat és esetleg egy hozzá tartozó egyszerű progit?” Ez attól függ, hogy konkrétan milyen típusra kell.
A típus az 18f4550, de szerintem nem számottevő alap problémánál.
A .inf fileról nem tudok. Tehát minden CDC-s alkalmazáshoz kell egy ilyen file? Gondolom akkor minden alkalmazáshoz másmilyen file kell. Lehet letölteni valahonnan? Szóval egy példa még mindig jól jönne gyakorlatilag akármelyik USB-s 18F családhoz CDC-re. Idézet: „Tehát minden CDC-s alkalmazáshoz kell egy ilyen file?” Nem, az adott azonosítójú usb eszközhöz kell egy .inf fájl. Ezt az inf fájlt meg kell mutatni a windows-nak, amikor a cuccot bedugod, és kéri a drivert hozzá. Valahol a ccs mappájában ott kell lennie, talán serial.inf néven. Idézet: „Szóval egy példa még mindig jól jönne gyakorlatilag akármelyik USB-s 18F családhoz CDC-re.” Egyszer kipróbáltam a ccs-el adott cdc példaprogramot, nekem működött. Miért nem térsz át a C18-ra? 16F vagy 12F esetén még látom valami értelmét a CCS-nek (bár akkor már inkább Hi-Tech vagy SDCC), de 18F-hez van gyári fordító, amivel van tapasztalat is. Hozzá kipróbált, folyamatos támogatású mintaprogramok. Minek szívni másik fordítóval?
Sziasztok!
PIC 16F87X Szeretném megtanulni égetni ic-prog,emplab megvan de nem tudom hogy áljak neki. cnc-s rajz ill. furogéphez kellene.Hobby cnc-röl szedtem le a kapcsolást.3 léptetö motort vezérel!Hogy álljak neki tanulni(programozni)? Idézet: „A típus az 18f4550” Akkor nem értem, hogy mi a probléma? Az ex_usb-serial.c pont erre az MCU-ra van szabva, ráadásul20 MHz-es kvarccal. A config/fuse bitek bele vannak drótozva. Ha nem babrálod el, akkor csont nélkül fordul, és feltehetőleg fut is, ha a hardver követelmények is teljesülnek. Gondosan át kellene tanulmányozni a projekthez tartozó fáljokban leírtakat! Examples\ex_usb-serial.c-ben a VBUS figyelésről és a B4, B5, A4 lábak kiosztásáról szól. Drivers\pic18usb.h is regél valami C4 vagy C5 felhúzásról (de ezt remélhetőleg elintézi belső felhúzással!!!), továbbá a C3-ra kötendő 470 nF kapacitásról. Ezeknek és a hason lovaknak utána kellene nézni... Az .inf fájlok egyébként a CCS fordító Drivers nevű mappájában vannak. A cdc_NTXP.inf vagy a cdc_NTXPVista.inf kell neked. Nem tudom, hogy hivatalosan hogy kell a mintapéldákat lefordítani (lehet, hogy parancssorból?), de ne varázslóval csinálj hozzá új project-et, hanem kézzel! A Project menüben találtam valami Create ikont, aholmegadod az MCU típusát, a project nevét, s ha nem tette volna meg, felveszed az ex_usb-serial.c a forráslistára. Én eléggé el nemítélhető módon az Examples mappában tettem mindezt, így minden hivatkozott fájlt megtalált.
Mindenképpen sokat kell foglalkozni az adott PIC adatlapjával.
Részletesebb információ is található, mint pl. Mid-range MCU family Reference Manual, Application Notes ésatöbbi. Magyar nyelvű információk: Közepes teljesítményű PIC mikrovezérlők Kónya László honlapja Végül, mivel gondolom, hogy főleg a CCS fordító érdekel - ha már ebben a témakörben nyilatkoztál meg - a CCS Inc. honlapja is számíthat érdeklődésedre.
Sziasztok,
A következö C-kód normálisan működik PIC16F877A-ra lefordítva,de ha 18F4550 -es procihoz írt alkalmazáshoz használom lefut,de nem csinál semmit,nem változtatja meg a port értékét. A függvények a B-PORT-ot kapcsolgatják bitenként. Mi lehet a hiba? // I/O port Defines for PORT B // As defined in the following structure the pin connection is as follows: // B0 con_wc // B1 con_inch // B2 con_whz // B3 con_xc // B4 con_yc // B5 con_zc // B6 con_xhz // B7 con_yhz struct mxc_pin_map { // This structure is overlayed int1 con_wc; // on to an I/O port to gain int1 con_inch; // access to the MATRIX CONTROL pins. int1 con_whz; // The bits are allocated from int1 con_xc; // low order up.WC will int1 con_yc; // be pin B0. int1 con_zc; int1 con_xhz; int1 con_yhz; } mxc; //Matrix Control on PORT B #LOCATE mxc = 6 #define set_tris_mxc(x) set_tris_b(x) struct mxc_pin_map const MXC_WRITE = {0,0,0,0,0,0,0,0}; // For write mode all pins are out struct mxc_pin_map const MXC_READ = {1,1,1,1,1,1,1,1}; // For read mode data pins are in // rest pin of Matrix Control CON_ZHZ on PORT A.PIN_A4 int1 Matrix_inh(int1 inh){ int1 error_occured; set_tris_mxc(MXC_WRITE); switch (inh) { case 0:{ mxc.con_inch = 1;} break; case 1:{ mxc.con_inch = 0;} break; default:{ mxc.con_inch = 1; error_occured = 1; } break; } return(error_occured); } // Matrix conrol output state configurator // 0 - means logic "0" // 1 - means logic "1" // 2 - means logic "HIGHZ" int1 Matrix_control(int xcout_state,int ycout_state,int zcout_state,int wcout_state){ int1 error_occured; error_occured = 0; set_tris_mxc(MXC_WRITE); switch (xcout_state) { case 0:{ mxc.con_xhz = 1; mxc.con_xc = 1; } break; case 1:{ mxc.con_xhz = 1; mxc.con_xc = 0; } break; case 2:{ mxc.con_xhz = 0; mxc.con_xc = 1; } break; default:{ mxc.con_inch = 1; error_occured = 1; } break; } switch (ycout_state) { case 0:{ mxc.con_yhz = 1; mxc.con_yc = 1; } break; case 1:{ mxc.con_yhz = 1; mxc.con_yc = 0; } break; case 2:{ mxc.con_yhz = 0; mxc.con_yc = 1; } break; default:{ mxc.con_inch = 1; error_occured = 1; } break; } switch (zcout_state) { case 0:{ output_high(PIN_A4); mxc.con_zc = 1; } break; case 1:{ output_high(PIN_A4); mxc.con_zc = 0; } break; case 2:{ output_low(PIN_A4); mxc.con_zc = 1; } break; default:{ mxc.con_inch = 1; error_occured = 1; } break; } switch (wcout_state) { case 0:{ mxc.con_whz = 1; mxc.con_wc = 1; } break; case 1:{ mxc.con_whz = 1; mxc.con_wc = 0; } break; case 2:{ mxc.con_whz = 0; mxc.con_wc = 1; } break; default:{ mxc.con_inch = 1; error_occured = 1; } break; } return(error_occured); } Szivesen várok miden észrevételt.
Az analóg bemeneteket letiltottad? (Többcélú lábaknál nem elég a TRIS bitek beállítása)
Hello!
Köszi a segítséget már jól működik minden. Az exampleból indultam ki most már van oda-vissza kommunikáció. Egy dolog még szemet szúrt nekem. Amikor először rádugom a PIC-et a PC-re új hw-t talál CCS CDC DEMO néven, iyenkor kéri ugye az .inf file-t. Kérdésem, hogy ezt a szöveget nem lehet megváltoztatni?
Keress rá a forrásfájlokban erre a szövegre, és ha megvan, írd ott át.
Nem "CCS RS232 Demo" volt véletlenül?
A usb_desc_cdc.h végén van ilyen szöveg. Erre is áll: csak akkor babráld, ha tudod, hogy mit csinálsz! Néhány sorral fentebb az egyikmegjegyzés arról tanúskodik, hogy a programozó sem nagyon tudta, hogy mit csinál: 0x61,0x04, //vendor id (0x04D8 is Microchip, or is it 0x0461 ??) ==8,9 |
Bejelentkezés
Hirdetés |