Fórum témák
» Több friss téma |
Fórum » PIC - USB - PC projekt
Hello!
Én is szeretném elkérni a "mintaprogramot" tanulmányozás céljából! E-mail nálam is publikus. Előre is köszönöm szépen!
Hello!
Nem töltenéd fel inkább ide? Neked is kényelmesebb szerintem, mint kibogarászni mindenkinek az e-mail címét, meg így legalább többen elérnék. Ha esetleg úgy döntesz, hogy nem rakod fel, akkor lennél olyan rendes és elküldenéd nekem is? A címem nekem is ott van az adatlapomon. Előre is köszi! Attila
Szerintem is érdemes lenne feltenned, engem is érdekelne természetesen!
Üdv!
Szeretném kicsit megváltoztatni a microchip cdc példaprogramját úgy, hogy a sorosportról kapott adatokat elemzem a getcUSART-al (első karakter második harmadik stb), viszont nem tudom hova lenne célszerű a kódot beleírni. A processio vagy a lowpriorityisr code-ba?
Hopsz, bocsánat visszaolvasva a kommentemet lehet hogy nem egyértelmű... Azt szeretném, ha az USB-ről érkező adatokat (amik ugye soros adatok tekintve hogy cdc-t használok), tudnám valahogy vizsgálni, tehát pl a hyperterminalba beírom hogy $G,1 akkor a PIC-en mondjuk felvillanjon az RC1 stb. Ugye akkor nem is a getcUSART kell mert az nem az USB oldali, hanem a 'soros' oldali, tehát a cdc-nél azt az adatot adja vissza amit a pic a soros lábain kapott. Nekem viszont az kellene hogy amit az usb-ből kihámoz a pic és továbbküldi a soros lábakra tudjam elemezni. Remélem így érthetőbb voltam...
Van erről cikk itt a hobbin, érdemes lenne elolvasni!
A Microchip demók közül az USB Device - CDC - Basic Demo-ból érdemes kiindulni. (Ha jól értem, csak a PC-vel akarsz kommunikálni, a soros porton pedig nem).
De jobban jársz a PICCOLO projekt mintapéldáival, mert kész példát találsz a parancsértelmezőre, s az általam írt függvényekkel (usb_cdc_putc, usb_cdc_getc, outString, stb) lényegesen egyszerűbb az USB kapcsolat kezelése, mint a Microchip állapotgépes/időszeleteléses megközelítése. Javaslom, hogy az USB kezelés interruptos legyen (a hi_isr()-ben meg kell hívni az USBDeviceTasks() függvényt), s akkor a továbbiakban nincs időkritikus folyamat (a ProcessIO tud várni...). Ha a karakter ki- vagy beviteli függvények várakoznak (parancsértelmezőnél ez az alapállás), akkor a ProcessIO-val egyáltalán nem is kell foglalkozni. U.i.: A PICCOLO projekt USB-s mintapéldái tulajdonképpen a CDC - Basic Demo továbbfejelesztésének tekinthetők, abból indultam ki.
Nézegettem a projektet, de nekem mindkét irány kell. Azt elfelejtettem írni, hogy a CDC Serial Emulation demorol van szó, ami ugya minden usb adatot továbbküld az rxtx lábra. Nekem ez a funkció is kell. Most ott tartok, hogy a ProcessIO-ba beraktam ezt a kódot:
csakhogy ekkor az USB státuszjelző led ami az RC0-n van elkezd lassabban villogni. A gyári demoban már átírtam a POLLING-ról INTERRUPT-ra, de vmi még mindig hibádzik. A lednek kb 10ms-ra kellene felvillannia, viszont már a 1000-s Delaynél is belassul. update: ez a processio if (RS232_Out_Data_Rdy == 0) ágában van.
Akkor mostmár nem tudom, hogy mit akarsz csinálni.
Annak nincs jelentősége, hogy milyen ütemben villog a státuszjelző, mert gyakorlatilag csak a tétlen ciklusokat számlálja. Késleltetést viszont nem illik berakni a fő hurokba. Úgy kellene szervezni, hogy a visszabillentést - a megadott időzítés leteltével - vagy interrupton, vagy a következő ciklusokban kellene végrehajtani. Ehhez természetesen az állapotokat és az időzítés számlálóját adminisztrálni kell.
Szeretném ha a számítógép USB-jéről minden adat átmenne a PIC soros portjára (RXtx lábak), mivel ott egy bluetooth modul van ugyanis. De azt is szeretném, ha bizonyos típusú adatoknál felvillanna egy led, erre a $,1 a példa, ha ilyen típusú adat megy a modul felé akkor simán felvillan egy led. Namost a baj az, hogy beraktam az említett helyre a kódrészletet és minden megy rendesen, csak valószínű azért lassul le a pic mert a RS232_Out_Data csak akkor törlödik ha betelt a 64bájt vagy ha új adat érkezik, ezért folyton belép az if ágba mivel a puferbe mindig ugyanaz van és folyton ráfut a delayre a led meg folyamatosan villog. Tehát valahogy ki kellene nullázni, de nem tudom hogy :S
Szerintem rossz helyen kereskedsz! Az
ágba kellene beraknod a a figyelést, egy hívással elővett karaktereket nézegetve. Mivel szekvenciákat figyelsz, egy-egy szép kis státuszgép fog kikerekedni belőle... Arr ugyanis nem számíthatsz, hogy a teljes szekvencia a bufferben van (lehet, hogy a következő csomagban érkezik a vége).
De itt csak egy karaktert kapok vissza, akkor a következő ciklusban honnan tudom mi volt az előzö?
Csak onnan tudod, hogy nyilvántartod. Státuszgép, vagy amit akarsz...
Sziasztok!
Az a helyzet hogy összeomlott a másik a gépem amin dolgoztam és nem tudom kimenteni a dolgokat (legalábbis pár fájl biztosan nem jön át). Jövöhéten megpróbálkozom egy alaplapcserével, remélem sikerül őket kiszedni, már pár hónapos melóm van benne. Utána felteszem őket ide. Adam
Hello!
Sikerült megmenteni a munkát. A high bandwidth demo lett átalakítva, igy minden ugyanugy néz ki, de az exe fájl-ban a "Send Bulk OUT Packets EP1,EP2,EP3.." gomb valójában a kettes endpointon keresztül olvas adatokat (usb trace-val pl nagyon szépen meg lehet nézni). A kimenő adatok most 0-k, de az EP2INEvenBuffer-t és az EP2INOddBuffer-t fel lehet tölteni. Váljon egészségetekre. Sajnos a VC++ fájlok túl nagyok igy csak az exe ment hozzá, de txt.-ben csatoltam mit kell a gombnyomáshoz irni. Ha valakinek az egész mappa kéne szóljon (VS 2008-ban van irva). Elnézést a késésért meg hogy kicsit ilyen káoszos. Adam
Sziasztok!
Átolvastam a 31 oldalnyi információt amit idáig a topic összegyűjtött, majd megépítettem egy HID BOOTLOADER-re szánt próbapanelt pic18f2550-el. A microchip USB Framework bootloader-jét átalakítottam erre a uc-re. Mindezt sikerrel koronázta a próba, viszont egy érdekes dologra derült fény. Bizonytalan idő elteltével (kezdetben hosszabb, ~1-2 perc, majd egyre rövidebb, ~10mp) a PIC elfelejti, hogy mit is kéne csinálnia, a kontrol ledek megállnak, és megszűnik a kapcsolat. Utána sem reset semmi nem használ neki, le kell választanom, és talán majd legközelebb. Kondikat amiket már eddig javasoltatok betettem, és mindent aszerint építettem. A mellékelt kapcsoláson csak a 20Mhz-es osci és a kondijai nem szerepelnek, a többi ahogy látszik. Kérlek benneteket, ha valakinek van tippje merre induljak, ossza meg velem. Előre is köszönöm!
Hali!
A PC oldalon milyen program van?
Microchippes HIDBootloader. Látja is. Addig amig a PIC "be nem áll".
A lefordított bootloader nem lóg át véletlenül a 0x1000-es határon? Brown Out Reset detektálása engedélyezve van? Watchdog le van tiltva?
Szia!
A mikrovezérlő és a LED-ek közé azért rakhatnál ellenállásokat is. Vagy a valóságban nem így van megépítve?
Bele fér az 0x1000-be, BODEN enabled, 2V, WDT kikapcs. Tudom, hogy nem a ti dolgotok megoldani a problémám, csak most télleg elakadtam.
Rakok majd 180-akat a ledekre. De az most kimaradt.
Jaaaaaaaaaa van peszre. 470 ott figyel minden led előtt.
LVP le van tiltva a konfigban?
Ja, amugy miert huzod fel az MCLR-t ket ellenallassal is?
Csak egy ellenállással van felhúzva, az R3 csak benne maradt a rajzban, a rajzot csak azért csináltam, hogy nagyjából megmutassam alap konfig van USB-hez. LVP kikapcsolva.
Sziasztok!
Próbálgatom az Icserny féle anyag alapján megtanulgatni az adat küldést picről pcre. Egy picit elakadtam: egy kapcsoló be vagy kikapcsolt állapotát szeretném jelezni, ám semmi nem sikerül. Kicsit lebutítottam a programot már annyira, hogy egy leddel jelezze, és ez sem megy. Betettem a fő hurokba (remélem oda), mert először megszakításban próbáltam. A kapcsoló az rb4-en van. Mellékelem a fájlt, szerintem érthetőbb mint ahogy leírom A gombot érzékeli, mert ha a pcről adok parancsot, hogy kapcsolja be a ledeket, akkot az első ledet csak abban az esetben kapcsolja be, ha a gomb nyomva van, de én azt szeretném ha mindig a kapcsolót jelezné. Merre keressem a hibát? Ezután már a küldés szerintem egyszerűen a led kapcsolgatás helyére mehetne. Remélem jó topicba kérdeztem. A válaszokat előre is köszönöm! És bocsi a terjengősségért!
1. Ha átírod a programt, akkor ne terjeszd az én nevemmel a fejlécben, mert ez így megtévesztő.
2. Ennek programnak az eredeti változata a #B parancsra kírja a nyomógomb állapotát (1: felengedve, 0: Lenyomva). Ezt kipróbáltad, működött? 3. A belinkelt program elég szerencsétlen szervezésű, mert a nyomógombra csak egy pillanatra néz rá, amikor egy karakter beérkezett. A fő várakozási ciklus az usb_cdc_getc() függvényben van, abban várakozunk, amíg nem jön karakter. Ha így akarod használni, akkor tartsd lenyomva a gombot, s eközen küldj 1 db karaktert.
Szia!
Köszönöm a választ! Nem sokára kipróbálom. Bocsi, nem akartam terjeszteni természetesen, de akkor ha legközelebb gondom van és kérdezek, átírom úgy a fejlécet, hogy látszódjon nem ez az eredeti! Én amúgy az szeretném, hogy van egy kapcsoló, és minden kérdés nélkül küldje el ha megváltozik az állapota. Köszi még egyszer, próbálkozok. Idézet: 1. A főprogram elején deklarálj egy vátozót: unsigned char SW1_state;„van egy kapcsoló, és minden kérdés nélkül küldje el ha megváltozik az állapota.” 2. A végtelen ciklus előtt legyen egy SW1_state=SW1; sor! 3. A teljes while(1) {} cklust cseréld le! Például erre:
Nagyon szépen köszönöm!
Sikerült, és azt hiszem értem is, sőt sikerült össze kombinálni, hogy küld is és fogad is. Már csak azt nem tudom, hogyan tovább a tanulás útján |
Bejelentkezés
Hirdetés |