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 

HID tipkovnica P18F4550

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



Pridružen-a: Tor 21 Okt 2008 17:31
Prispevkov: 14
Aktiv.: 0.07
Kraj: Ilirska Bistrica

PrispevekObjavljeno: Čet Apr 08, 2010 8:57 pm    Naslov sporočila:  HID tipkovnica P18F4550 Odgovori s citatom

Pozdravljeni!

Izdelujem tipkovnico za PC ki naj bi delovala prek HID terminala. Imam pic 18F4550.
Za prototip sem si vzel sample program od easyPic5 imenovan HID Write test. Spremenil sem tudi file "USBdsc.c" tako, da mi ga PC zazna kakor tipkovnico. Za to
sem uporabil HID Descriptor Tool, ki sem ga našel na spletni strani www.usb.org . Deskriptor sedaj zgleda takole:
Koda:

// HID_Report Descriptor
    0x05, 0,
   0x01, 0,                   // USAGE_PAGE (Generic Desktop)
    0x09, 0,
   0x06, 0,                 // USAGE (Keyboard)
    0xa1, 0,
   0x01, 0,                   // COLLECTION (Application)
    0x05, 0,
   0x07, 0,                   //   USAGE_PAGE (Keyboard)
    0x19, 0,
   0xe0, 0,                   //   USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0,
   0xe7, 0,                   //   USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0,
   0x00, 0,                   //   LOGICAL_MINIMUM (0)
    0x25, 0,
   0x01, 0,                   //   LOGICAL_MAXIMUM (1)
    0x75, 0,
   0x01, 0,                   //   REPORT_SIZE (1)
    0x95, 0,
   0x08, 0,                   //   REPORT_COUNT (8)
    0x81, 0,
   0x02, 0,                   //   INPUT (Data,Var,Abs)
   /////////////////////////////////////////////////////
    0x95, 0,
   0x01, 0,                   //   REPORT_COUNT (1)
    0x75, 0,
   0x08, 0,                   //   REPORT_SIZE (8)
    0x81, 0,
   0x03, 0,                   //   INPUT (Cnst,Var,Abs)
   ////////////////////////////////////////////////////////
    0x95, 0,
   0x05, 0,                   //   REPORT_COUNT (5)
    0x75, 0,
   0x01, 0,                   //   REPORT_SIZE (1)
    0x05, 0,
   0x08, 0,                   //   USAGE_PAGE (LEDs)
    0x19, 0,
   0x01, 0,                   //   USAGE_MINIMUM (Num Lock)
    0x29, 0,
   0x05, 0,                   //   USAGE_MAXIMUM (Kana)
    0x91, 0,
   0x02, 0,                   //   OUTPUT (Data,Var,Abs)
    0x95, 0,
   0x01, 0,                   //   REPORT_COUNT (1)
    0x75, 0,
   0x03, 0,                   //   REPORT_SIZE (3)
    0x91, 0,
   0x03, 0,                   //   OUTPUT (Cnst,Var,Abs)
    0x95, 0,
   0x06, 0,                   //   REPORT_COUNT (6)
    0x75, 0,
   0x08, 0,                   //   REPORT_SIZE (8)
    0x15, 0,
   0x00, 0,                   //   LOGICAL_MINIMUM (0)
    0x25, 0,
   0x65, 0,                   //   LOGICAL_MAXIMUM (101)
    0x05, 0,
   0x07, 0,                   //   USAGE_PAGE (Keyboard)
    0x19, 0,
   0x00, 0,                   //   USAGE_MINIMUM (Reserved (no event indicated))
    0x29, 0,
   0x65, 0,                   //   USAGE_MAXIMUM (Keyboard Application)
    0x81, 0,
   0x00, 0,                   //   INPUT (Data,Ary,Abs)
    0xc0,  0

Skratka, PC mi PIC zazna kakor HID Keyboard.
Sedaj se mi je pa zalomilo pri pošiljanju podatkov na PC. Na usb.org sem si ogledal tabele, kako naj bi ti paketki ki jih pošiljam v PC zgledali. Tabela zgleda takole:
Koda:

The following table represents the keyboard input report (8 bytes).

Byte      Description
0           Modifier keys  //to je za ctrl, alt, shift...
1           Reserved
2           Keycode 1  //to je za eno tipko
3           Keycode 2
4           Keycode 3
5           Keycode 4
6           Keycode 5
7           Keycode 6

