Fórum témák
» Több friss téma |
Fórum » PIC - USB - PC projekt
Idézet: „C-ben hogy kell interruptot megadni?” Pragma direktívával. A PIC18 mikrovezérlők kétszintű interrupttal rendelkeznek, tehát két kiszolgáló eljárást kell definiálni. Például így:
Idézet: A linker scriptet kell átszabni, hogy a bootloader területére ne rakjon semmit, s a bootloader utáni terület kötött címeire el kell helyezni a RESET és az IT vektorokat.„hogy lehet áthelyezni az IT-ket, hogy a bootloader megmaradjon?” Ha elolvasod a PICCOLO projekt honlapján "A kísérleti áramkör" és "Az USB használata" című fejezeteket, valamint megnézed a PIC18 támogatói programkönyvtárat (Szoftver segédlet menüpont), akkor meglátod, hogy én hogy csinálom.
Köszi, eddig is hasznos volt az oldalod, köszi a segítséget.
További C kérdésekkel szerintem inkább menjünk át ebbe a témába: Link, ebben a témában maradjunk az USB-s dolgoknál.
Üdv!
Én is megtaláltam pár napja ezt a PICCOLO projectes honlapot, és nagyon sokat tanultam belőlle. Viszont lenne egy kérdésem. Hogy tudom, azt megvalósitani, hogy mondjuk egy USB hub-ra rákotök négy ilyen PIC-es eszközt, akkor a PC oldal tudja azt, hogy a 4 közül melyik eszközről érkezett az üzenet? Illetve melyik eszköznek üzenek? Mondjuk valamiféle címet tudok adni nekik? Köszi!
Eddig megtartóztattam magam attól, hogy ilyenekbe beleártsam magam, mindenesetre az eszközöket a VID/PID páros azonosítja (Gyártó és termék azonosítók, ami esetünkben 0x4D8 és 0x00A).
Ezen kívül az azonos termékeknek elvileg lehet egyedi sorszáma, ami megkülönbözteti az azonos gyártó azonos termékeit (pl. két pendrive, vagy két PICkit2 csatlakoztatása esetén). Ezt az opciót kellene valahogy használatba venni! Az usb_descriptor.c tartalmazza ezeket az adatokat.
Köszi a gyors választ. Még egy kérdés ha fejlesztek egy saját eszközöket, akkor azoknak tudok adni saját címet/elnevezést is vagy csak a gyártók azaonosítóit tudom használni ebben az usb_descriptor.c ben?
Tudsz neki adni, a string descriptorjait átírod. Egyébként a gépedben levő Host külön címeket ad nekik, szóval abból elvileg tudni kéne melyik üzenet honnan érkezett.
Erről írok a cikkben, példaprogival: USB HID Demo
Köszi!
Hasznos cikk, örülök hogy született egy ilyen! Idézet: Otthon a négy fal között bármit írhatsz. Az mchpcdc.inf állományt azonban vele szinkronban módosítani kell.„Még egy kérdés ha fejlesztek egy saját eszközöket, akkor azoknak tudok adni saját címet/elnevezést is vagy csak a gyártók azaonosítóit tudom használni ebben az usb_descriptor.c ben?” --- Ha terméket gyártasz valakinek --------------------- A VID számot ugyanúgy hivatalosan kell beszerezni, mint pl. a domain nevet. Könnyítés, hogy kis példányszámú termékhez a gyártó VID-jét is lehet használni, ha kitöltöd a megfelelő kérelmet, és a Microchip kioszt egy PID-et. Bővebben: Link ----------------------------------------------------------------- A korábban említett "sorozatszám" (valójában string) pedig segít az azonos eszközök megkülönböztetésében. Most ezzel játszadoztam: Most próbaként ezt módosítottam az usb_descriptor.c fájlban: 0x03, // Device serial number string index Ezt beírtam az sd002 "Product string descriptor" után:
Bővítettem a string mutatókat tartalmazó táblát is: //Array of string descriptors ROM BYTE *ROM USB_SD_Ptr[USB_NUM_STRING_DESCRIPTORS]= { (ROM BYTE *ROM)&sd000, (ROM BYTE *ROM)&sd001, (ROM BYTE *ROM)&sd002, (ROM BYTE *ROM)&sd003 }; Utóbbi miatt az usb_config.h állományba is bele kell piszkálni: #define USB_NUM_STRING_DESCRIPTORS 4 Ezután lefordítható valamelyik alkalmazás (pl. a cdc-demo.c a PICCOLO USB mintaprogramok közül). Első csatlakoztatáskor "új eszköz"-t sivalkodik a Windows, újra be kell etetni a mchpcdc.inf állományt (de nem kell módosítani). A csatolt képen látható, hogy az eszköz COM18 néven nyitható meg, s a VID/PID mellett megjelenik a 00001 sorozatszám is. Egy másik eszközt más sorozatszámmal láttam el, s az COM19 néven csatlakozott (megint kellett az .inf állomány). Ezután a CDCTerminal.exe programmal szlalomozva (hol a COM18, hol a COM19 porthoz csatlakoztam) vezéreltem két kártyát. Okosabb programok természetesen több portot is megnyithatnak egyszerre...
Hali!
Hu ez hasznos infó volt amit irtál, le is mentettem txt.be hogy meglegyen Köszi!
Sziasztok!
Az lenne a gondom, hogy low speed USB-t szeretnek hasznalni PIC 18F4553-as PIC-en, microchipes PC driverrel (mchpcdc). Nagyjabol 4Kbyte/sec - es adatfolyamom van, szinkronitas nem fontos. A full speed rendesen fut, de valtozo idonkent - kb 20p-4 ora - kiakad (a PC oldal nem olvas tobb adatot, a PIC nem tud kuldeni). A kiakadas az USB kabel hosszaval egyenes aranyban novekszik, rendes arnyekolt kabel (a leghosszabb kabel sincs 5m, de kb ekkora kellene). Arra gondoltam, hogy a sebessegen kellene csokkenteni. Atirtam a megfelelo regisztereket, felhuzast kikapcsoltam, flagek rendes 6MHz-et allitanak be (a rendszer 20MHz-es kristalyrol jar). Ismeretlen USB eszkozzel akad ki a PC oldal. Gondolom, a descriptoroknal is kellene valamit modositani, de itt elakadtam. Tudna-e valaki segiteni? Jo-e az eredeti elkepzeles egyaltalan? Hozzaerto valaszotokat elore is koszonom.
Én úgy nézem az adatlapból, hogy Low Speed USB-hez mindenféleképpen 24MHz-es kvarc vagy külső órajel kell, semmi más módon nem lehet előállítani neki a 6MHz-es belső órajelet.
Ugy ertelmeztem a 2.3 tablazatot, hogy ha a kristaly 20MHz-es, akkor az adott beallitasok mellett az ORAJEL lesz 24MHz-es.
Igazad van, rosszul olvastam. Nem az órajelforrásnak kell 24MHz-nek lennie, hanem a kontrollernek kell 24MHz-en járnia. Mutasd meg a konfig bitjeidet, mert én úgy emlékszem, hogy elég csak az FSEN bitet átváltani a Low Speed-Full Speed váltáshoz az órajelképzés beállításán kívül.
Koszonom, hogy segiteni probalsz. Akkor tehat a descriptorokban nem kell modositani?
Az eredetiben 0x14 volt, vagyis FSEN, UPUEN bekapcsolva. En ugy modositottam, hogy FSEN=0, de kiprobaltam UPUEN mindkettot - ha nincs felhuzva, akkor mintha ott sem lenne, vagyis nem jelez hibat, de a port sem el (az eszkozkezeloben nem jelenik meg es drivert sem akar telepiteni, hiaba dugom masik portba
Azota uj fejlemeny: egy masik osztason vegul sikerult felismernie com3-nak. (low speed, pullup on)
Viszont a PC programom most meg hamarabb leakad, kb 64 byte atvitele utan... Van-e valami jo (es ingyenes) USB monitorozo progi, ami meg tudna mondani, hogy hol keressem a hibat?
Azthiszem valami USBlyzer nevűt használtam régebben, de én azzal csak a descriptorokat néztem, hogy miket olvasott a gép.
Ilyenkor eltűnik az eszközkezelőből is a készüléked? Kábel biztosan árnyékolt? (Vettem már USB 2.0 kábelt, ami a szabvány szerint muszáj, hogy árnyékolt legyen, aztán benéztem a szigetelése alá, és nem volt az)
Most egy kb 1m-eset hasznalok, gyari, arnyekolt.
Nem tunik el, csak az olvasas fagy le, pedig szabalyos soros rendszerrutinnal olvasom. De erdekes, hogy teljes sebessegen sokkal tobbet megy ugyanez a hardverkonfiguracio. Most egy uj portra is ratettem, ami meg csak 1.1-es, descriptorban atirtam 0x110-ra, drivert feltettem, az eredmeny ugyanaz....
Én ezért váltottam HID-re többek között. Próbáld meg te is!
Idézet: „Atirtam a megfelelo regisztereket, felhuzast kikapcsoltam” Hivatalosan az usb_config.h állományban kell piszkálni:
Végeredményben ennek kellene az FSEN=0 beállítást kiváltania (a felhúzás természetesen most is kell). Idézet: Nem kell, mert a LOW/FULL sebesség jelzése hardveresen történik, a D- vagy D+ vonalfelhúzásával. Amikor a descriptorok olvasása történik, akkor már a host-nak rég tudnia kell, hogy milyen sebességgel történik az adatátvitel... „Gondolom, a descriptoroknal is kellene valamit modositani ” A leakadás oka lehet pl. a host és a PIC D+/D- vonalain túl nagy a soros ellenállás (pl. rossz minőségű kábel, vagy fölöslegesen berakott soros ellenállás). Nagyobb távolság esetén aktív eszközt (HUB) kell beiktatni. Lehet időzítési probléma is. Ugye, a PIC interruptosan végzi az USBDeviceTasks() hívását? Ugye, a felhasználói programban nincs adattorlódás? Elegendő gyakorisággal történik-e a ProcessIO (és benne a CDCTxService() eljárás) hívogatása? Nincs-e több kiírási művelet EGY ProcessIO-t hívó cikluson belül? Nekem az a gyanús, hogy az egyik beírásod szerint rövid kábellel is előfordul leakadás. Ilyennek szerintem nem volna szabad előfordulnia.
Koszonom szepen, vegulis a kerdeseimre valaszt kaptam, a tobbi majd ugyis kiderul a hosszu tesztekben.
Szegyellem bevallani, de az orajel-beallitast en toltam el, ugyanis rosszul irtam meg a programozo software-t, pontosabban ugy voltam vele, hogy azokat ugysem fogom hasznalni... feluletes munka, megbosszulta magat... Vegulis behoztam a ceghez es egy 4m-es kabel plusz egy masfeles hosszabbito utan is jol megy EGYELORE. A rosseb tudja, mi lehet a baja, de itt bent siman felismerte tok ugyanazt a hardvert... Ez a rejtelyes titok miszteriuma lesz Watt: koszonom, ha ezzel nem jutok dulore, akkor elmegyek abba az iranyba.
Halihó.
Esetleg nem lenne olyan illető aki tudna nekem PIC18F4550 életre keltésében segíteni? Már kb 10x-r égettem bele bootloadert mégsem bírom a rendszerrel életre kelteni. Mindig Unknown Device-ként látja a rendszer és nem akarja a drivert felrakni hozzá. Már próbáltam mindenhogy. Esetleg valaki Miskolc környéki és tudna segíteni az indulásba azt megköszönném! Ezer hála.. Emailben vagy itt is jó ha szól
1. Elektronikusan rendben van a kapcsolás? (kapcsolási rajz, fénykép)
2. Milyen bootloadert égettél bele? 3. Nem lehetséges, hogy a Windowst kellene kitakarítani?
Hát nekem pl hasonló gond volt, kezdetben nem HID bootloaderrel kísérleteztem, és sosem működött. Átváltottam a HID-re, azóta tökély a dolog.
Már próbáltam több féle bootloader-rel is. Nos elmondanám hogy mit szeretnék csinálni és hátha tud adni nekem valaki egy normális kapcsolást hozzá meg egy HEX filet. Hőmérségletet szeretnék mérni, nyomógombot kezelni, és relével kapcsolni 12V-ot. Valaki eltudja küldeni a számára flottul működő kapcsolási rajzot és ha van paneltervet? Már kb az 5-diket építettem meg. Mindig a Vendor és a PID 0000.
Lövésem sincs mi lehet.. :S
A "normális" kapcsolás az adatlapban van. Gondolok itt a Vusb kondira(ami szerintem inkább 470n, mint 100!), a 20MHz-es kvarcra, két 15p-s kondival, valamint az USB csatlakozó helyes bekötésére(Az MCLR-t és az LVP bitet én letiltanám a próbákra, utána attól függ, hogy kell-e!).
A bootloader működéséhez a többi alaktrész csak sallang. Tehát javaslom a lényegre koncentrálj, a többit majd utána... Érdemes a gyári megoldásokat haszálni. Például ez a doksi is sokat elmond a bootloader használatáról és még rajz is van... Bővebben: Link Itt is érdemes olvasgatni: Bővebben: Link Illetve itt is: Bővebben: Link
Ehhez még annyit tennék hozzá, hogy mindkét VDD és VSS láb legyen bekötve és mindkét VDD és VSS közé tegyél egy-egy 100 nF-os kerámia kondenzátort.
A PICCOLO projektem honlapján is találsz PIC18F4550-hez egy mintaáramkört. Én HID bootloadert használok, a "gyárihoz" képest csak annyit változtattam, hogy néhány konfigurációs bitet átállítottam (pl. Brown-out Reset engedélyezése, WDT timeout lerövídítése). A "nyomtatott áramköröm" ilyen.
Sziasztok!
Szeretném a segítségeteket kérni. Bootloader segítségével szeretném a PIC programját feltölteni. (18F2458). A problémám, hogy milyen linker scriptet kell használni a 18F2458 PIC-hez. A bootloadert beprogramoztam a PIC-be. A Windows felismeri a hardvert. A módosított linkert nem találtam a 18F2458 PIC-hez. Most csak annyi kellene, hogy USB-n lehessen beprogramozni a PIC programját a bootloader segítségével. Előre is köszönöm.
Az előző hozzászólásomban a második link arró is szól, hogy miként kell átalakítani az állományt bootloaderrel feltölthetővé...
|
Bejelentkezés
Hirdetés |