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   29 / 118
(#) brugo hozzászólása Okt 23, 2009 /
 
Ezt a linket kovetve Bővebben: a Step Four_nal " Add any axisting files to your project " hianyzik az EXAMPLE konyvtar !
(#) icserny válasza brugo hozzászólására (») Okt 23, 2009 /
 
Idézet:
„hianyzik az EXAMPLE konyvtar !”

Nekem meg két helyen is van.
Feltelepítetted egyáltalán a CCS fordítóval? Ha nem, akkor az MPLAB sem fogja tudni elővarázsolni.
(#) brugo hozzászólása Okt 25, 2009 /
 
Szép lassan kezdek rájönni, hogy mit hogyan kell csinálni de ehez sókat kell ólvasnom. Köszönöm segitő készségedet kedves icserny.
(#) messer hozzászólása Okt 26, 2009 /
 
Sziasztok! Kérdés a következő adott három bemenet mindegyiken nyomógomb felhúzva tápra, tehát földet kapcsolnak. azt szeretném, ha mindegyik nyomógombra más programrészlet futna le.Kicsit elakadtam , mert nem igazán jön össze a switch-case-el kicsit megzavar az hogy nem egy dolognak a három féle állapota jön létre hanem három bemenetnek két állapota.Tudtok ebben a kérdésben segíteni?
(#) MPi-c válasza messer hozzászólására (») Okt 26, 2009 /
 
Használhatod a switch-case megoldás. Pl. ha egy port alsó három bitjén vannak a nyomógombok, akkor egy maszkolás után a lehetséges állapotoknak megfelelő bitmintát így lehet vizsgálni:
  1. switch(PortAllapot & 0b00000111)
  2. {
  3.         case 0b0000110: //Első    
  4.                               break;
  5.         case 0b0000101: //Második
  6.                               break;
  7.         case 0b0000011: //Harmadik
  8.                               break;
  9.         default: //Egyébként
  10. }

Nyomógombnál ne felejtsd el a pergésmentesítést!
(#) messer válasza MPi-c hozzászólására (») Okt 26, 2009 /
 
A baj csak az, hogy a gombok helye fix és nem egy porton vannak így nincs valami megoldás a switch case-re?
(#) potyo válasza messer hozzászólására (») Okt 26, 2009 /
 
Ha nagyon akarod, akkor előtte egy változóba összegyűjtöd a lábak állását és utána a változót teszed a switch-case-be. De akkor már csinálhatnád három if-el is.
(#) messer válasza potyo hozzászólására (») Okt 26, 2009 /
 
Marad az IF megoldás barátkozom a c-vel nagyon tetszik az assmb..után csak még kicsit nehéz c fejjel gondólkodni mindig átesek a ló túlóldalára folyton minnél egyszerübben akarom megoldani a dolgokat.
(#) potyo válasza messer hozzászólására (») Okt 26, 2009 /
 
Akkor egy tanács: hagyd a CCS-t és inkább a Hi-Tech fordítójával próbálkozz, ha 16F vagy kisebb chippel foglalkozol, illetve a C18 fordítóval, ha 18F chippel.
(#) messer válasza potyo hozzászólására (») Okt 26, 2009 /
 
Azt észrevettem a ccs-ben, hogy elég sok dolog rejtve történik benne, viszont még picit maradok mellette tapasztalat gyűjtés miatt, ha már jobban megy a c akkor térnék át a c18ra.
(#) trudnai válasza messer hozzászólására (») Okt 27, 2009 /
 
Idézet:
„Marad az IF megoldás barátkozom a c-vel nagyon tetszik az assmb..után csak még kicsit nehéz c fejjel gondólkodni mindig átesek a ló túlóldalára folyton minnél egyszerübben akarom megoldani a dolgokat.”


Az nem feltetlen rossz -- gondolj bele, hogy amit mar egyszer megirtak mi a fenenek irja meg az ember megint, raadasul azt a kodot mar valoszinuleg tobb ezren leteszteltek ami ilyen konyvtarakban van meg, igy a hibalehetoseg is kisebb. Mas keprdes, hogy gyakran az ilyesmi altalanos megoldasokat fed le igy lehet kisebb kodban is adott esetben meg lehet ugyanazt csinalni.

Nalad pl ha ket port van akkor csinalhatsz ilyen trukkoket:
  1. switch ( ((unsigned)PORTC << 8 + PORTB) & 0x0184 ) {
  2.    case 0x0100:
  3.       break;
  4.    case 0x0080:
  5.       break;
  6.    case 0x0004:
  7.       break;
  8. }

De a C es mas magasszintu nyelveken torteno fejlesztes egyik sarkalatos pontja, hogy minel absztraktabb modon lassuk a feladatot, igy a kod konyebben atlathato + kesobbiek folyaman konyebb a hibajavitas ill a tovabb fejlesztes. Epp ezert celszeru bemakrozni az elobbi peldat:
  1. #define GOMB1 0x0100
  2. #define GOMB2 0x0080
  3. #define GOMB3 0x0004
  4. #define GOMB_MASK ((GOMB1) | (GOMB2) | (GOMB3))
  5. #define getPort16(p1,p2) ((unsigned)(p1) << 8 + (p2))
  6.  
  7. switch ( getPort16(PORTC, PORTB) & GOMB_MASK ) {
  8.    case GOMB1:
  9.       break;
  10.    case GOMB2:
  11.       break;
  12.    case GOMB3:
  13.       break;
  14.    default:
  15.       // hey, egyszerre ket gombot is lehet nyomni???
  16. }

Igy egyreszt kapasbol latod mi zajlik, masreszt ha a gomb valtozik, ill uj gomb kerul a latoterbe stb sokkal konyebb a kodot valtoztatni, foleg ha ezeket a gomb makrokat mashol is felhasznalod a kododban...
(#) sysy válasza potyo hozzászólására (») Okt 28, 2009 /
 
Ezt kifejtenéd bővebben?
(#) icserny válasza sysy hozzászólására (») Okt 28, 2009 /
 
Ez a "fősodor"
Bővebben: Link

Mellesleg a fenti link alapján van egy olyan sanda gyanúm, hogy idővel a C18-at is a Hi-Tech C váltja fel... (vagy le?)
(#) potyo válasza icserny hozzászólására (») Okt 28, 2009 /
 
Bizonyos szempontból a Hi-Tech fordító nekem is jobban tetszik mint a C18, csak ugye nemsokkal ezelőttig a C18 volt a gyári fordító a 18F sorozathoz. Nem tartom lehetetlennek, hogy idővel a C18 leváltásra kerüljön, már a TCPIP stack is tartalmazza feltételes direktívákkal a HiTech fordító számára is kódot, úgyhogy alaphelyzetben mindkét fordítóval fordítható. USB Stack-et nem néztem, lehet, abban is már benne vannak a feltételes direktívák.
(#) icserny válasza potyo hozzászólására (») Okt 28, 2009 /
 
Idézet:
„USB Stack-et nem néztem, lehet, abban is már benne vannak a feltételes direktívák.”

Igen, látok benne ilyet:

  1. *********************************************************************
  2.  * FileName:        Compiler.h
  3.  * Dependencies:    None
  4.  * Processor:       PIC18, PIC24F, PIC24H, dsPIC30F, dsPIC33F, PIC32
  5.  * Compiler:        Microchip C32 v1.00 or higher
  6.  *                                      Microchip C30 v3.01 or higher
  7.  *                                      Microchip C18 v3.13 or higher
  8.  *                                      HI-TECH PICC-18 STD 9.50PL3 or higher
  9. #if defined(__18CXX) || defined(HI_TECH_C)     
  10.         // All PIC18 processors
  11.         #if defined(HI_TECH_C) && defined(__PICC18__)   // HI TECH PICC-18 compiler
  12.                 #define __18CXX
  13.                 #include <htc.h>
  14.         #else                                   // Microchip C18 compiler
  15.             #include <p18cxxx.h>
  16.         #endif
  17. #elif defined(__PIC24F__)       // Microchip C30 compiler
(#) messer válasza trudnai hozzászólására (») Okt 28, 2009 /
 
"
#define GOMB_MASK ((GOMB1) | (GOMB2) | (GOMB3))
#define getPort16(p1,p2) ((unsigned)(p1) << 8 + (p2))"

El tudnád magyarázni mit is csináll ez a két sor pontosan?
Köszönöm (nagyon érdekelnek a részletek)
>>
(#) trudnai válasza messer hozzászólására (») Okt 28, 2009 /
 
Idézet:
„#define GOMB_MASK ((GOMB1) | (GOMB2) | (GOMB3))”


definial egy makrot GOMB_MASK neven, ami gyakorlatilag a gombok bitjeit VAGY-olja ossze. Azaz ha GOMB1 0x0100, GOMB2 0x0080 es GOMB3 0x0004 akkor a maszk 0x0184 lesz...

Idézet:
„#define getPort16(p1,p2) ((unsigned)(p1) << 8 + (p2))”


Egy olyan makrot definial getPort16 neven, aminek ket parametere van, p1 es p2. A makro pedig ahogy lathatod 16 bitesen felshifteli a p1-et es hozza adja a p2-t, azaz a ket 8 bites portot ugy fogod latni mintha az egy 16 bites port lenne...
(#) messer válasza trudnai hozzászólására (») Okt 29, 2009 /
 
Értem, és köszönöm
(#) whalaky hozzászólása Nov 2, 2009 /
 
Üdv mindenkinek!

Valakinek sikerült már 18F2550 HID-el hosszabb csomagot küldeni USB-n??
Napok óta küzdök vele, de csak 2 byte megy át.
Se usb_puts se ay usb_put_packet-el nem megy.
Lassan elfogy a hajam... Segítsen valaki!

W
(#) whalaky válasza whalaky hozzászólására (») Nov 2, 2009 /
 
pontosítok, odáig értem el hogy át megy az összes adat, de még mindíg 21 byte-onként....
(#) whalaky válasza whalaky hozzászólására (») Nov 2, 2009 /
 
további fejlemények ami az őrületbe kerget....
  1. strcpy( s, "1234567890\0" );
  2.   usb_puts( 1, s, 11, 5000 );


erre a PC oldalon bejön
0x0 1 2
0x0 4 5
0x0 7 8
0x0 0 0x00

vagyis minden harmadik byte-om elveszik
:boxer:
(#) whalaky válasza whalaky hozzászólására (») Nov 3, 2009 /
 
Akkor mások tanulságára.
hosszas olvasgatás után erre jutottam
  1. #define USB_CONFIG_HID_TX_POLL   25
  2. #define USB_CONFIG_HID_TX_SIZE   8
  3. #define USB_CONFIG_HID_RX_SIZE   8
  4.  
  5. #define  USB_CONFIG_PID       0x0020         //changing this value may make the driver incompatible
  6. #define  USB_CONFIG_VID       0x0461         //changing this value may make the driver incompatible
  7. #define  USB_CONFIG_BUS_POWER 100            //100mA  (range is 0..500)
  8. #define  USB_CONFIG_VERSION   0x0100         //01.00  //range is 00.00 to 99.99
  9.  
  10. #DEFINE USB_HID_DEVICE     FALSE
  11. #define USB_EP1_TX_ENABLE  USB_ENABLE_BULK  //turn on EP1 for IN bulk/interrupt transfers
  12. #define USB_EP1_RX_ENABLE  USB_ENABLE_BULK  //turn on EP1 for OUT bulk/interrupt transfers


így 8 byte-ot megbízhatóan át tudok küldeni, de eddig sajnos többet nem ment. Jó lenne elérni a 16-20 byte os átvitelt, de eddig nem sikerült. Ha a buffer méretet megemelem, vagy el sem indul a PIC, vagy nincs, de ha van is bizonytalan a kommunikáció.
Ha valaki tudja az okosságot ossza meg velem!!
(#) icserny válasza whalaky hozzászólására (») Nov 3, 2009 /
 
Idézet:
„#DEFINE USB_HID_DEVICE FALSE”

Ez így elég érdekesen néz ki! Most akkor HID vagy sem?

Szerintem bölcsebb volna az USB-t C18 alatt művelni. Sokkal több segítség és mintaprogram van hozzá.
(#) trudnai válasza whalaky hozzászólására (») Nov 3, 2009 /
 
Volna egy kerdesem, most low vagy full speedben csinalod? Low speedben a buffer meret eleg kicsi volt ha jol emlekszem -- HID eseteben interrupt transfert hasznal aminel low-speed eseteben a max atviheto byte-ok szama 8, mig full-speed eseteben 64... Ha tobbet akarsz atvinni akkor sajnos szet kell szabdalnod aprobb csomagokra es csomagonkent atvinni...
(#) whalaky válasza trudnai hozzászólására (») Nov 4, 2009 /
 
Szivem szerint full speedben hajtanám, de egyszerüen nem találom a beállitásait. Valami eszméletlen módon meg van variálva a programja, hogy nem igazán tudokmelmenni ratja.
Az ex_usb_scope-ból indultam ki, az elvileg 64byte-os csomagokat tolna, de valamit nagyon nem tudokm eltalálni.
(közben én is észrevettem az USB_HID_DEVICE False dolgot, ki is javitottam de nem mondhatnám hogy látványos változást okozott volna.
(#) potyo válasza whalaky hozzászólására (») Nov 4, 2009 /
 
Mintha a full speedhez valami FSEN nevű bitet kellene a PIC-ben bebillenteni. Én mintha csak ennyit csináltam volna a PS2-USB átalakítónál, és tökéletesen működött (ellentétben a gyári Microsoft billentyűzettel, ami bios-ban meg operációs rendszer alatt működik, viszont a bootmenűnél vagy telepítéskor a "nyomjon meg egy gombot a cd-ről indításhoz" kérdésnél hiába nyomkodtam, nem csinált semmit )
(#) icserny válasza potyo hozzászólására (») Nov 5, 2009 /
 
Idézet:
„Mintha a full speedhez valami FSEN nevű bitet kellene a PIC-ben bebillenteni.”

Pontosan! UCFG<2> bitje az FSEN, UCFG<4> pedig az UPUEN (a belső felhúzás, ami a sebességet jelzi az USB buszon).

Az adatlap arra figyelmeztet, hogy ezeket a biteket az USB engedélyezése előtt kell beállítani. (USBEN az UCON<3>-ban található)
(#) whalaky válasza icserny hozzászólására (») Nov 5, 2009 /
 
  1. #include <18F2550.h>           //Microchip PIC18F2550 hardware layer
  2. #device adc=10
  3. #define __USB_PIC_PERIF__ 1    //Only for PIC18f4550
  4.  
  5. #fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
  6. #use delay(clock=48000000)
  7.  
  8. #define I2C_SCL      PIN_B1
  9. #define I2C_SDA      PIN_B0
  10. #define SERIAL_RX    PIN_C7
  11. #define SERIAL_TX    PIN_C6
  12.  
  13. #use rs232(baud=115200,parity=N,xmit=SERIAL_TX,rcv=SERIAL_RX,bits=8,stream=serial)
  14. #use i2c(Master,Fast,sda=I2C_SDA,scl=I2C_SCL,force_hw)
  15.  
  16. #include <pic18_usb.h>                   //Microchip 18Fxx5x hardware layer for usb.c
  17.  
  18. #define USB_CONFIG_HID_TX_POLL   1
  19. #define USB_CONFIG_HID_TX_SIZE   10
  20. #define USB_CONFIG_HID_RX_SIZE   10
  21.  
  22. #define  USB_CONFIG_PID       0x0020
  23. #define  USB_CONFIG_VID       0x0461
  24. #define  USB_CONFIG_BUS_POWER 100           //100mA  (range is 0..500)
  25. #define  USB_CONFIG_VERSION   0x0100
  26.  
  27. #DEFINE USB_HID_DEVICE     TRUE
  28. #define USB_EP1_TX_ENABLE  USB_ENABLE_BULK  //turn on EP1 for IN bulk/interrupt transfers
  29. #define USB_EP1_RX_ENABLE  USB_ENABLE_BULK  //turn on EP1 for OUT bulk/interrupt transfers
  30.  
  31. #include <usb_desc_hid.h>       //USB Configuration and Device descriptors for this UBS device
  32. #include <usb.c>                //handles usb setup tokens and get descriptor reports


így próbálom, de nem és nem és nem.....
egyszerűen nem megy fullspeed módban
(#) trudnai válasza whalaky hozzászólására (») Nov 5, 2009 /
 
Idézet:
„így próbálom, de nem és nem és nem.....
egyszerűen nem megy fullspeed módban”


Csak en nem latom? Vagy hol allitottad be, hogy full speed?

Jobb lenne ha a teljes forrast csatolnad (file-kant, nem igy beszurva!) azonkivul a kapcs rajz sem artana hatha attol fugg, hogy miert nem megy...
(#) whalaky válasza trudnai hozzászólására (») Nov 5, 2009 /
 
Lehet hogy az én tudatlanságom, de alapban nem fullspeeden kéne hogy menjen? Hol kéne beálítani??? (és főleg hogyan?)

weather_hid.c
    
Következő: »»   29 / 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