Našel sem še tabelo, kjer se nahajajo "kode" za posamezno črko:
Koda:

Usage ID(Dec)    Usage ID(Hex)          Usage Name                         Ref: Typical AT-101
           
0                     00               Reserved (no event indicated)9
1                     01                  Keyboard ErrorRollOver9                        N/A
2                     02                  Keyboard POSTFail9                             N/A
3                     03                  Keyboard ErrorUndefined9                      N/A
4                     04                  Keyboard a and A4                               31
5                     05                  Keyboard b and B                                 50
6                     06                  Keyboard c and C4                               48
.
.
.

No, po teh tabelah sem napisal sample program, ki naj bi mi poslal črko 'b' v PC. (program vsaj meni zgleda logicen:) )
Koda:

#include "D:\usb\USBdsc.c" //to je predelana dat "USBdsc.c" na tipkovnico

unsigned char k;
int read[64],write[64];

void interrupt()
{
  HID_InterruptProc();

}

void Init_Main()
{
        //--------------------------------------
        // Disable all interrupts
        //--------------------------------------
        INTCON = 0;                             // Disable GIE, PEIE, TMR0IE,INT0IE,RBIE
        INTCON2 = 0xF5;
        INTCON3 = 0xC0;
        RCON.IPEN = 0;                          // Disable Priority Levels on interrupts
        PIE1 = 0;
        PIE2 = 0;
        PIR1 = 0;
        PIR2 = 0;

        ADCON1 |= 0x0F;                         // Configure all ports with analog function as digital
        CMCON  |= 7;                            // Disable comparators
        //--------------------------------------
        // Ports Configuration
        //--------------------------------------
        TRISA = 0xFF;
        TRISB = 0xFF;
        TRISC = 0xFF;
        TRISD = 0;
        TRISE = 0x07;

        LATA = 0;
        LATB = 0;
        LATC = 0;
        LATD = 0;
        LATE = 0;
        //--------------------------------------
        // Clear user RAM
        // Banks [00 .. 07] ( 8 x 256 = 2048 Bytes )
        //-------------------------------------

}

void main() {

    Init_Main();

  HID_Enable(read, write);

  while(1) {
/*Tukaj skenira oz pošlje tipko*/
    write[0]=0;
    write[1]=0;
    write[2]=5; //koda za 'b'
    write[3]=0;
    write[4]=0;
    write[5]=0;
    write[6]=0;
    write[7]=0;
          HID_Write(write,1);
/*Blok, ki pošlje da je tipka sproščena*/
    write[0]=0;
    write[1]=0;
    write[2]=0;
    write[3]=0;
    write[4]=0;
    write[5]=0;
    write[6]=0;
    write[7]=0;
        HID_Write(write,1);
      }
}


Kje sem ga polomil? Prosil bi za pomoč, ker sedaj res nevem kaj naj naredim.

Lp, Klemen
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
kle-man
Član
Član



Pridružen-a: Tor 21 Okt 2008 17:31
Prispevkov: 14
Aktiv.: 0.07
Kraj: Ilirska Bistrica

PrispevekObjavljeno: Pet Apr 09, 2010 11:35 am    Naslov sporočila:   Odgovori s citatom

Zadeva je rešena! Very Happy
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
klemen88
Član
Član



Pridružen-a: Tor 01 Jan 2008 17:37
Prispevkov: 747
Aktiv.: 3.51
Kraj: Slovenj Gradec

PrispevekObjavljeno: Pet Apr 09, 2010 11:55 am    Naslov sporočila:   Odgovori s citatom

kle-man je napisal/a:
Zadeva je rešena! Very Happy

Lep pozdrav!
Lepo bi bilo če bi napisal kje je bila težava, da bodo lahko drugi uporabniki videli, če bodo imeli podobno težavo!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kle-man
Član
Član



Pridružen-a: Tor 21 Okt 2008 17:31
Prispevkov: 14
Aktiv.: 0.07
Kraj: Ilirska Bistrica

PrispevekObjavljeno: Pet Apr 09, 2010 1:58 pm    Naslov sporočila:   Odgovori s citatom

Se opravičujem:D

Težava je bila v HID_Write(write,1); ukazu.
Torej pošiljav sem samo en byte namesto vseh osem. Torej samo spremeniš ukaz HID_Write(write,1); v HID_Write(write,8); in zadeva deluje Very Happy

Lp, Klemen
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Č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: 495 dni


Powered by phpBB © 2001, 2005 phpBB Group