www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Povezava LPC2148 na PC s HID

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
PeterC
Član
Član



Pridružen-a: Tor 14 Dec 2004 20:22
Prispevkov: 204
Aktiv.: 0.86

PrispevekObjavljeno: Pet Sep 28, 2007 3:15 pm    Naslov sporočila:  Povezava LPC2148 na PC s HID Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
PeterC
Član
Član



Pridružen-a: Tor 14 Dec 2004 20:22
Prispevkov: 204
Aktiv.: 0.86

PrispevekObjavljeno: Pet Sep 28, 2007 11:04 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.60
Kraj: Ljubljana

PrispevekObjavljeno: Sob Sep 29, 2007 9:08 am    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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