Fórum témák

» Több friss téma
Fórum » PIC - USB - PC projekt
 
Témaindító: JohnyBravo, idő: Szept 26, 2006
Lapozás: OK   22 / 55
(#) icserny válasza poznamokus hozzászólására (») Márc 30, 2010 /
 
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:

  1. // Magas prioritású programmegszakítás kiszolgálása
  2. #pragma interrupt hi_isr
  3. void hi_isr(void) {
  4.   .....       //Magas szintű interruptok kiszolgálása
  5.   USBDeviceTasks(); //--- USB programmegszakítás kiszolgálása
  6. }
  7.  
  8. // Alacsony prioritású programmegszakítás kiszolgálása
  9. #pragma interruptlow lo_isr
  10. void lo_isr(void) {
  11.   ...   //Alacsony szintű interruptok kiszolgálása
  12. }

Idézet:
„hogy lehet áthelyezni az IT-ket, hogy a bootloader megmaradjon?”
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.

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.
(#) poznamokus válasza icserny hozzászólására (») Márc 30, 2010 /
 
Köszi, eddig is hasznos volt az oldalod, köszi a segítséget.
(#) potyo válasza poznamokus hozzászólására (») Márc 30, 2010 /
 
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.
(#) mrfencer hozzászólása Ápr 7, 2010 /
 
Ü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!
(#) icserny válasza mrfencer hozzászólására (») Ápr 7, 2010 /
 
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.
(#) mrfencer válasza icserny hozzászólására (») Ápr 7, 2010 /
 
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?
(#) Gory válasza mrfencer hozzászólására (») Ápr 7, 2010 /
 
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.
(#) watt válasza mrfencer hozzászólására (») Ápr 7, 2010 /
 
Erről írok a cikkben, példaprogival: USB HID Demo
(#) mrfencer válasza watt hozzászólására (») Ápr 7, 2010 /
 
Köszi!
Hasznos cikk, örülök hogy született egy ilyen!
(#) icserny válasza mrfencer hozzászólására (») Ápr 7, 2010 /
 
Idézet:
„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?”
Otthon a négy fal között bármit írhatsz. Az mchpcdc.inf állományt azonban vele szinkronban módosítani kell.
--- 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:
  1. // Device serial number string descriptor
  2. ROM struct
  3.   {
  4.     BYTE bLength;
  5.     BYTE bDscType;
  6.     WORD string[5];
  7.   }sd003=
  8. {
  9.   sizeof(sd003),USB_DESCRIPTOR_STRING,
  10.   {'0','0','0','0','1'}
  11. };


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...

usbser.png
    
(#) mrfencer válasza icserny hozzászólására (») Ápr 8, 2010 /
 
Hali!
Hu ez hasznos infó volt amit irtál, le is mentettem txt.be hogy meglegyen Köszi!
(#) bbalazs_ hozzászólása Máj 2, 2010 /
 
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.
(#) potyo válasza bbalazs_ hozzászólására (») Máj 2, 2010 /
 
É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.
(#) bbalazs_ válasza potyo hozzászólására (») Máj 2, 2010 /
 
Ugy ertelmeztem a 2.3 tablazatot, hogy ha a kristaly 20MHz-es, akkor az adott beallitasok mellett az ORAJEL lesz 24MHz-es.
(#) potyo válasza bbalazs_ hozzászólására (») Máj 2, 2010 /
 
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.
(#) bbalazs_ válasza potyo hozzászólására (») Máj 2, 2010 /
 
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
(#) bbalazs_ válasza bbalazs_ hozzászólására (») Máj 3, 2010 /
 
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?
(#) potyo válasza bbalazs_ hozzászólására (») Máj 3, 2010 /
 
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)
(#) bbalazs_ válasza potyo hozzászólására (») Máj 3, 2010 /
 
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....
(#) watt válasza bbalazs_ hozzászólására (») Máj 3, 2010 /
 
Én ezért váltottam HID-re többek között. Próbáld meg te is!
(#) icserny válasza bbalazs_ hozzászólására (») Máj 3, 2010 / 1
 
Idézet:
„Atirtam a megfelelo regisztereket, felhuzast kikapcsoltam”

Hivatalosan az usb_config.h állományban kell piszkálni:
  1. //#define USB_SPEED_OPTION USB_FULL_SPEED
  2. #define USB_SPEED_OPTION USB_LOW_SPEED

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:
„Gondolom, a descriptoroknal is kellene valamit modositani
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...

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.
(#) bbalazs_ válasza icserny hozzászólására (») Máj 3, 2010 /
 
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.
(#) atideath hozzászólása Jún 8, 2010 /
 
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
(#) icserny válasza atideath hozzászólására (») Jún 8, 2010 /
 
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?
(#) poznamokus válasza atideath hozzászólására (») Jún 8, 2010 /
 
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.
(#) atideath hozzászólása Jún 8, 2010 /
 
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
(#) watt válasza atideath hozzászólására (») Jún 9, 2010 /
 
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
(#) icserny válasza watt hozzászólására (») Jún 9, 2010 /
 
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.
(#) BlackStar hozzászólása Jún 9, 2010 /
 
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.
(#) watt válasza BlackStar hozzászólására (») Jún 9, 2010 /
 
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é...
Következő: »»   22 / 55
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