 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
PeterC Član

Pridružen-a: Tor 14 Dec 2004 20:22 Prispevkov: 204 Aktiv.: 0.86
|
Objavljeno: Pet Sep 28, 2007 3:15 pm Naslov sporočila: Povezava LPC2148 na PC s HID |
|
|
Ukvarjam se s predelavo Keilovega primera komunikacije. Uporabljam uVision3 ter VS 2003.
Spremenil sem interval ter predelal kodo, da LPC pošilja vsako ms en char in ga poveča za ena
Koda: |
void GetInReport (void) {
if ((IOPIN0 & PBINT) == 0) { /* Check if PBINT is pressed */
InReport = dummy_x;
IOPIN1 = (IOPIN1 & ~LEDMSK) | (dummy_x << 16); //LED kazejo dummy_x
dummy_x++;
} else {
//ne poslji nicesar
}
} |
Na računalniku berem iz bufferja. Na začetku sem originalnemu projektu spremenil timer na 1ms, vendar mi je iz bufferja bral nek vektor enakih znakov.
Potem sem naredil svoj program, ki se uspešno inicianilizira ter poveže z kontrolerjem, povečal sem buffer iz 16 na 512.
Ob pritisku gumba mi pogleda buffer ter mi ga izpiše na ekran.
Tole je koda gumba
Koda: |
if (!HID_Read(buffer, sizeof(buffer), &cnt)) {
MessageBox("neuspesno prebral","naprave",MB_OK);
return;
}
sprintf(text,"prebral, cnt= %i",cnt);
MessageBox(text,"naprave",MB_OK);
for(i=0;i<sizeof(buffer)-1;i++)
{
sprintf(text," %X ",buffer[i]);
MessageBox(text,"naprave",MB_OK);
} |
Funkcijo HID_Read sem vzel iz Keilovega demota
Koda: |
BOOL HID_Read(BYTE *buf, DWORD sz, DWORD *cnt) {
BOOL ok;
/* Read from Device */
ok = ReadFile(DevHandle, buf, sz, cnt, NULL);
return (ok);
} |
V bufferju se po kliku na gumb pojavita dve vrednosti, ena statična [0x00], druga je odvisna od vrednost dummy_x spremenljivke, ko spustim INT1 gumb (v tem primeru je 0xAC)
buffer[0]=0x00, buffer[1]=0xAC, buffer[3]=0x00, buffer[4]=0xAC, ...
Sedaj pa ne vem ali je napaka v mojem programu, vse skupaj ne deluje, iz bufferja lahko berem samo zadnjo vrednost.
Je imel še kdo takšno težavo?
Lahko bi sicer oddajal 1byte na 32ms ter vsakih 10ms praznil buffer, da nebi izgubljal podatkov, samo se mi zdi to prepočasen prenos podatkov. |
|
Nazaj na vrh |
|
 |
PeterC Član

Pridružen-a: Tor 14 Dec 2004 20:22 Prispevkov: 204 Aktiv.: 0.86
|
Objavljeno: Pet Sep 28, 2007 11:04 pm Naslov sporočila: |
|
|
Našel napako, očitno je pri Keilovem demotu spremenljivka InReport ni uporabljena kot buffer, ampak jo kar naprej pošilja v računalnik, tudi če se ne spreminja - posledično mi je vse skupaj povozilo buffer na računalniku.
Zanima me, kako bi spremenil demo, da bi mi LPC oddajal samo koristne podatke, recimo samo ko bi pritisnil tipko INT1 (na MCB2140).
Pa še to, kako naredim array - polje spremenljivk tipa BYTE. |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.60 Kraj: Ljubljana
|
Objavljeno: Sob Sep 29, 2007 9:08 am Naslov sporočila: |
|
|
PeterC je napisal/a: |
Pa še to, kako naredim array - polje spremenljivk tipa BYTE. |
Koda: |
#define BUF_SIZE 40
unsigned char buffer[BUF_SIZE];
ali
signed char buffer[BUF_SIZE];
|
|
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 6 dni
Powered by phpBB © 2001, 2005 phpBB Group
|