-
        

Ergebnis 1 bis 9 von 9

Thema: Barcodscanner Protokoll

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2008
    Beiträge
    19

    Barcodscanner Protokoll

    Anzeige

    Hallo!


    Ich habe ein Problem mit einen Barcodescanner (MANHATTAN BARCODE SCANNER KONTAKT PS/2 für 49,95) den ich bei Conrad gekauft habe. Ich möchte diesen Scanner an einen PIC anschließen, verstehe aber das Protokoll des Scanners nicht. Ich habe 4 Versuche mit eine Oszilloskope gemacht und seltsames rausbekommen.

    Für eine Dezimal
    0
    01010001001 00000111111 01010001001

    1
    00110100001 00000111111 00110100001

    2
    00111100011 00000111111 00111100011

    3
    00110010001 00000111111 00110010001

    Kann mir jemand weiterhelfen??

    Danke

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    41
    Beiträge
    685
    Moin!
    Dem Namen nach würde ich sagen, der emuliert eine PS/2 Tastatur...
    http://de.wikipedia.org/wiki/PS/2-Schnittstelle
    http://www.computer-engineering.org/ps2protocol/
    steht auch im Datenblatt :
    http://www2.produktinfo.conrad.com/d..._PS2_de-en.pdf

    Mfg Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2008
    Beiträge
    19
    Sorry aber das hilft mir nicht so richtig weiter. Ich kann mit dem Protokoll nichts anfangen. Es sieht aus als wären es 3Byte allererdings zu 11 Bit. Das erste und das letzte Byte ist für die jeweilige Zahl gleich. Bei allen ist aber das Byte in der Mitte gleich. Solche dinge wie Endzeichen (Enter), Start/Stoppbit usw habe ich schon in den Einstellungen des Scanners rausgenommen.


    Vielleicht hast du ja noch eine Idee zum entschlüsseln des Codes

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Der Code würde aber (bis auf die 11 Bit) mit PS/2 bzw. dem von AT-Tastaturen zusammenpassen.
    Dort werden beim kurzen Drücken einer Taste auch 3 Byte gesendet.
    Beim Drücken der Scancode der Taste, beim Loslassen Break-Code sowie nochmal der Scancode der Taste, die losgelassen wurde.
    #ifndef MfG
    #define MfG

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    41
    Beiträge
    685
    Moin!
    Google sagt folgendes zu ps2 tastatur protokoll:

    http://www.marjorie.de/ps2/ps2_protocol.htm
    Da steht auch, wieso das 11 Bits sind

    und hier steht noch was zum Tastaturprotokoll direkt.
    http://www.marjorie.de/ps2/ps2_keyboard.htm

    MfG
    Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Verdammt... ich werd alt.... ich hab selber mal nen Treiber für ne Tastatur geschrieben und da warens tatsächlich auch 11 Bit pro "Byte"... jetzt fällts mir wieder ein...
    #ifndef MfG
    #define MfG

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2008
    Beiträge
    19
    Danke für den Link zu Marjorie, aber so richtig klar ist es mir noch nicht.
    In Abbildung 3 wird der Scancode für die Taste "Q" (15h) dargestellt. Und da ist mir was unklar. Die 15h kann ich im Scancode lesen aber die 15h ist doch nicht die Taste "Q". "Q" wäre doch 51h. Wenn ich es mal so hin nehme das "Q" die 15h ist, frag ich mich was dann mit den 4 Binärzahlen vor dem A im Alphabet ist. Was haben die dann für ein Zeichen? Und wo beginnen dann die Zahlen?


    Irgendwie noch völlig unklar

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2008
    Beiträge
    19
    Hab jetzt die Scancodes gesehen. Dann kann ich ja weiter machen. Danke für die Mühe

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    19.09.2008
    Beiträge
    19
    Ich hab doch noch ein paar Problem.

    Ich schaffe es nicht das mehrere Zahlen im Barcode hintereinander ausgelesen werden. Scanne ich einen Barcode mit den Zahlen 12345 werden mir die ersten beiden Zahlen ausgegeben,für die 3 kommt ein schwarzes Feld (also quatsch) und 4,5 werden nicht mehr angezeigt. Cursor steht dann bei Stelle 4.


    Hat jemand eine Idee zu meinem Problemen

    Code:
    //##################  globale Variablen  ##########
    unsigned short zahlzaehler=0,k=0;
    unsigned char werte[10];
    //##################  Funktions dekleration  ######
    unsigned char anzeige(char);
    unsigned char lesen();
    
    //##################  Funktionen  #################
    unsigned char lesen()
    {
    unsigned char i,
                  scancode1=0,
                  scancode2=0;
    
          while(PORTA.F4); // Warten auf Startbit
          while(!PORTA.F4); // Ende Startbit
          scancode1 = 0;
            for(i=0; i<8; i++) // 8 Bits einlesen
          {
             while(PORTA.F4);
             scancode1 |= (PORTA.F3);
    
             if ( i<7)
             {
              scancode1 = (scancode1<<1);
             }
    
             while(!PORTA.F4); // gelesen, auf nächstes Bit warten
          }
    
    /*   if(k==0)
       {
    scancode1 = 0xa2;
       }
       if(k==1)
       {
    scancode1 = 0x68;
        }
       if(k==2)
       {
    scancode1 = 0x78;
    }
       if(k==3)
       {
    scancode1 = 0x64;
       }    */
    //      scancode1 = 0x64;
          scancode2 = 0;
              scancode2.F0 = scancode1.F7;
              scancode2.F1 = scancode1.F6;
              scancode2.F2 = scancode1.F5;
              scancode2.F3 = scancode1.F4;
              scancode2.F4 = scancode1.F3;
              scancode2.F5 = scancode1.F2;
              scancode2.F6 = scancode1.F1;
              scancode2.F7 = scancode1.F0;
       return scancode2;
    }
    
    void anzeige(char code)
    {
    char ausgabe=0,i;
     switch ( code )
          {
           case 0x45:  ausgabe = 48; break;   //0
           case 0x16:  ausgabe = 49; break;   //1
           case 0x1e:  ausgabe = 50; break;   //2
           case 0x26:  ausgabe = 51; break;   //3
           case 0x25:  ausgabe = 52; break;   //4
           case 0x2e:  ausgabe = 53; break;   //5
           case 0x36:  ausgabe = 54; break;   //6
           case 0x3d:  ausgabe = 55; break;   //7
           case 0x3e:  ausgabe = 56; break;   //8
           case 0x46:  ausgabe = 57; break;   //9
    
           case 0x1c:  ausgabe = 65; break;   //A
           case 0x32:  ausgabe = 66; break;   //B
           case 0x21:  ausgabe = 67; break;   //C
           case 0x23:  ausgabe = 68; break;   //D
           case 0x24:  ausgabe = 69; break;   //E
           case 0x2b:  ausgabe = 70; break;   //F
           case 0x34:  ausgabe = 71; break;   //G
           case 0x33:  ausgabe = 72; break;   //H
           case 0x43:  ausgabe = 73; break;   //I
           case 0x3b:  ausgabe = 74; break;   //J
           case 0x42:  ausgabe = 75; break;   //K
           case 0x4b:  ausgabe = 76; break;   //L
           case 0x3a:  ausgabe = 77; break;   //M
           case 0x31:  ausgabe = 78; break;   //N
           case 0x44:  ausgabe = 79; break;   //O
           case 0x4d:  ausgabe = 80; break;   //P
           case 0x15:  ausgabe = 81; break;   //Q
           case 0x2d:  ausgabe = 82; break;   //R
           case 0x1b:  ausgabe = 83; break;   //S
           case 0x2c:  ausgabe = 84; break;   //T
           case 0x3c:  ausgabe = 85; break;   //U
           case 0x2a:  ausgabe = 86; break;   //V
           case 0x1d:  ausgabe = 87; break;   //W
           case 0x22:  ausgabe = 88; break;   //X
           case 0x35:  ausgabe = 89; break;   //Y
           case 0x1a:  ausgabe = 90; break;   //Z
    
           case 0x49:  ausgabe = 46; break;   //.
           
          }
          
           //werte[zahlzaehler] = ausgabe;
           LCD_Chr(1,(zahlzaehler+1),ausgabe);
          zahlzaehler++;
    
          //k++;
    }
    
    void main()
    {
      unsigned short i=0;
       
      TRISA       =    0xff;          //input
      PORTA       =    0x00;
      TRISB       =    0;             //output
      PORTB       =    0;
      TRISC       =    0;
      PORTC       =    0;             //output
    
      ADCON1      = 0x06;             // alle digital
    
      Lcd_Config(&PORTC, 3, 1, 2, 7, 6, 5, 4);
      LCD_Cmd(LCD_CLEAR);
      //LCD_Cmd(LCD_CURSOR_OFF );
    
      INTCON =  0;                  // Disable all interrupts
      Delay_ms(1000);               // Wait for keyboard to finish
      LCD_Cmd(LCD_CLEAR);
     do {
    /*
      if (Button(&PORTA, 2, 30, 1) )             // Menueauswahl
            {
             while((PORTA & 0x04)==0x04);
             enter = 1;
    
             menue = rotary(enter);
            }
     */
     
    //lesen();
    
    
    anzeige(lesen());
    
        while(PORTA.F4);           // Warten auf Paritybit
      //    if(PORTA.F3) parity=1; // Parity einlesen
          while(!PORTA.F4);        // Ende Paritybit
          while(PORTA.F4);         // Warten auf Stopbit
          while(!PORTA.F4);        // Ende Stopbit
    
          // wegschmeißen der nächsten 22 bit, 0xf0 und nächsten 11 bit
    
          for (i=0;i++;i<22)
          {
           while(PORTA.F4);        //  warten auf bit
           while(!PORTA.F4);       // Ende bit
          }
    
     /*   if ((Button(&PORTA, 4, 1000, 1)) && (zahlzaehler > 0))
        {
          //for ( zahlzaehler=zahlzaehler;zahlzaehler==0;zahlzaehler--)
          while(zahlzaehler > 0)
          {
          zahlzaehler--;
          LCD_Chr(1,(zahlzaehler+1),werte[zahlzaehler]);
        //  Lcd_Out(2, 3, "Hello!");
          delay_ms(50);
    
          }
        } */
    
      } while (1);
    }

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •