Fórum témák
» Több friss téma |
Fórum » PIC - USB - PC projekt
Majd megnézegetem ezt a CDC-t is, mert a HID-nél az ICD2-vel megállítva a kontrollert, ha nem akartam kommunikálni a cuccal, akkor nem szakadt le. Egy csomó dolgot elintéz a SIE a gép és a kontroller közötti kommunikációban, szoftverből csak arra kell válaszolni, ami nem tartozik a kapcsolat fenntartásához.
Minden frame (vagy minek hívják) 1ms-os, ezekbe a frame-ekbe van csoportosítva a kommunikáció.
Az enumeráció során - én úgy vettem észre, és talán valahol olvastam is utalást ilyesmire - legkésőbb a kérést kiküldő keret utáni második frame során be kellene érkeznie a válasznak a host felé. Ezért volt nekem folyamatos problémám még 115200bps RS232 debug mellett is az enumerációval, ha véletlenül túl sok debug infót küldtem a soros vonalon. Ilyenkor jöttek a váratlan busreset-ek és a felismerhetetlen eszköz. Az enumeráció végén már viszonylagos nyugalom van, csak akkor van adatforgalom, amikor valamelyik fél azt akarja. Az a 6-10ms polling szerintem a Windows HID kezeléséből lehet ismerős, ilyesmi időközönként kérdez rá a pollingozós eszközökre. De ennek szerintem semmi köze nincs a "heartbeat"-hez, amivel a fizikai kapcsolat fennállóságát ellenőrzi a host, és szerintem nem is látunk belőle semmit PIC oldalon, alacsonyabb szinten intézi el a SIE. A HID IN irányú poll egyébként ha nincs számára előkészített adat a bufferben, akkor nem visz el semmit, semmiféle hiba nem keletkezik. Az OUT irányú adatküldés (pl. LED-ek) ha nincs lekezelve rendesen, akkor nem tudom, mit okoz, nem próbáltam még. Egyébként a HID eszköz leírójában meg lehet határozni az operációs rendszer számára a szükséges polling rate-et, azaz lehetne elvileg olyan eszközt is csinálni, amit nem 10, hanem 100ms-onként kérdez le - ezt sem próbáltam még.
Köszönöm mindkettőtöknek a választ!
Én próbáltam 1ms-es pollingot, de a bedetektáláshoz kevés volt, így maradt a 0,17mS. Ez így tökéletesen megy és a 12MIPS bőven elég a többi User rutin kiszolgálásához. Simán megy mellette az USART(RS485 50Kbit/s) megszakítás és reményeim szerint az MMC kártya kezelése is(ezzel még félúton vagyok csak...)
Kicsit hegesztettem ezt a CDC Demot, és úgy néz ki, sikerült összehozni megszakításból. Ha valaki ki akarja próbálni, feltettem a komplett projektet ide.
Ez így nem teljesen programfüggetlen, nem?
Én azt tapasztaltam, hogy ha az USBTask(); nincs megfelelő időközönként hívva, akkor nem lehet elküldeni adatokat. pl. ha egy meghívott rutinban(fő cilusból kilépve, ezzel a pollingot félbehagyva) 10-szer akarom visszaküldeni azt a stringet, amit a PC-ről átküldtem, akkor ebbe a 10-es for cilusba be kell tennem az USBTask();-ot. Én ezt baromi kényelmetlennek és rondának találtam, ezért tettem be egy Timer megszakításba. Innentől bárhol a a programban, kötetlen alkalommal tudok küldeni stringeket. Várakozás is belefér egy küldés után, ha nagyon kell.
Mondasz valamit. Én csak az USB cuccokat raktam át a megszakításba, de a CDCTxService() maradt a főprogramban. Most ezt áttettem a SOF megszakításhoz, így ez is meg van hívva időnként, pontosan 1ms-os időközönként. Ettől gyakrabban úgysincs értelme meghívni, hiszen a Host ennyi időnként fordul a PIC-hez.
Link
Igen, azt hiszem én is így fogom megoldani, ellopom a példádat! Köszi!
Legalább valaki leteszteli alaposan, nem nekem kell szívni vele
Sziasztok!
Összeraktam a PIC-USB -s cikkek alapján a példát. Nagyon jól megy. Írtam hozzás saját progit is. Csak azt szeretném kérni hogy segítsetek nekem átírni a PIC-ben lévő progit úgy hogy legyen benne 4 nyomógom mert 1 sincsen benne, és ne csak 1 ledet vezéreljem hanem 4-et. A nyomógomb szerintem mehet a B0-tól a B3-ig. A ledek pedig D4-től D7-ig. 18F4550-ás PIC-em van. Csatolom a mostani progit ami a PIC-ben van. Pl: Ha 11-et küldök neki akkor felkapcsolaz 1. led ha 10-őt akkor lekapcsol az 1. led ha 21-at akkor felkapcsol a 2. led. A nyomógomboknál pedig ha a PIC küld b11-et akkor 1-es gomb be van nyomva ha b10-át akkor 1-es gomb nincs benyomva. Ákos
Sziasztok!
Picit módosítottam a bootloadert: - a státusz ledet átraktam E0-ra - a BlinkUSBStatus()-t átírtam 1 ledesre - a boot gombot átraktam E1-re - állítgattam a config biteken, nehogy felül legyen írva valami ami kell a bootloadernek Önmagában fut a bootloader, de miután a PDFSUSB.exe-vel töltök rá egy progit, már nem indul el semmi. Se a rátöltött progi, se a bootloader. A két program configja megegyezik, linker script is be van téve. Mellékelem a forrásokat. PIC18F4550-et, MCC18-at és MPLAB v8.02-t használok. A pic a minimális usb-s áramkörben van. Az áramköri hibát kizárnám, mert az órám progija futott rajta. Örülnék, ha valaki megmondaná mit rontottam el. Előre is köszönöm!
Közben kipróbáltam a ledes progit bootloader nélkül, 18f4550.lkr scriptel.
Így működik, de csak kéne az a bootloader...
Csináltam egy nagy updatet: frissítettem az usb frameworkot és a C18-at.
A biztonság kedvéért elmentettem az eredeti fájlokat. Aztán végrehajtottam a már említett módosításokat a config bitek kivételével. A ledes progiban kicseréltem a linker scriptet az újra, configot megjegyzésbe raktam. Most működik. Próbálta már valaki ezt az új frameworkot? Eddig az 1.2-eset használtam, nagyon sokminden változott azóta. A CDC firmwaret nem találtam. Kiszedték volna? Ha nincs com port emuláció, akkor, h fogok kommunikálni a piccel?
A 2.1-ben egyelőre nincs CDC. Helyette használhatod a HID kommunikációt.
Köszi
Remélem később lesz. A HID kommunikációt még meg kell tanulnom.
Szervusztok!
Remélem van még aki látogatja a topicot... A három részes cikk harmadik részében leírt projectet (USB CDC) próbáljuk (hónapok óta...) beüzemelni. Rengeteg problémát megoldottunk már, de most jött egy újabb: A harmadik rész PIC programját raknánj a PICre fel bootloadolással. De újabban valami miatt a bootloader hirtelen nem műxik. Feltöltésnél azt írja ki hogy az USB leírókkal (ez gondolom az USB descriptorok magyar neve) van baj, és ez után a bootloader sem működik, újra kell égetni. Hálásak lennénk bármilyen segítségért.
Szerintem elszallt a bootloader. Probaltad mar ujra beegetni?
Gondolom, azert hasznalod az USB bootloadert mert nincs egetod? En bootloaderre soha nem hagyatkoztam, mert mindegyik elszallt egy ido utan.
Bocsánat, nem voltam elég világos.
A bootloader használatának az az oka, hogy a cikk ezzel javasolja az USB-s kommunikációhoz a program feltöltését. Ha egyből égetném, akkor asszem valamit a konfiguráláson változtatni kéne, ezt első körben el akartuk kerülni. Tehát: bootloader beéget, de bootloadolásnál hibaüzi, és utána már nem is lehet bootload üzemmódba bemenni, hanem a bootloadert kell újraégetni következő kísérlethez. Persze nem ragaszkodunk a cikkben leírt programhoz, ha valaki tudna könnyen alkalmazható programot PIC-USB-PC kommunikációra (PC-re és PICre is...) az szintén jó megoldás lene, most nem az a cél hogy minden részletét kitanuljuk a PICes USB kezelésnek. Egyébként nem hiszem hogy a jelenlegi progival nagy gond lenne, csak valamit nem veszünk észre...
Ismerős a probléma...
Nekem is volt hasonló, a gond az volt, hogy lejárt a C18 próbaideje, a bénított változat meg mésfélszer akkora programot csinált. Próbáld meg újratelepíteni.
A Microchiptől letölthető CDC programba úgy emlékszem, nincs a bootloader belekeverve. Azt meg nem értem, miért van a cikkben javasolva a bootloader, amikor csak bonyolítja a dolgot. A bootloader nem fejlesztéshez való, hanem arra, hogy esetleg később egyszerűen le lehessen cserélni egy már üzemelő készülékben a szoftvert.
Sziasztok!
Van egy furcsa problémám: Adott két egymástól teljesen független 18f4550 Microchip cdc 1.2 firmware-el. Egy idő után részben leszakadnak az usbről. Azért mondom, hogy részben, mert az eszközkezelőben látszanak, viszont nem tudok hozzájuk csatlakozni, az egyik usb status ledje ki is kapcsol (másikon nincs). Az egyetlen közös a 2 kütyüben az, hogy lecseréltem a 470 nF fólia vagy monolit (olyan egyformák, egyik talán biztos, hogy fólia) kondit 470 nF tantálra (valahol olvastam, hogy olyan kell, de csak most sikerült szereznem). Más változás nem történt mostanában az eszközökön, se szoftveres, se hardveres. Ezért gyanakszom a kondikra. A kondik újak. Még nem cseréltem vissza őket, majd csak délután munka után, mérni is csak akkor tudok.
Oda olyan kondenzátor kell, aminek kicsi a soros ellenállása és induktivitása. Tudomásom szerint a tantál kondenzátor nem ilyen, azt inkább a kis méretben viszonylag nagy kapacitása miatt szokták használni. Kerámiakondenzátor jó szokott lenni, illetve a téglatest alakú házban lakók is.
De lehet, hogy a probléma inkább az, hogy hosszú idejű tétlenség után a windows pihenésre küldi az eszközt, és az abból nem éled fel, amikor ismét használni kellene.
Értem, pedig több helyen is olvastam, hogy oda tantál kell. Akkor visszacserélem a régire, azokkal nem volt gond.
Szerintem nem pihennek az eszközök, az egyik egy óra, az folyamatosan mutatja az időt, hőmérsékletet, a másikon meg mindig villogott a statusz led. Persze lehet, hogy alapból pihennének, a firmwareben volt is olyan rész ami aludni küldi a picet, de megjegyzésbe raktam. Köszi szépen a választ!
Nem gondolnám hogy a bootloader bonyolítja a dolgot. Semmivel sem bonyolultabb mnt beégetni bármi mással.
Javasolva azért van, mert ezt a legegyszerűbb beletölteni és kiderül hogy jól működik-e a fordítás a gépüknkön, jó-e a hardver stb, aki most kezdi ezen keresztül ismerkedhet meg az USB-s részével és nem kell egyből PC-s program meg egyebek. (Akinek nincs égetője, ICD2 vagy egyéb annak meg nyilvánvaló hogy miért van javasolva.) totorkb: Ha egyből égeted akkor a linker scriptet kell megváltoztatni csak. Valamelyik részben le van írva ez is, talán még az elején. Esetleg próbáld meg az eszköz kezelőben uninstallálni, aztán kutána újra telepíteni a drivert. Elképzelhető még hogy a fordításnál adódott valami hiba, esetleg a hardver nem tökéletes amivel próbálkoztok. Ha a hardver jó, akkor esetleg egy bootloader hex fájlt feltehetek ide.
Visszaraktam a régi kondikat, több órája mennek gond nélkül az eszközök.
Mégegyszer köszönöm a segítséget!
Van valami szabvány arra, hogy egy USB-s eszköz PC-re telepítésekor, az eszköz nevét hol tároljuk, hogy azt a PC be tudja írni a rendszereszközök közé? Vagy ennek mi a módja? Aki tud erről valamit mutasson rá legyen szíves! Köszönöm!
Microchip frameworknél az eszköz neve a driver .inf fájljában és a firmware usbdsc.c forrásfájljában van.
Csináltam egy 4550-es panelt és a Gory féle leirást követtem az USB részhez. Itt van a gondom hogy nem találom ezt a fájlt C:MCHPFSUSBfwBootMCHPUSB.mcp ok hogy nicsen benne a per jel, de akkor se találom ezt. MPlab 8.1 van illetve leszedtem a MCHPFSUSB v2.3 de itt se nagyon találom. Itt találtam egyedül ilyen nevezetű fájlt c:\Microchip Solutions\USB Device - Bootloaders\Vendor Class - MCHPUSB Bootloader\Bootloader - Firmware for PIC18F4550 Family Devices\ De volt még erre sok Bootloader 18F sorozathoz. Akkor ebben a mappában lévőt használjam vagy egy másikat kell már ennél a verziónál? Köszönöm!
Jó lenne tudni, hogy mit is akarsz valójában?
Az FSUSB demó csomagban van HID és Microchip "generic" bootloader (ez utóbbihoz kell meghajtó is, a HID-et viszont az operációs rendszernek látszó tárgy alapból felismeri). Melyiket akarod használni? Van előrefordított hex fájl és van forrás is. Melyik kell?
Amikor Gory a cikket írta még 1.x-es volt a verziója a frameworknek. Azóta megváltozott kicsit a könyvtárstruktúra.
Amit találtál az az, csak oda lett rakva |
Bejelentkezés
Hirdetés |