Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > > > > > 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 > > > > > > > > Hallo Franz-Peter, > > > > > > > > vielen Dank für Deine Antwort. > > > > > > > > Hallo Peter, > > > > > > > > ist das so wie Franz-Peter es geschrieben hat ? > > > > > > > > > > > > > > > > Grüße Joerg > > > > > > Bei Puffergrößen von 0 darf man natürlich auf dem Puffer kein Byte empfangen bzw. senden. > > > Sonst gibt es Probleme. Puffergrößen ab 2 funktionieren, aber besser ist es natürlich man > > > benutzt vernünftige Werte. > > > > > > Gruss Peter > > > > Hallo Peter, > > > > das Problem ist aber, das ich nur Empfangen will, ohne zu Senden. > > Das Funktioniert aber nicht mit > > 5 byte Empfangspuffer > > 0 byte Sendepuffer > > > > Serial_Init_IRQ(0,buffer,5,0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD9600); > > > > Grüße Joerg > > > > > Hallo Jörg , Hallo Peter > > ich habe genau das gleiche Problem beim Programmieren des Beispiels > festgestellt. > Vermutlich ist der Sende und Empfangspuffer vertauscht. > Mit der Variablen könntest du recht haben. > Sollte aber funktionieren , wenn man einfach eine int Variablenfeld definiert. > > Vermutlich wird der Empfangs und der Sendepuffer