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   6 / 55
(#) szilva válasza gyengus hozzászólására (») Feb 6, 2008 /
 
Ha ez így segített a megoldásban, akkor inkább hagyd benne, nem sok helyet foglal az a néhány hívás.

Vagy még annyit megtehetsz, ha van rá lehetőséged, hogy addig, amíg nem történik meg az eszköz felkonfigurálása, addig nem csinálsz időhúzást a saját dolgaiddal. Olyanra gondolok, hogy csinálsz egy ciklust az USB bekapcsolása után, a fő ciklus előtt, ami hívogatja az USBTasks()-ot egészen addig, amíg a felismerés/konfigurálás tart. Eztán kezded el az i2c dolgokat. Van egy usb_device_state belső változó, abban jelzi, hol milyen fázisban tart az enumerációban. UserInit()-be meg szinte semmit nem tenni, hogy ne húzza az időt, mert azt meghívja az InitializeSystem(). Pl. így:


void main(void)
{
InitializeSystem();

while (usb_device_state != CONFIGURED_STATE)
USBTasks();

// ide jönnek az időt húzó iniciáló dolgok

while(1)
{
USBTasks(); // USB Tasks
ProcessIO(); // See user\user.c & .h
}//end while
}//end main

(#) gyengus válasza szilva hozzászólására (») Feb 6, 2008 /
 
Ez jó ötlet lenne, de a későbbiekben szeretném elemről üzemeltetni az áramkört és csak a beállítások idejére kötni USB-re.
De ha beraknék 1 gombot amit nyomva kell tartani csatlakozáskor és attól függően figyelné a konfigurálást, az már jó lenne.
Köszi az ötletet!
(#) potyo válasza gyengus hozzászólására (») Feb 6, 2008 /
 
A Delay szó hányszor szerepel a programodban?
(#) gyengus válasza potyo hozzászólására (») Feb 6, 2008 /
 
Nem raktam bele, de az i2c-s függvényekben láttam.
(#) potyo válasza gyengus hozzászólására (») Feb 6, 2008 /
 
Akkor jó eséllyel megvan a probléma forrása. Túl hosszú időre lefoglalja az I2C rutin a kontrollert, és nem hajtja végre elég gyakran az USBTasks processzt.
(#) Laresz hozzászólása Feb 13, 2008 /
 
Sziasztok!

Az elmúlt percekben regisztráltam e helyen és máris elveszek az információ tengerben
Szeretnék egy áramkört építeni ami USB-n csatlakozik a géphez és 16 kimenetet tetszésszerint lehet programozni rajta. Olyan chip kellene, amelynek van belső eeprom memóriája is, kellőszámú IO portja a célhoz és egyszerűen vezérelhető USB-ről.
A chip kiválasztásához szeretném a segítségeteket kérni nomeg egy olcsó programozó is kellene. Ez a PICKit2 árban meg is felelne, de semmi közelebbit nem tudtam meg róla a chipcad.hu-n. Valamikor régen foglalkoztam már PIC-el (~10éve, 16C84), de azóta akkorát fordult a világ, hogy kezdhetem elölről
Nomeg kéne fejlesztőeszköz is (ASM vagy C).
Köszi előre is a türelmet...
(#) Lucifer válasza Laresz hozzászólására (») Feb 13, 2008 /
 
Programozó: Pickit2 vagy utánépíted vagy megveszed.
USB: 18F*550 ld. Gory cikkei. Fejlesztőeszközt ad a Microchip butítottat ingyen . (MPlab + C18)
(#) watt válasza gyengus hozzászólására (») Feb 15, 2008 /
 
Én is beleszaladtam ebbe a dologba, ami a fő kérdésedben szerepelt. Úgy oldottam meg, hogy csináltam egy Timer0 megszakítást (kb. 6ms(152Hz)) és abba tetem az USBTask(); hívást. Így a fő programban azt csinálok amit akarok.

Persze ez a megoldás csak igen távolról mondható megszakításos USB kezelésnek, mert az USB szempotjából maradt pollingos. Ott még nem tartok, hogy valós USB megszakításos kezelést írjak, de szilva jóvoltából lassan kezd kialakulni a kép!
Tényleg szilva, nincs kedved egy cikket írni! Te lehetnél itt az USB Király! Ha ez nem mozgat, akkor az esetleg igen, hogy sokan szívükbe zárnának! Tudom nagy meló, de nem sürgetlek!
(#) Muri válasza watt hozzászólására (») Feb 15, 2008 /
 
Sziasztok!

Ezzel a PIC-kel én is foglalkozom egy ideje, sikerült is látványos, működő programokat csinálnom. Még semmi komolyat nem csináltam, de a ledvillogtatás már nagyon profin megy... PC oldalon a mpusbapi.dll-t használom. Nekem az okozott nehézséget, hogy nem akartam a CDC firmware-t használni, a dll-hez meg nem találtam példaprogramot. Úgy gondoltam írok róla egy cikket, amit már el is kezdtem.

Az ADC nem akar működni, mindig nullát ad, bármit csinálok. Próbáltam már a Gory féle módszert, a C18-as adc.h-t, meg mindent de a mai napig csak 0-t hajlandó mérni. Beállítom tristate-nek a bemenetet, meg mindent, de nem működik. Mi lehet a baja?

A megszakításos módszernek mik a nehézségei? Így elsőre egyszerűnek tűnik.

Üdv. Muri
(#) watt válasza Muri hozzászólására (») Feb 15, 2008 /
 
A cikk engem is érdekelne, csak rajta!

Az ADC-vel biztosan valami beállítási eltérés lesz, mert annak működnie kell. Nem sokat írtál róla, hogy érdemben lehessen mit mondani, de javaslom, hogy a részleteket a PIC Miértek... topicban tedd fel, hamar megoldódik, ha ilyen jellegű a probléma, csak adj valami támponot(programrészletet, vagy egész forrást)

A megszakításos módszernek nincsenek nehézségei, ha át tudod tekinteni a program működését.
(#) szilva válasza watt hozzászólására (») Feb 15, 2008 /
 
Csak arról tudok írni, amit már kiszenvedtem és emiatt meg is tanultam. Ez nem igazán baj, elég, ha a tanár csak kicsit jár előbb az anyagban, mint a tanítványok Amit megírtam Neked levélben, ha nincs ellenedre, azokat a szövegeket kicsit kipofozva gondoltam cikkbe, vagy inkább cikksorozatba önteni.

A/D meg kell, hogy műkdjön. Nekem most egy lukacsos próbapanelen van egy igen érdekes szerzetem összerakva a tanuláshoz: Van rajta egy 18F2550 (most épp 18F2455, próbából), PICkit2 programozó tüskesor, RS232 illesztés egy DB9 mamával, meg az USB csatlakozó. Ezen kívül reset gomb, két "tact" nyomógomb, 1 hall-os nyomógomb, egy 4k7 poti bekötve az egyik analóg lábra, valamint 6 LED, ellenőrzésnek. A PICkit2 csatit most nem használom, inkább beletettem az RS232 bootloaderemet a PIC-be, így a terminálból le tudom küldeni az új hex-et neki, ha kell.

Az USB-vel most ott tartok, hogy ez a panel joypad-ként funkcionál PC-re kötve, az USB kommunikáció során a debug infókat RS232-n küldi egy terminálba. A "joypad"-em x eltérése a poti által szabályozható, az y a két "tact"-tal, a hall-os nyomógomb meg az első sorszámú tűzgomb. Reggel játszottunk vele Insane-t
(#) gyengus válasza watt hozzászólására (») Feb 15, 2008 /
 
Köszi a tippet!
(#) watt válasza szilva hozzászólására (») Feb 15, 2008 /
 
Már hogy lenne ellenemre! Nagyon örülnék neki! Esetleg ha kicsit fetuningolnád néhány példával, tálázatokkal, az nagyon segítene a megértésben.
Közben sokat olvasok, kódot böngészek, és úgy érzem ragadt rám valami, főképp neked köszönhetően!

Az nem érdekes szerintem, hogy ha nem öleli át a teljes USB anyagot(gondolok itt a high speed-re meg néhány spéci módra), sokkal fontosabb, hogy egy részét jól meg lehessen érteni. a többi ebből kiindulva már sokkal egyszerűbb!

Kicsit irigyellek a jelenlegi USB pozíciód miatt!





(#) potyo válasza szilva hozzászólására (») Feb 15, 2008 /
 
Azt a levelet megkaphatom én is? Címem a profilomban található. Kösz
(#) Muri hozzászólása Feb 15, 2008 /
 
Úgy látom le vagyok maradva...

ADC-nek működni kell, de nem teszi... Az eredeti demót nézegetve sikerült kicsikarni belőle, hogy kiírjon valamit, csak összevissza ugrál 512 és 572 között.

Mint írtam, szeretnék egy cikket írni a dll használatáról, de csak most kezdtem, ezért nem tartok sehol. Megosztottam veletek a szerk. jogát, nézzétek meg azt a 10 sort, meg a programot töltsétek le.

Jó lenne belesűríteni mindent egy cikkbe. Egyébként a neten sok leírás van, sajnos csak angolul. Egyedül Gory leírása magyar.

Muri
(#) szilva válasza Muri hozzászólására (») Feb 15, 2008 /
 
Itt vannak a 18F2455 kódjában az A/D-kre vonatkozó részek. Az első valahol a main elején van, ahol a portokat is inicializálom:

  1. ; set up A/D module
  2.         movlw   B'00001011'             ; AN0-AN3 are analog inputs
  3.         movwf   ADCON1
  4.         movlw   B'00000001'             ; A/D on, select AN0
  5.         movwf   ADCON0
  6.         movlw   B'00111111'             ; Left, 20Tad, Frc
  7.         movwf   ADCON2


A második részlet, ahol mérem az AN0-ra kötött potit:

  1. ; read pot
  2.         movlw   B'00000001'             ; A/D on, select AN0
  3.         movwf   ADCON0
  4.         bsf             ADCON0,GO
  5. wad
  6.         btfsc   ADCON0,DONE
  7.         bra             wad
  8.  
  9.         movf    ADRESH,w


Semmi más trükközés nincs az A/D-vel kapcsolatban.
(#) potyo válasza szilva hozzászólására (») Feb 16, 2008 /
 
A kód jónak néz ki, viszont a TABLE 21-1 alatti megjegyzéseknél azt írja, hogy ha az RC oszcillátort használod az ADC órajelének, akkor a konverzió idejére sleep-be kellene tenni a kontrollert. Szerintem használd inkább a főoszcillátorról származó jelet órajelnek, hátha ér valamit.
(#) szilva válasza potyo hozzászólására (») Feb 16, 2008 /
 
Valóban, igazad van, emlékeztem rá, hogy korábban olvastam ilyen furcsaságokat az A/D-jéről, de itt nem nagyon figyeltem rá. Egyébként mintának azért tettem be, mert ez így, ennyi beállítással nálam működik, felső 8 bitet használom csak.

Megjegyzem, azt a note-ot nem értem: az A/D RC időalapja elvileg pont azért van, hogy CPU órajeltől független időzítéssel dolgozzon az A/D. Hogy ennek mi köze a sleep-hez és a CPU egyébkénti működéséhez, az számomra rejtély. Lehet, hogy csupán a "digitális zaj" miatt írta oda a gyártó, hogy az ilyen "lassú" konverzióba már akár a CPU által keltett egyéb zajok is beleszólhatnak?
(#) potyo válasza szilva hozzászólására (») Feb 16, 2008 /
 
Ja, most nézem, hogy nemis nálad nem működik az ADC, hanem Muri-nál
(#) watt válasza szilva hozzászólására (») Feb 16, 2008 /
 
Ez a "digitális zajok beleszólnak" jó gondolat! Az okokról nem sokat beszél az adatlap, ezt lassan meg kell szokni az MC-nél.
Én is a fő oszcit szoktam AD-re használni. De ha működött a fenti kód nálad, akkor lehet, hogy csak az alsó bájton lehetett volna bizonytalanságot tapasztalni.
Egyébként a kódodban várakozás van, amit nyugodtan le lehet cserélni sleepre. Persze van olyan program, amiben ezt a luxust nem nagyon lehet megengedni...
(ugye mondtam, hogy a témát szétoffoljuk, ha nem kerül át a PIC Miértekbe!! )
(#) Muri válasza szilva hozzászólására (») Feb 20, 2008 /
 
Köszönöm a gyors válaszokat! Én is valahogy így próbáltam, és kiderült hogy a PIC rész jó, csak a PC szoftver nem jó bájtot figyelt. Most sem működik teljesen, majd rászánok pár órát.
Szilva, ha jól értem az egészet megírtad assemblyben???
(#) szilva válasza Muri hozzászólására (») Feb 21, 2008 /
 
Hát, gyakorlatilag igen. Az USB kommunikáció váza megvan, HID eszközt csináltam vele próbából. Persze még foglalkozni kellene vele, de úgy gondolom, fogok írni az USB-nek erről az alacsonyabb szintű megközelítéséről egy cikket vagy inkább cikksorozatot.
(#) potyo válasza szilva hozzászólására (») Feb 21, 2008 /
 
Hát igen, az USB az nem egy cikk. Az sok cikk

Megszakításból kezeled az usb kéréseket, vagy polling módszerrel?
(#) szilva válasza potyo hozzászólására (») Feb 21, 2008 /
 
Még polling, de a kód elvileg elő van készítve a teljesen interruptos módszerre is.

Gyakorlatilag a GIE-t kellene bebillenteni és az interrupt-kezelőből azt a rutint meghívni, amit most a pollozás hív meg rendszeresen.

Jelenleg egy próbapanelen rakom össze a kísérleti környezetet, amiben lesz 3x4 Hall-os nyomógomb, vízszintes és függőleges tolópotik, 4 tekerős poti és 3 LED. Ezen mindenféle joy- és klaviatúrás dolgot ki lehet majd próbálni. Épp most készült el a nyomógombok mátrixba kötése és a tesztprogival lekérdezése, de ez még csak a LED-eken jelez vissza, nincs kész az RS232 csatlakozás (debug) és még az USB csati környéke sincs kialakítva.
(#) watt válasza szilva hozzászólására (») Feb 21, 2008 /
 
Idézet:
„Gyakorlatilag a GIE-t kellene bebillenteni és az interrupt-kezelőből azt a rutint meghívni, amit most a pollozás hív meg rendszeresen.”


A gyári CDC firmware-nél is ezt hittem, aztán valahogy nem ment. Ezért tettem a fő hívást aztán egy Timer hurokba. Ez ettől még polling maradt, de végül is megszakítsában van kezelve, mert nem maradhat el a rendelkezésre állás.

A cikkhez sok sikert, alig várom!
(#) potyo válasza watt hozzászólására (») Feb 21, 2008 /
 
Az a baj a C-ben írt gyári firmware megszakításból történő kezelésével, hogy további függvényeket hívogat az USB_DriverService() rutinból, ami miatt a fordító a megszakításnál szinte az összes regisztert elmenti, majd a megszakítás végén visszatölti ezeket. Ez jelentős mennyiségű processzoridőt emészt fel. Az egészet át kell írni úgy, hogy ne hívogasson további függvényeket a megszakítási rutinból, hanem az összes elvégezni való munka egy függvényben legyen. Természetesen első körben mehet a dolog függvényekkel is, de hamár úgyis azért csináljuk a megszakításból, mert a főprogramunk lassú, akkor ezzel sokat lehet nyerni a főprogram számára.

Ez egyébként nem csak az usb-re érvényes, hanem az összes C programra. Van is erről egy webinar anyag a microchip honlapján: Link
(#) watt válasza potyo hozzászólására (») Feb 21, 2008 /
 
Köszi az infót, meglesem!
(#) watt hozzászólása Márc 1, 2008 /
 
Szerintetek milyen időközönként kell lepollingozni az USB portot, hogy a bedetektálás és a folyamatos készenlét meglegyen?
(#) potyo válasza watt hozzászólására (») Márc 2, 2008 /
 
Hogy a bedetektálás meglegyen, azt jobb megcsinálni egy kis ciklusban. De azután hogy mennyi időnként kell, az már jó kérdés. Pl. a ps2-usb átalakítóm a felismerés befejezése után nem igényli, hogy folyamatosan hívogassa a rutinokat. Csak akkor hív meg egy-egy rutint, ha a gép új adatot küld neki (konkrétan a ledek állapotát), vagy az emulált billentyűzet küld a gép felé valamit. Ezt onnan tudom, hogy amikor meghívódik a rutin, akkor - ha az UIR regiszter nem nulla - akkor az UIR tartalmát kiíratom egy LCD-re. Felcsatlakozáskor teleírja az LCD-t, de utána ha csak úgy áll a gép, akkor az lcd tartalma nem változik fél nap után sem.
(#) watt válasza potyo hozzászólására (») Márc 3, 2008 /
 
De a Host pollingolására kell valamit válaszolni, nem?
Egyébént leszakadna a PC-ről egyből! ??

Most, hogy jól menjen a detektálás kb. 5KHz-es megszakítás kell. Holott valami 6-10ms-re emlékszem, ami a host felőli lekéréseket illeti. Ezek szerint a detektálás nem tartja be a host polling közöket?

Kipróbálom, hogy a detektálás után kevesebbszer pollingolok. Köszi!
Következő: »»   6 / 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