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   9 / 118
(#) kisslev válasza Prinner hozzászólására (») Dec 10, 2007 /
 
Én ilyen esetben felveszek egy string változót és sprintf(s,"bla-bla"); függvénnyel írom bele a konstans szöveget. Ez nem járható út neked?
(#) Prinner válasza kisslev hozzászólására (») Dec 10, 2007 /
 
Eddig is hasonlóan csináltam, csak sprintf helyett strcpy-t használtam.
Ha sehogysem jön össze, akkor így csinálom, de az egész program nagyon hosszú, tehát mindenképpen a legrövidebbnek és a lehető legáttekinthetőbbnek kell lennie.
(#) sysy válasza Prinner hozzászólására (») Dec 10, 2007 /
 
A szöveget le kell másolni a RAM-ba. Flasht szerintem nem tud pointerezni.

sysy
(#) sysy hozzászólása Dec 18, 2007 / 4
 
Sziasztok!

Itt a karácsony és a CCS fiúk küldtek ajándékot: 4.058.
Tudom, hogy nem a legfrissebb, de ajándék compilernek ne nézd a bitjeit.

Itt van!
(#) Norberto válasza sysy hozzászólására (») Dec 18, 2007 /
 
Wáow!!!

Hálás köszönet a cuccért!

Épp valamelyik nap akartam volna pont kérdezni, hogy nincs-e friss "csomag", csak valamiért kiment a fejemből egy picit...
(#) kurucz_peter válasza sysy hozzászólására (») Dec 19, 2007 /
 
Szevasztok!

Letöltötem innen a CCS compiler-t (4.58), de nem akar elindulni. Registration file error, CRG file is too old hibajelzés jön rögtön indításkor. A 3.2-es CCS crg fájljait másoltam be az új alá de ez így nem OK. Tudna nekem valaki segíteni, hogy hogyan tovább.

Köszi!

P
(#) sysy válasza kurucz_peter hozzászólására (») Dec 19, 2007 / 1
 
Ooops!

A 3.2 regfile tényleg régi. Itt van egy frissebb.

TryThis.zip
    
(#) kurucz_peter válasza sysy hozzászólására (») Dec 20, 2007 /
 
Hali!

Köszi szépen a frissítést!
Müxik!

Üdv:
P
(#) mcq hozzászólása Jan 9, 2008 /
 
Sziasztok !

Feltettem a 4.058-as verziót.Próbálgattam a példaprogramokkal és a PIC16-osokkal szépen műxik, de a 18-asokkal "Access violation at address 0137660C. Read of address 0137660C" hibaüzenettel kiakad fordítás közben. Találkoztatok már ezzel?

(#) AQLMGabor hozzászólása Feb 1, 2008 /
 
Srácok!
Az mplab8.0 felrak egy css compilert, amit ki lehet választani a project-nél, a cssc.exe is megvan, működik.
Mégis ez a hibaüzenet fordításkor:

Executing: "C:\Program Files\Microchip\Third Party\PICC\Ccsc.exe" "elso.c" +FM +DF +LN +T -A +M +Z +Y=9 +EA
Error: The selected compiler: "PCM" is not installed on this PC

Mit csinálok rosszul?
(#) AQLMGabor válasza AQLMGabor hozzászólására (») Feb 1, 2008 /
 
Letöltöttem azt amit ide felraktatok, minden ok.
Megoldódott a problema.
(#) sysy hozzászólása Feb 6, 2008 /
 
Sziasztok!

Tegnap a CCS ifjak itt jártak és hoztak egy kis ajándékot. Nem fogjátok kitalálni, hogy mit! PCWHD_4.065 verzióját. Megigértem nekik, hogy közkincsé teszem. A frissítéshez szükséges kisegítő program is benne van a csomagban.

Íme.

Bővebben: Link
(#) m2attila hozzászólása Feb 7, 2008 /
 
Hali,

Egy olyan problémám van,hogy soros portoto szretnék használni egy PIC18F2550-en. De ha feltöltöm rá a tesz progimat (persze előtte újrafordítom a procira) ami más PICekkel működik csak mindenféle összevisszaság jelenik meg a PC terminál ablakjában. Valami olyasmi minta baudrate probléma lenne,de ugylátszik a kódban minden rendben mégsem müködik. Mégis olyan érzésem van mintha az oszcillátor beállítással lenne valami baj.

A segítsége előre is köszi.
(#) potyo válasza m2attila hozzászólására (») Feb 7, 2008 /
 
Az usb-s chipek oszcillátorbeállító konfigurációs bitjei másképp vannak, mint a nem usb-s 18F chipeknél. Adatlapban mindent megtalálsz ahhoz, hogy úgy állítsd be, ahogy neked kell.
(#) m2attila hozzászólása Feb 7, 2008 /
 
Szia Potyo

A probléma ugyan az 18F4550-el ugyhogy tuti igazad van.

A beállításokat csatoltam.
De 1-2 dolog nem tiszta a az oszcillátor beállítással CCS-ben.

Ha tudsz légyszives segíts.
(#) potyo válasza m2attila hozzászólására (») Feb 7, 2008 /
 
Úgy nemnagyon lehet segíteni, hogy nem írod le, hogy mit akarsz! A csatolt pdf-ben levő rajzhoz hozzá kell még venni az adatlap 25.1 fejezetében a config bitek leírását is, úgy lesz érthető.

Én az ilyet jobban szeretem a forráskódba beírni, akkor nem kell lesni, hogy most CCS-ék milyen beállítást hová tettek. Pl. ezt a sort elhelyezve:
  1. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN

20MHz-es kvarcot a kontrollerre kötve a processzor 48MHz-en fog futni. A fuses.txt fájlban megtalálod, hogy melyik config szó mit jelent.
(#) m2attila hozzászólása Feb 8, 2008 /
 
Bocs a hiányos dolgokért...

Szoval szeretném a 18F2550-et USB-n keresztul PC-vel használni pl.: CDC(virtual serial port via USB) vagy mint HID eszköz.A CCS fordítónak vannak példái erre.
A soros portot 'Debug' céllal használnám,addig amig az USB-t fölélesztem.
Próbáltam a példaprogramot de nem müködött rendesen.
Ugygondoltam soros porton keresztül debugolom,de akkor estem pofára,mert az sem müködik.
Idáig soha nem volt a soros porttal problémám és a fordító is normálisan működött kisebb bugoktol eltekintve.
Most ezekkel a 2550/4550-es PIC-ekkel került elő a probléma.

Utána néztem a beállításoknak nekem is hasonló beállítások vannak.

  1. #include <18F2550.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
  6. #FUSES HSPLL                    //High Speed Crystal/Resonator with PLL enabled
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES BROWNOUT                 //Reset when brownout detected
  9. #FUSES BORV20                   //Brownout reset at 2.0V
  10. #FUSES NOPUT                    //No Power Up Timer
  11. #FUSES NOCPD                    //No EE protection
  12. #FUSES STVREN                   //Stack full/underflow will cause reset
  13. #FUSES NODEBUG                  //No Debug mode for ICD
  14. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  15. #FUSES NOWRT                    //Program memory not write protected
  16. #FUSES NOWRTD                   //Data EEPROM not write protected
  17. #FUSES IESO                     //Internal External Switch Over mode enabled
  18. #FUSES FCMEN                    //Fail-safe clock monitor enabled
  19. #FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
  20. #FUSES NOWRTC                   //configuration not registers write protected
  21. #FUSES NOWRTB                   //Boot block not write protected
  22. #FUSES NOEBTR                   //Memory not protected from table reads
  23. #FUSES NOEBTRB                  //Boot block not protected from table reads
  24. #FUSES NOCPB                    //No Boot Block code protection
  25. #FUSES MCLR                     //Master Clear pin enabled
  26. #FUSES LPT1OSC                  //Timer1 configured for low-power operation
  27. #FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
  28. #FUSES PLL5                     //Divide By 5(20MHz oscillator input)
  29. #FUSES CPUDIV1                  //No System Clock Postscaler
  30. #FUSES USBDIV                   //USB clock source comes from PLL divide by 2
  31. #FUSES VREGEN                   //USB voltage regulator enabled
  32.  
  33. #use delay(clock=20000000)
  34. #use rs232(baud=9600,parity=N,xmit=PIN_C1,rcv=PIN_C0,bits=8)


Engem ez a beállítás is aggaszt:

setup_oscillator();

Ha nem állítom be akkor:

//Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

Mondjuk ha beállítom: setup_oscillator(OSC_8MHZ|OSC_NORMAL|OSC_31250|OSC_PLL_OFF);

De a soros port egyik beállítással sem müxik.....

Mit csinálhatok rosszul?
Mi lehet elrontva? :no:

Nincs ötletem.... :no:

(#) potyo válasza m2attila hozzászólására (») Feb 8, 2008 /
 
Pedig az ex_usb_serial példaprogram működik rendesen, kipróbáltam. Csak vedd ki belőle a #define USB_CON_SENSE_PIN PIN_B2 sort.

Idézet:
„Utána néztem a beállításoknak nekem is hasonló beállítások vannak.”


Csak hasonló, vagy ugyanaz? Először indulj el abból, ami biztosan működik, utána lehet kisérletezni.

Idézet:
„Engem ez a beállítás is aggaszt:

setup_oscillator();”


De ezzel mit akarsz elérni?

-------------------

Egyébként a kész, lefordított hex fájlt mplab-ba beimportálva meg lehet nézni, hogy mire vannak a konfig bitek állítva.
(#) whalaky hozzászólása Feb 10, 2008 /
 
Sziasztok!
Szerettem volna két PIC között aszinkron soros kommunikációt létesíteni (egyenlőre dróton, majd ha az megbízhatóan megy akkor rádión), de nem mondhatni hogy elsöprő sikerem volna.
A két PIC egy 12F629 és egy 12F683-as. A méretük miatt esett ezekre a választás, ahova végleg kerülnének elég szűk a hely (tudom, van SMD, de ahoz már vak vagyok )
A lényeg... az adóból kijövö jelet egy MAX232-n keresztül a PC-re kötve az jön ki amit küldök (minő meglepetés) de a vevő oldalon byte-onként továbbküldve egy másik soros portra hogy a PC-n lássam mi jött be, csak az első byte jó, a többi mintha baudrate problémás lenne.
Ha adóoldalon byte-onként küldöm az adatokat akkor még úgy ahogy át is jön, de ha 2-3 vagy több byteot akarok küldeni egy csomagban az már nem megy.
Adó oldal:
  1. #use rs232 (baud=2400,parity=N,xmit=PIN_A2,rcv=PIN_A1,bits=8,stream=radio,invert)
  2. ...
  3.     // ez működik
  4.       putc('U',radio);
  5.       delay_ms(5);
  6.       putc(0x02,radio);
  7.       delay_ms(5);
  8.       putc('H',radio);
  9. ....
  10.     // de ezek már nem
  11.     puts("AAAAAAAAA",radio);
  12.     fprintf(radio,"AAAAAAA");


Vevő oldal
  1. #use rs232(baud=2400,parity=N,xmit=PIN_A0,rcv=PIN_A3,bits=8,stream=radio,INVERT)
  2. #use rs232(baud=9600,parity=N,xmit=PIN_A2,rcv=PIN_A1,bits=8,stream=console)
  3. ....
  4.     if(kbhit(radio)) {
  5.        i=getc(radio);
  6.        putc(i,console);
  7.        }

Valaki segítsen! Két hete küzdök vele és nem megy.

Hogy kell a kódba sortörést varázsolni????
(#) sysy válasza whalaky hozzászólására (») Feb 10, 2008 /
 
Tényleg úgy tűnik, hogy baudrate probléma. Az adó oldalon álítsál be 2 stop bitet és a vevő oldalon maradjon 1 stop bitre állítva. Az RS232 minden startbitnél újraszinkronizál és csak a stop bitig kell tartani a szinkront. Ezt, úgy látszik, hogy tudja a renszered. Lehet, hogy belső oscillátort használsz? Kvarcról nem kellene ilyen rossznak lennie. A kódba vesszőt téve lehet sortörést betenni.
(#) potyo válasza whalaky hozzászólására (») Feb 10, 2008 /
 
A vevőoldali picben inkább olyat csinálj, hogyha bejött mondjuk 5drb 'A' karakter, akkor begyujtasz egy ledet. Ezzel tudod felismerni, hogy a fogadás jó-e. A 12F-ben nincs hardveres soros port, ezek a beépített függvények meg ki tudja, mit csinálnak. Gyanús, hogy valahogy egymásba futnak a bitek.
(#) whalaky válasza potyo hozzászólására (») Feb 11, 2008 /
 
Köszi, ezt már próbáltam. Betettem 2-3 "U"-t, aztán egy STX-et. Az STX után jött volna az érdemi adat. A jelenség ugyan az, byteonként küldve jó, de a két byte közti szünetbe rádión már beleszemetel.
sysy: igazad van, eleinte belső oszcillátorral hajtottam a dolgot épp a kevés láb miatt, aztán lemondtam egy két csingilingiről, hátha... de kristállyal sem nem megy.

Szerintetek ha legalább vevőoldalra beteszek egy 16F87-et - annak már van USART-ja - valamelyest javulhat a helyzetem? Igencsak kezdő vagyok a dologban (a PIC-ben os és a CCS-ben is), a PIC USART-nak van puffere, vagy nekem kell foglalni?
(#) potyo válasza whalaky hozzászólására (») Feb 11, 2008 /
 
Egy olyan pic-el, aminek van hardveres usart-ja, máris sokkal jobb helyzetben vagy.

A hardveres usart-nál van 2 bájtnak hardveres puffer, de a többi adatnak neked kell foglalni. Ez a baj az ilyen CCS féle beépített rutinokkal, hogy elfedi a hardvert annak korlátaival együtt...
(#) sysy válasza whalaky hozzászólására (») Feb 11, 2008 /
 
Asszem megvan a hiba!
Ha jól értelmeztem a dolgot: A vevőd leveszi az első karaktert, majd elkezdi echo-zni a PC felé a levett karaktert. Adás közben a vétel megáll. Majd miután elküldte a PC-nek a karaktert, akkor fog megint levenni egy újabb bejővő byte-ot. Ez alalatt veszhetnek el bitek. Szerintem csinálj egy hosszú vevő buffert (amennyi kell) és annak megtelte után küldi el a PC felé a buffer tartalmát. Eközben az adó vár egy kicsit, hogy biztosan elküldésre kerüljön az egész buffer tartalom. (Bust üzemmód). Nekem nem voltak problémáim a soros kommunikációval. HW usartal simán megy 115200 baud, míg mellette 9600-al ment az SW usart is. Igaz, megszakítással csináltam meg azt is.
(#) potyo válasza sysy hozzászólására (») Feb 11, 2008 /
 
Ezaz, nem tudni, hogy ezek a beépített függvények mit csinálnak. Nem lehetetlen szoftveresen küldeni és fogadni is adatot egyidőben, csak ahhoz át kell gondolni az algoritmust, és azt azután finoman le kell programozni, igencsak ajánlottan asm-ben. Kell hozzá egy timer, aminek a megszakításában végezzük a műveleteket. Ezek a beépített függvények meg gondolom valami delay() tipusú dolgokkal működnek, aminek a használatáról egyébként is le kellene szokni...
(#) whalaky válasza sysy hozzászólására (») Feb 11, 2008 /
 
Köszönöm, valami ilyesmitöl tartottam.
Összedobok egy hw-usartos verziót, ha az pufferel megoldódik a nyűgöm.
Bár ahogy Topi cikkében láttam (vezetéknélküli kommunikáció 434Mhz-en) Ő sem használta a hw usart-ot, vagy legalábbis nem az Rx Tx lábakat használja, hanem egy-egy mezei IO lábat, és neki érdekes módon tán működött. Lehet hogy egyszerűen csak szerencséje votl?
A végsö cél tulajdonképpen ay lenne hogy, max 2 byte-ot át tudjak biztonságosan küldeni, a legroszabb esetbem 80ms-es időnklént (ez a max küldési gyakoriság) Olvastam fórumokon hogy a rádió "élesztéséhez" illik kiküldeni egy-két "U"-t(10101010). Tetszett volna a megoldás hogy UU STX Adat ETX, ez 2400-on még épen belefér az időbe.
(#) sysy válasza potyo hozzászólására (») Feb 11, 2008 /
 
Hát pont ez a szép az egészben, hogy nem tudni, mit is csinálnak a belső függvények. És nem is kell tudni róluk semmit. Azért programozgatunk C nyelven, hogy ne kelljen assemblerrel kinlódni. Én programozgattam vagy 20 évet mindenféle asm-ben, de amikor megnézek egy CCS kódot befordítva a PIC-be, még mindíg meg kell, hogy állapítsam, a CCS fiúk értik a szakmájukat. A delay() tipusú dolgok, meg egészen korrekten meg vannak írva. A SW usartok működése közben pedig illik mindenféle más dolgot letiltani. Ha az RX láb egy megszakítást generáló láb is egyben, akkor még a start bitet sem kell figyelni, mert szól, hogy megjött. Innentől kezdve a delay() típusu dolgok pontosan elegendőek egy byte levételére. A RTOS pedig félkézzel lekezel két SW usartot.

Uff.

sysy
(#) sysy válasza whalaky hozzászólására (») Feb 11, 2008 /
 
Szerintem nem kell ekkora feneket keríteni a dolognak. Nem is kell usartot használni, mert ugye, a rádiós átvitelnél nagyon ajánlatos az NRZ kódolás. Ennek a legszebb példája a Manchester kódolás. Ez C-ben néhány sor csupán. Úgy a kódolás, mint a dekodolás oldalán. Nem is beszélve arról, hogy a net tele van jobbnáljobb példaprogramokkal. Gondolj csak bele, ha az átvinni kívánt információd 0x00 0x00. Ezt simán leveszi az vevőd, ha kimarad az adás valamilyen okból. ( pláne, ha nem is ezt akartad küldeni). A profik mindíg NRZ kódot használnak! Szart mindenki tud csinálni. Megbízható átvitelt nem. Te se add alább.

sysy
(#) potyo válasza sysy hozzászólására (») Feb 11, 2008 /
 
Oké, RTOS használatával természetesen nem probléma a dolog. Csakhogy a kezdők igen nagy részének fogalma sincs róla, mi az az RTOS, másrészt az ilyesmi használatával egy csomó számítási teljesítményt és memóriát pazarolunk el. Persze ide lehet beírni, hogy veszek nagyobb/gyorsabb chipet, de mindannyian látjuk, hogy hol tart a pc ipar.

Én sem azt mondom, hogy ne használjunk magas szintű nyelvet, mert tényleg gyorsabb, kényelmesebb a fejlesztés. Sőt ha néhányszor megnézzük, hogy mit mire fordít a fordító, és azután ennek figyelembevételével programozunk, akkor a generált kód sem lesz sokkal rosszabb, mint egy jól megírt asm kód (mert asm-ben is lehet rossz kódot írni). De ahhoz, hogy ezeket a függvényeket összetettebb feladatoknál is tudjuk használni, ahhoz tudni kellene, hogy a függvények hogyan működnek.

Továbbra is azt mondom, hogy a kontroller az nagyrészt elektronika, és csak kisrészt programozás, ismerni kell a kontroller lehetőségeit/határait. Ahogy egyik tanárom mondta az egyetemen: két termék közül nem az a jobb, amelyik magasabb órajelen dolgozik, hanem az, amelyik alacsonyabb órajelen tudja ugyanazt...
(#) sysy válasza potyo hozzászólására (») Feb 11, 2008 /
 
Hehe... ez igaz. Ezt az aranyköpést néha kölcsönkérhetem?

Persze, neked is igazad van. Ha whalaky tényleg 2 byteot akar átküldeni 'A' pontból 'B' pontba, akkor nem szabad ágyúval verébre lövöldözni. Erre a feladatra pedig van C nyelven megoldás (mint tudjuk). Ha nagyon élére akarjuk állítani a biteket, akkor valóban le kell menni ASM-be. De itt nem hiszem, hogy kiélezett lenne a feladat. :nevetes1:

A RTOS-t nem Whalaky-nek ajánlottam, csak mintegy jelzésképpen, megemlítettem, hogy a járatosabb kollégáknak is eszébe jusson: jé! tényleg.

sysy
Következő: »»   9 / 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