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   31 / 55
(#) Norberto válasza nem hozzászólására (») Nov 4, 2010 /
 
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!
(#) Atielektro válasza nem hozzászólására (») Nov 4, 2010 /
 
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
(#) watt válasza nem hozzászólására (») Nov 5, 2010 /
 
Szerintem is érdemes lenne feltenned, engem is érdekelne természetesen!
(#) trudnai válasza nem hozzászólására (») Nov 5, 2010 /
 
engem is...
(#) qwer85 hozzászólása Nov 5, 2010 /
 
Ü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?
(#) qwer85 válasza qwer85 hozzászólására (») Nov 5, 2010 /
 
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...
(#) watt válasza qwer85 hozzászólására (») Nov 5, 2010 /
 
Van erről cikk itt a hobbin, érdemes lenne elolvasni!
(#) icserny válasza qwer85 hozzászólására (») Nov 5, 2010 /
 
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.
(#) qwer85 válasza icserny hozzászólására (») Nov 5, 2010 /
 
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:
  1. if((RS232_Out_Data[0]=='#') && (RS232_Out_Data[1]=='W') && (RS232_Out_Data[3]=='9') && (RS232_Out_Data[4]=='0'))
  2.                 {
  3.                                 PORTCbits.RC1=0;
  4.                                 PORTCbits.RC2=0;
  5.                                 PORTCbits.RC3=0;
  6.                                 PORTCbits.RC4=0;
  7.                                 PORTCbits.RC1=1;
  8.                                 Delay1KTCYx(1);
  9.                                 PORTCbits.RC1=0;
  10.                                 PORTCbits.RC2=0;
  11.                                 PORTCbits.RC3=0;
  12.                                 PORTCbits.RC4=0;
  13.                 }
  14.                 else
  15.                 if((RS232_Out_Data[0]=='$') && (RS232_Out_Data[1]==',') && (RS232_Out_Data[2]=='1')
  16.                 {
  17.                                 PORTCbits.RC1=0;
  18.                                 PORTCbits.RC2=0;
  19.                                 PORTCbits.RC3=0;
  20.                                 PORTCbits.RC4=0;
  21.                                 PORTCbits.RC2=1;
  22.                                 Delay1KTCYx(1);
  23.                                 PORTCbits.RC1=0;
  24.                                 PORTCbits.RC2=0;
  25.                                 PORTCbits.RC3=0;
  26.                                 PORTCbits.RC4=0;
  27.                 }


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.
(#) icserny válasza qwer85 hozzászólására (») Nov 5, 2010 /
 
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.
(#) qwer85 válasza icserny hozzászólására (») Nov 5, 2010 /
 
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
(#) icserny válasza qwer85 hozzászólására (») Nov 5, 2010 /
 
Szerintem rossz helyen kereskedsz! Az
  1. if(RS232_Out_Data_Rdy && mTxRdyUSART())
  2.         {
  3.                 putcUSART(RS232_Out_Data[RS232cp]);
  4.                 ++RS232cp;
  5.                 if (RS232cp == LastRS232Out)
  6.                         RS232_Out_Data_Rdy = 0;
  7.         }

ágba kellene beraknod a a figyelést, egy
  1. c = RS232_Out_Data[RS232cp]

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).
(#) qwer85 válasza icserny hozzászólására (») Nov 5, 2010 /
 
De itt csak egy karaktert kapok vissza, akkor a következő ciklusban honnan tudom mi volt az előzö?
(#) icserny válasza qwer85 hozzászólására (») Nov 6, 2010 /
 
Csak onnan tudod, hogy nyilvántartod. Státuszgép, vagy amit akarsz...
(#) nem válasza nem hozzászólására (») Nov 6, 2010 /
 
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
(#) nem válasza nem hozzászólására (») Nov 7, 2010 /
 
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
(#) mdemcsik hozzászólása Nov 30, 2010 /
 
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!

proteus.jpg
    
(#) zenetom válasza mdemcsik hozzászólására (») Nov 30, 2010 /
 
Hali!
A PC oldalon milyen program van?
(#) mdemcsik válasza zenetom hozzászólására (») Nov 30, 2010 /
 
Microchippes HIDBootloader. Látja is. Addig amig a PIC "be nem áll".
(#) icserny válasza mdemcsik hozzászólására (») Nov 30, 2010 /
 
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?
(#) El_Pinyo válasza mdemcsik hozzászólására (») Nov 30, 2010 /
 
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?
(#) mdemcsik válasza icserny hozzászólására (») Nov 30, 2010 /
 
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.
(#) mdemcsik válasza El_Pinyo hozzászólására (») Dec 1, 2010 /
 
Jaaaaaaaaaa van peszre. 470 ott figyel minden led előtt.
(#) trudnai válasza mdemcsik hozzászólására (») Dec 1, 2010 /
 
LVP le van tiltva a konfigban?

Ja, amugy miert huzod fel az MCLR-t ket ellenallassal is?
(#) mdemcsik válasza trudnai hozzászólására (») Dec 1, 2010 /
 
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.
(#) mps hozzászólása Dec 17, 2010 /
 
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!

CDC-proba.c
    
(#) icserny válasza mps hozzászólására (») Dec 18, 2010 /
 
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.
(#) mps válasza icserny hozzászólására (») Dec 18, 2010 /
 
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.
(#) icserny válasza mps hozzászólására (») Dec 18, 2010 /
 
Idézet:
„van egy kapcsoló, és minden kérdés nélkül küldje el ha megváltozik az állapota.”
1. A főprogram elején deklarálj egy vátozót: unsigned char SW1_state;
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:
  1. while(1) {
  2.   if(SW1!=SW1_state) {
  3.     SW1_state=SW1;
  4.     if(SW1_state) {
  5.       outString("SW1 felengedve\n");
  6.     }
  7.     else {
  8.         outString("SW1 lenyomva\n");
  9.     }
  10.   }
  11.     delay_ms(25);
  12. }
(#) mps válasza icserny hozzászólására (») Dec 18, 2010 /
 
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
Következő: »»   31 / 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