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 - 23.12.2010 10:52)
Als Antwort auf TowiTek RFID Antenne von Joerg - 22.12.2010 21:40
Ich nutze:
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


    Antwort schreiben


Antworten:

Re: TowiTek RFID Antenne (von Joerg - 4.01.2011 7:47)
    Re: TowiTek RFID Antenne (von Franz-Peter - 4.01.2011 15:06)
        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)
Re: TowiTek RFID Antenne (von Joerg - 23.12.2010 11:34)
    Re: TowiTek RFID Antenne (von Franz-Peter - 23.12.2010 12:23)
        Re: TowiTek RFID Antenne (von Joerg - 24.12.2010 7:41)
            Re: TowiTek RFID Antenne (von Franz-Peter - 24.12.2010 15:19)
            Re: TowiTek RFID Antenne (von Franz-Peter - 24.12.2010 10:49)
                Re: TowiTek RFID Antenne (von PeterS - 24.12.2010 11:25)
                    Re: TowiTek RFID Antenne (von Franz-Peter - 24.12.2010 13:13)
                       Re: TowiTek RFID Antenne (von PeterS - 25.12.2010 23:23)