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   32 / 55
(#) icserny válasza mps hozzászólására (») Dec 18, 2010 /
 
1. Próbáld meg kitalálni, hogy miért kellett a 25 ms késleltetés.
2. Olvasgast tovább a honlapomon leírtakat a státuszgépek logikájának megértéséhez.
(#) mps válasza icserny hozzászólására (») Dec 18, 2010 /
 
A késleltetésre az első gondolatom a prell volt, aztán az oldalad olvasgatva ott is ezt láttam. Ez az állapotgépes dolgot viszont nem igazán értem, kutakodtam is egy kicsit, de nem igazán lettem okosabb. Viszont van mivel foglalkoznom Köszi!
(#) icserny válasza mps hozzászólására (») Dec 19, 2010 /
 
Idézet:
„A késleltetésre az első gondolatom a prell volt”
Igen, azért kell, hogy csak bizonyos időnként nézzünk rá a kapcsolóra.

Az állapotgép programozástechnikailag annyi, hogy van egy változónk (pl. status), ami az aktuális állapotot jelzi, s a végtelen ciklusban rendszeresen lefuttatott programrészben egy switch(status) utasítás mindig azt az ágat futtatja, ami az aktuális állapothoz tartozik. Bizonyos feltételek esetén megváltoztatjuk a status változó értékét, s következő ciklusban már egy másik ág fog végrehajtódni.

Az I/O portok c. fejezetben van néhány mintapélda ilyenekre.
(#) mps válasza icserny hozzászólására (») Dec 19, 2010 /
 
És már megint csak azt kell írnom, hogy köszi szépen, ez így már világos, és lényegesen egyszerűbb az egész mint eddig elképzeltem Azt hiszem szeretni fogom
Köszi még egyszer!
(#) watt válasza icserny hozzászólására (») Dec 19, 2010 /
 
Sokáig nem tudtam én sem, mi az az állapotgép, és csak később jöttem rá, hogy az első programom így működik. Ezek a fogalmak, csak a profik között ismertek, én meg még ma is csak amatőr vagyok!
(#) Norberto válasza watt hozzászólására (») Dec 19, 2010 /
 
Á, ez inkább csupán szerencse kérdése, hogy találkozik-e éppen ezzel a kifejezéssel az ember valahol vagy sem.

Én pl. már ismerem a kifejezést néhány éve, mégis csak kezdő szinten vagyok PIC-ben.

Szóval ezért gondolom én inkább szerencsének.
(#) mps hozzászólása Dec 21, 2010 /
 
Sziasztok! Újra bajom van, az alapokkal. Megpróbáltam egy új projektet létre hozni, ám nem fordul egy sima üres ciklussal próbálom egyenlőre. A mellékelt képen a hibaüzenet. Pedig ott a fájl. Köszönöm előre is!

hiba.jpg
    
(#) sirály12 válasza mps hozzászólására (») Dec 21, 2010 /
 
Jól látom, hogy az egy felkiáltójel az elérési útban? Ha jól látom, az baj.
(#) mps válasza sirály12 hozzászólására (») Dec 21, 2010 /
 
Jól látod, így teszem előre, lustaság, ööö praktikusság Kivettem, semmi változás.
(#) icserny válasza mps hozzászólására (») Dec 21, 2010 /
 
Be kell állítani a projektben az elérési útvonalakat!
Az Include fájlokhoz a PICCOLO projekt include, Microchip/include és Microchip/include/USB mappájainak, valamint az MCC18 fordító h mappájának az elérési útvonalát kell felsorolni.

Az kapásból látszik, hogy rossz könyvtárszerkezettel indultál. A PICCOLO projekt mappájában nyiss egy új projektkönyvtárat, s akkor használhatod a példaprogramok mntájára a ../include, ../Microchip/include stb. relatív elérési útvonalakat. ( "/" helyett természetesen backslash kell, csak azt a fórummotor nem szereti...)

Én egyébként így hozok létre új projekteket (lustaság = félegészség!):
  1. copy regi.mcp uj.mcp
  2. copy regi.c uj.c

Utána Notepad editorral a regi.c nevet új.c-re változtatom az uj.mcp állományban. Nehéz volna ennél egyszerűbb módszert találni.
(#) mps válasza icserny hozzászólására (») Dec 21, 2010 /
 
Köszönöm, este kipróbálgatom, most dolgozni kell.
(#) icserny hozzászólása Jan 31, 2011 /
 
A Microchip Application Library-ban közzétett USB Device - Serial Emulator példaprogramban nincs kidolgozva a valódi hardveres adatfolyam-vezérlés. Ha az usb_config.h állományban aktiváljuk (azaz kivesszük a kommentből) az alábbi sorokat
  1. #define USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL
  2. #define USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D1

akkor csak az RTS és a DTR vonalak programmal történő beállítására van lehetőség a Set_Control_Line_State függvényen (usb_function_cdc.c) keresztül.

A gyári demóban azonban ez sem működik, mivel az RTS és DTR vonalak TRIS bitjeit csak definiálták, de sehol sem állítják be! Ezért a main.c InitializeUSART(void) nevű függvényében a C18-ra vonatkozó ágba be kell iktatni az alábbi sorokat:

  1. #if defined(USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL)
  2.             #if defined(UART_TRISDTR)
  3.                 UART_TRISRTS = 0;
  4.             #endif
  5.             #if defined(UART_TRISDTR)
  6.                 UART_TRISDTR = 0;
  7.             #endif
  8.         #endif


Így már működni fog!

Egy lehetséges alkalmazás: az általam használt PIC24 gyakorlópanelon egy PIC18F14K50 USB-UART konverter biztosítja a kommunikációt, és a programok letöltését (a PIC24-ben bootloader van, ami RESET után 1-2 másodpercig aktív). A PIC18 RTS vonalával összekötve a PIC24 MCLR lábát, a resetelés és a bootloader aktiválása automatizálható, ahhoz hasonlóan, ahogy az Arduino kártyáknál csinálják.

Most azon dolgozom, hogy az RTS kimenet vezérlése aktív lehúzás és tri-state állapotok között váltogasson (aktív felhúzásra nincs szükség, s az a RESET gombbal párhozamosan roppant egészségtelen is volna...).
(#) Pepebá hozzászólása Feb 18, 2011 /
 
Hali!
Segítsen ki valaki.
VB6-ban hogyan kell Hex-t -> Dec-re átalakítani?
(PIC18F4550 beolvasott analog port adatot akarom VB-ben használni)
Köszi.Üdv.
(#) watt válasza Pepebá hozzászólására (») Feb 18, 2011 /
 
Mitől lenne a beolvasott adat Hex? Átalakítod elküldés előtt karakterkóddá a mért értékeket(ha igen, akkor ez felesleges)? USB-n küldöd át az adatokat a PC-nek? Melyik protokolt használod (CDC, HID) ?
(#) icserny válasza Pepebá hozzászólására (») Feb 18, 2011 /
 
Gondolom, ugyanúgy, ahogy más nyelven is. Meg kell szorozni a referencia feszültséggel (alapesetben eza tápfeszültség),majd el kell osztani 1023-mal (mert a 0x3FF érték képviseli a referenciával azonos bemenőfeszültséget).

V = adc * Vref / 1023

Ha Vref V-ban van megadva, akkor az eredmény is abban lesz. Ha mV-ban adod meg, akkor az eredmény is mV-ban értendő. Ez utóbbi esetben a mV-ra átszámolt érték egészként is ábrázolható. Ha V-ban van, akkor lebegőpontos mennyiségként célszerű dolgozni vele.
(#) watt válasza icserny hozzászólására (») Feb 18, 2011 /
 
Lehet, hogy én értettem félre a kérdést, de nekem úgy tűnik az a probléma, hogy a PIC-ből átküldi a mért értékeket a PC-re és ott akarja feldolgozni. Namost ha átküld egy értéket, az ugye nem hex, vagy dec, vagy egyéb, hanem egy érték. Ha a PIC-ben nem alakítja szándékosan HEX karakterekké, hogy pl. EF -et kül el két karakterkóddal az egy 239 érték helyett, akkor az nem hex szám.
Ezért kérdeztem, hogy mitől lett az hex a PC-n?
(#) icserny válasza watt hozzászólására (») Feb 18, 2011 /
 
Talán az a valószínűbb, hogy te értetted jól, és én értettem félre. Mindenestre a kérdező mejd elmondja, hogy mi a gondja.

USB CDC esetén (bár egyelőre nem tudjuk, hogy erről van-e szó!) az indokolhatja a szöveges formában való küldést, hogy a bináris adattól esetleg megvadul a kapcsolat. Az ún. kontroll karaktereknek vezérlő funkciója lehet, a 127 fölötti kódok átvitele meg nyűgös dolog: a Windows vagy leharapja a legfelső bitet, vagy kódkonverziót végez.

Ha a firmware módosítható, akkor decimálisan lehetne küldeni az adatot. Természetesen a hexadecimális szám is átszámolható, csak 256-tal és 16-tal meg kell szorozni a "százas" és a "tízes" jegyét.
(#) watt válasza icserny hozzászólására (») Feb 18, 2011 /
 
A CDC nem ágál a 0..255 ig terjedő értékek ellen, a VB6-ban pedig az MSComm szintén nem, csak akkor, ha meg akarod jeleníteni egy List ablakban karakterként. A lényeg tehát az, hogy megjelenítés nélkül bármilyen érték átvihető, kezelhető.

A CDC-ről annyit, hogy most gyúrom át a házvezérlőm PC kapcsolatát HID-re, mert tele van a púpom a CDC bizonytalanságaival. (Van egy diagnosztikai áramköröm(1ksps lassú szkóp), és a tapasztalat, hogy HID-el tökéletesen működik hosszabb távon is.)
Ezt azért gondoltam megjegyezni, mert javasolt a kérdezőnek is a HID használata, ha nem akar bajlódni sokat. Az egyedüli korlát a 64kB/sec, bár a CDC-vel sem sikerült 46kB/sec fölé tornásznom a sebességet, de ennek nem csak a CDC volt az oka...
(#) watt hozzászólása Feb 18, 2011 /
 
Nem tudom, próbáltad-e már az USB-nek lefoglalt RAM területeket másra is használni? Én most kísérletezem, hogy a 0x500..0x5FF-as területen saját puffernek foglalok helyet. HID alatt ez eddig nekem nem okozott keveredést. A szimuláció szerint érintetlen maradt ez a terület, inkább a 0x400..0x4FF tartományban találhatóak változó értékek.

Tudsz erről a területről valamit bővebben?
(#) trudnai válasza watt hozzászólására (») Feb 18, 2011 /
 
Elmeletileg lehet, hogy a SIE nem hasznalja azt a teruletet, de az adatlap ova int annak felhasznalasarol mert megzavarhatja az USB mukodeset. Az adatlapban a "Buffer Ownership" reszt erdemes ezzel kapcsolatban atolvasni.

Tul ezen persze meg az is lehet zavar mentesen fog neked mukodni otthon, es akkor "kit zavar?" avagy "mi baj lehet?"
(#) icserny válasza watt hozzászólására (») Feb 18, 2011 /
 
Már nem emlékszem, hogy próbáltam-e, mindenesetre most megnéztem, s a linker scriptemben minden USB által is használható memória PROTECTED jelzésű, tehát mostanában biztosan nem használom másra.
(#) watt hozzászólása Feb 18, 2011 /
 
trudnai, icserny jogos a gondolat, én is láttam, hogy PROTECTED, viszont az is tény, hogy 64bájtnyi helyet lefoglaltam az 500-tól és az elküldött 64bájt adat elért a PC-re és viszont. Tehát nem tudom minek neki az a hely, de nagyon úgy tűnik, hogy nem használja, vagy pont olyan ütemben, ahogy én is, azaz pont oda veszi az adatokat, ahová én utána áttöltetem vele, illetve pont oda tölti fel a pufferjét, ahová én már eleve feltöltöttem, feltételezve, hogy pont ugyanazokat a címeket használja belső pufferként, amiket én külsőként. Remélem értettetek valamit a zagyvából!
Keresem azt a deklarációt, ahol látszana, hogy foglal-e helyet ott valaminek, de egyelőre nem találtam.
(#) icserny válasza watt hozzászólására (») Feb 18, 2011 /
 
A .map fájlban (egy konkrét programnál) szerintem ezek a bejegyzések jelzik a tényleges foglalást:
  1. USB_BDT            udata   0x000400       data   0x000050
  2. USB_VARIABLES      udata   0x000500       data   0x00008f
A többi hely tudtommal szabad.
(#) icserny válasza icserny hozzászólására (») Feb 18, 2011 /
 
Az USB_BDT szekció címét az usb_device.c állományban, az USB_VARIABLES kezdőcímét pedig az usb_function_device.c állományban állítják be.
(#) watt válasza icserny hozzászólására (») Feb 18, 2011 /
 
Köszönöm, délután megnézem!
(#) Zsora hozzászólása Feb 19, 2011 /
 
Üdv!
Érdekelne hogy hogyan lehet (PIC24) mikrovezérlőhöz USB-s egeret ill. játékvezérlőt kötni és használni, ill. mikrovezérlővel ilyen HID eszközöket megvalósítani, amiket pl. a Windows alapból tud kezelni mindenféle driver nélkül. (Hardware-közeli, assembly nyelvű megvalósítást szeretnék.)
Míg az adatlapokon az I2C ill. SPI buszok működése és használata elég jól le van írva, addig az USB Microcip-féle dokumentációja egy nagy nulla.
Hol találok jó információkat erről a témáról?
Esetleg valaki csinált már ilyet?
(#) vilmosd válasza Zsora hozzászólására (») Feb 19, 2011 /
 
(#) watt válasza Zsora hozzászólására (») Feb 19, 2011 /
 
Idézet:
„Hardware-közeli, assembly nyelvű megvalósítást szeretnék.”

Vannak példák, én talákoztam velük, de C-ben.
Egeret még nem próbáltam, de van egy cikkem a HID kapcsolatról. Csak az azonosítót kell elvileg megadni, hogy a Win pl. egérnek ismerje fel. Pillanatnyilag nem vagyok benne a témában, konkrétumok után nekem is keresgélnem kéne...
(#) Zsora válasza vilmosd hozzászólására (») Feb 19, 2011 /
 
Szia!
Konkrétan melyik foglalkozik USB-vel?
(Engem nem a C-nyelvű és Framework-ös alkalmazások érdekelnének...)
(#) watt válasza watt hozzászólására (») Feb 19, 2011 /
 
Próbáltam szerkeszteni az előzőt, de nem ment...

Szóval közben rájöttem, hogy te a PIC-re akarod kötni az egeret, ahhoz host-os PIC kéne. Azt hiszem van ilyen is, de még nem találkoztam ilyennel, és példával sem. Nem lesz könnyű dolgod.
Következő: »»   32 / 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