Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: TowiTek RFID Antenne Kategorie: Sonstige Hardware (von Franz-Peter - 4.01.2011 15:06)
Als Antwort auf Re: TowiTek RFID Antenne von Joerg - 4.01.2011 7:47
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > > Hallo,
> > > ich versuche gerade mit meine Projectboard PRO128 die
> > > TowiTek RFID Antenne mit dem entsprechenden Beispiel
> > > (siehe unten) in Betrieb zu nehmen.
> > > Ich habe aber noch einige Probleme.
> > >
> > > Da meine Serielle Schnittstelle 0 bereits belegt ist, benutze ich Seriell 1.
> > >
> > >
> > > In dem Beispiel steht
> > >
> > >  // 5 byte Empfangspuffer - 0 byte Sendepuffer
> > >  Serial_Init_IRQ(0,buffer,0,5,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD9600);
> > >
> > > Sind die 0 und 5 f├╝r die Buffer nicht verdreht????
> > >
> > > in der Doku steht
> > >
> > > void Serial_Init_IRQ(byte serport,byte ramaddr[],byte recvlen,byte sendlen,byte par,
> > >
> > > Dann wird folgender Vergleich durchgef├╝hrt:
> > >
> > > if (felder[i]==0x100)break;                      
> > >
> > > felder ist doch ein Byte und kann niemals 0x100 werden oder????
> > >
> > >
> > > F├╝r Hilfe w├Ąhre ich sehr dankbar....
> > >
> > >
> > > Gr├╝├če Joerg
> > >
> > >
> > >
> > >
> > > /*' Auslesen der RFID - Antenne f├╝r C-Control #191553
> > > ' In diesem Programm werden bis zu 10 Karten ausgelesen und ├╝berpr├╝ft
> > > ' wird eine g├╝ltige Karte erkannt wird LED1 geschalten
> > > ' Ausgang des Lesers wird direkt an Port D.0 (Mega32) oder
> > > ' Port E.0 (Mega 128)angeschlossen
> > > ' erforderliche Library: IntFunc_Lib.cc
> > > ' passende Transponder z.B. #191214,#191201,#191034,#191518,#130245,#130274
> > > ' by hiaslsoft 2010
> > > */
> > >
> > >
> > > // 5 byte Sende + Empfungspuffer + 6 byte interne FIFO Verwaltung
> > > byte buffer[11];                                // Array f├╝r 232 deklariert
> > > byte felder[10];                                // Array f├╝r Daten aus der Schnittstelle
> > > byte count;
> > > byte user[10][5]=                               //10 User + 5 Byte Daten
> > > {125,1,2,0,3,            //User1
> > > 125,1,2,232,90,          //User2
> > > 1,197,171,26,48,         //User3
> > > 125,1,2,0,3,             //User4
> > > 129,1,2,0,3,             //User5
> > > 1,127,188,47,128,        //User6
> > > 125,1,2,0,3,             //User7
> > > 125,1,2,0,3,             //User8
> > > 125,1,2,0,3,             //User9
> > > 129,113,0,232,90         //User10
> > > };
> > >
> > > //------------------------------------------------------------------------------
> > > // Hauptprogramm
> > > //
> > > void main(void)
> > > {
> > >
> > >     count=1;
> > >         //Init RS232: 9600 bps, 8 Bit, 1 Stop, NP
> > >     // 5 byte Empfangspuffer - 0 byte Sendepuffer
> > >     Serial_Init_IRQ(0,buffer,0,5,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD9600);
> > >     Port_DataDirBit(PORT_LED1,PORT_OUT);
> > >     Port_WriteBit(PORT_LED1,PORT_OFF);
> > >
> > >
> > > while(true)
> > >
> > > {   byte i;
> > >     i=0;
> > >     AbsDelay(500);                             // 500m Sek. Wartezeit bis zur Gr├Â├če des
> > >                                                 // Empfangspuffers werden die seriellen
> > >                                                 // Eingaben aufgezeichnet
> > >
> > >
> > >     while (i<=4)
> > >     {
> > >         felder[i]=Serial_ReadExt(0);
> > >
> > >             if (felder[i]==0x100)break;                      // bei 0x100 ist der Puffer leer
> > >             else ++i;                                       //solange Einlesen , bis 5Byte ausgelesen
> > >     }
> > >         if (felder[0]!=0)                                   // Abfrage ob das Array gef├╝llt wurde
> > >
> > >         {
> > >         display();                                     //Code anzeigen
> > >         vergleich();                                   //Code ├╝berpr├╝fen
> > >         AbsDelay(500);
> > >         }
> > >
> > > }
> > > }
> > > void display(void)
> > > {
> > > int i;
> > > for(i=0;i<=4;i++)
> > > {
> > > Msg_WriteInt(felder[i]);                                 //Ausgeben der 5 Codebytes
> > > Msg_WriteText("|");
> > > }
> > > Msg_WriteText("r Leseversuch: ");                       //Anzahl der Leseversuche
> > > Msg_WriteWord(count);
> > > Msg_WriteText("r r");
> > > ++count;
> > > }
> > > void vergleich(void)
> > > {
> > >     int x,usr;
> > >     byte open;
> > >     open=false;
> > >     usr=0;
> > >         while(usr<=9)
> > >             {
> > >             x=0;
> > >             while(x<=4)
> > >                 {
> > >                 if (felder[x]==user[usr][x])          // Vergleich des eingelesenen Codes und den Usern
> > >                     {
> > >                     open=true;                        //flag wird gesetzt , wenn die einzelnen bytes
> > >                     ++x;                             // ├╝bereinstimmen
> > >                     }
> > >                 else
> > >                     {
> > >                     open=false;                       // wird ein falsches byte endeckt wird der n├Ąchste
> > >                     break;                            // usercode ├╝berpr├╝ft
> > >                     }
> > >
> > >                 }
> > >             if (open==true)break;                       //sobald ein g├╝ltiger Code registriert wird
> > >                                                       //wird die Schleife verlassen
> > >             ++usr;                                     //n├Ąchster  User wird ├╝berpr├╝ft
> > >             }
> > >       if (open==true)
> > >         {                                             //bei einem g├╝ltigen Code wird LED1 eingeschalten
> > >         Port_WriteBit(PORT_LED1,PORT_ON);             //LED1 einschalten
> > >         AbsDelay(1500);                               //variable Verz├Âgerung (T├╝r├Âffner)
> > >         Port_WriteBit(PORT_LED1,PORT_OFF);            //LED1 ausschalten
> > >         Serial_Init_IRQ(0,buffer,0,5,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD9600); //serielle Schnittstelle leeren
> > >         }
> > > }
> > Hallo Joerg,
> > das w├╝rde ich auch so sehen - so kann das Beispiel nicht wirklich funktionieren.
> > Das mit der Bytevariable beim Empfang mit Serial_ReadExt ist mir auch schonmal passiert. In der
> > Variable steht dann 0 wenn kein Zeichen empfangen wurde. Das ist auch solange ok, wie ein NULL-Zeichen
> > nie empfangen werden kann. Da die Towitek Antenne die Bytes des Transponders aber nicht Hex-Codiert,
> > sondern direkt bin├Ąr ausgibt, kann das sehr wohl passieren.
> > Ich habe die Antenne auch im Einsatz ( an meiner Anlage sind 4 Antennen angeschlossen) und bisher
> > auch recht gute Erfahrung damit gemacht.
> > Es gibt aber noch ein Problem auf das Du achten musst: Bleibt der Transponder im Empfangsbereich, so
> > wird die ID alle 200ms erneut gesendet. Leider sendet die Antenne keine Anfangs- oder Endekennung.
> > Wenn der Empfang sich also nur 1mal irgendwie 'verschluckt' und 1 Zeichen verlorengeht kommt eine einfache
> > Empfangsroutine aus dem Takt und Du bekommst verschobene TransponderID's.
> > Da es keine Anfangs- und Endekennungne gibt, kann man das meiner Meinung nach nur ├╝ber eine
> > Zeit├╝berwachung erkennen: Die 5 Zeichen eines Transponders m├╝ssen innerhalb eines bestimmten
> > Zeitfensters ankommen, sonst ist die Synchronisation verloren gegangen und das oder die letzten
> > Zeichen geh├Âren schon zur n├Ąchsten ├ťbertragung.
> > Gru├č
> > Franz-Peter
>
> Hallo Franz-Peter,
>
> ich habe das RFID Demo jetzt zum laufen bekommen. Allerdings frage ich mich ob das mit dem
>
>   // 5 byte Empfangspuffer - 0 byte Sendepuffer
>   Serial_Init_IRQ(0,buffer,0,5,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD9600);
>
> so richtig ist. Meiner Meinung nach sind die 0 und 5 verdreht.
>
> Allerdings wenn ich sie verdehe, dann geht das Demoprogramm nicht mehr...
>
> Hast Du daf├╝r eine Erkl├Ąrung??
>
>
> Grue├če Joerg
>
Hallo Joerg,
grunds├Ątzlich hast Du Recht, dass in dem Beispiel die 0 und die 5 verdreht sind. Der erste Parameter
bezieht sich definitiv auf den Empfangspuffer, der 2. auf den Sendepuffer. Die 0 als Puffergr├Â├če
scheint aber grunds├Ątzlich problematisch zu sein. Ich habe bei meiner Anwendung mal ein wenig mit
den Puffergr├Â├čen gespielt. An der seriellen Schnittstelle h├Ąngt ein Hand-Held Terminal. Die
empfangenen Zeichen kommen daher eher einzeln an (Tastatur).
Wenn ich den ersten Parameter(Empfangspuffer) auf 2 setze, funktioniert es noch, setzte ich ihn auf
1 werden keinerlei Tastendr├╝cke mehr erkannt. Mit 0 geht es aber wieder!! Das ist aber sicher
problematisch, da dann die Berechnung der notwendigen Array-Gr├Â├če nicht stimmt. Unklar ist, wieviel
Puffer die Routine dann verwendet (256Byte??)
Wenn ich den Sendepuffer auf 0 stelle gibt es Chaos, und es werden andere Werte definitiv ├╝berschrieben.
0 bedeutet da offensichtlich einen gro├čen Puffer.

Letztendlich kann die Zusammenh├Ąnge nur Peter erkl├Ąren, aber im derzeitigen Zustand d├╝rfte 0 als
Puffergr├Â├če nicht erlaubt sein, weder beim Sende- noch beim Empfangspuffer.
Gru├č
Franz-Peter


    Antwort schreiben


Antworten:

Re: TowiTek RFID Antenne (von Joerg - 4.01.2011 15:21)
    Re: TowiTek RFID Antenne (von PeterS - 5.01.2011 9:50)
        Re: TowiTek RFID Antenne (von Joerg - 5.01.2011 10:51)
            Re: TowiTek RFID Antenne (von hiaslsoft - 5.01.2011 13:36)
                Re: TowiTek RFID Antenne (von hiaslsoft - 5.01.2011 15:19)
                    Re: TowiTek RFID Antenne (von Joerg - 5.01.2011 16:19)