Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
Ezt a linket kovetve Bővebben: a Step Four_nal " Add any axisting files to your project " hianyzik az EXAMPLE konyvtar !
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.
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.
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?
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:
Nyomógombnál ne felejtsd el a pergésmentesítést!
A baj csak az, hogy a gombok helye fix és nem egy porton vannak így nincs valami megoldás a switch case-re?
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.
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.
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.
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.
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:
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:
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...
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?)
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.
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:
"
#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) >> 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...
Ü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
pontosítok, odáig értem el hogy át megy az összes adat, de még mindíg 21 byte-onként....
további fejlemények ami az őrületbe kerget....
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:
Akkor mások tanulságára.
hosszas olvasgatás után erre jutottam
í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!! 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á.
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...
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.
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 )
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ó)
így próbálom, de nem és nem és nem..... egyszerűen nem megy fullspeed módban 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...
Lehet hogy az én tudatlanságom, de alapban nem fullspeeden kéne hogy menjen? Hol kéne beálítani??? (és főleg hogyan?)
|
Bejelentkezés
Hirdetés |