Hallo, ich bin schon lange in diesem Forum. Bisher nur passiv. Habe mir über die Jahre viel Hilfe hier holen können. Ich habe nun folgendes Problem. Vielleicht kann mir jemand helfen. Ich habe das myAVR Board USB mit einem Atmega8 und mit externem Quarz mit 3,6864 MHz. Die Fusebits sind dementsprechend auch gesetzt. $baud auf 9600. Von Conrad habe ich das Modul "TowiTek RFID-Antenne Best. 191553" Dieses gibt über RS232 den Tag aus, der rangehalten wird. So wie ich das verstandenhabe jedoch negiert. Ich habe nun mit einem MAX232 wieder richtig herum gebastelt und am Atmega mit RxD verbunden. Das LCD zeigt nun auch je nachdem welchen TAG ich vor de Atenne halte Code an. Leider stimmt dieser jedoch nicht mit dem aufgedruckten überein. Auch der bereits vorhandene Pollin-Bausatz als Referenz zeigt den richtigen Code an. Was mache ich falsch? Wie muss ich die 5 Bytes in Bascom einlesen? Hier bisher mein Code: . . . Dim Tags(5) As Byte Dim Wert As String * 10 Dim Hexwert(5) As Long Dim Hexwertgesamt As String * 40 $baud = 9600 Do Inputbin Tags(1) Hexwert(1) = Hexval(tags(1)) Inputbin Tags(2) Hexwert(2) = Hexval(tags(2)) Hexwertgesamt = Str(hexwert(1)) Hexwertgesamt = Hexwertgesamt + Str(hexwert(2)) Locate 1 , 1 Lcd Hexwertgesamt ; " " If Hexwertgesamt = "168507801052508" Then Locate 2 , 1 Lcd "TAG 1" End If If Hexwertgesamt = "7373916459868" Then Locate 2 , 1 Lcd "TAG 2" End If If Hexwertgesamt = "2109532131164" Then Locate 2 , 1 Lcd "TAG 3" End If Waitms 300 Loop . . . Es klappt zwar mit jedem Transponder eine andere Funktion auszuführen, da er immer andere Werte anzeigt und diese auch reproduzierbar sind. Jedoch wüsste ich schon gerne warum der angezeigte Wert nicht mit aufgedruckten Wert übereinstimmen. Wäre super, wenn mir da jemand auf die Sprünge helfen könnte. Danke und Grüße aus dem Schwarzwald. Andi
bastelwastel2708 schrieb: > Wäre super, wenn mir da jemand auf die Sprünge helfen könnte. Kannst ja mal ein paar Beispiele nennen. Welcher Code ist aufgedruckt und welcher wird dann angezeigt Vielleicht erkennt dann jemand, ob die Werte invertiert sind, oder LSB MSB vertauscht oder...
Hallo, danke für den Tip. Auf dem Transponder ist die Nr.: 0013546583 aufgedruckt. Der Pollin RFID-Bausatz zeigt mir diese auch im Display an. Mein "Wunderwerk" zeigt aber die Nummer: 2109532131164 an. Ich habe hier im Forum und an anderer Stelle im Netz noch weitere Hinweise gefunden, jedoch bekomme ich die richtige Nummer nicht angezeigt. Ich glaube ich bin mit dem INPUTBIN auf dem Holzweg. Ich seh auch keinerlei Übereinstimmung der Zahlen. Notfalls werte ich eben diese "falsche" Nummer aus. Ich habe vor, unsere ESD-Prüfstationen mit diesem RFID-Leser auszustatten. Da gehts es nur darum sich nach dem Prüfen der ESD-Schuhe nicht mehr in eine Lsite eintragen zu müssen, sondern sich mit einem Transponder zu identifizieren und mit Datum und Uhrzeit auf einer SD-Karte zu verewigen. Das ganze läuft mit einem Atmega2561 mit SD-Karte. Bis auf die RFID-Erkennung läuft alles. Nur mit diesen verd.... Bits in Bytes über die Serielle kapier ich nicht. Habs halt bisher noch nicht gebraucht. Danke für die Hilfe. Gruß, Andi.
Ich benutze auch den Towitek-leser an einem MyAvr-Board. Lies dir nochmal genau die Beschreibung durch. Der Leser hat eine serielle TTL-Schnittstelle ,keine RS232. Ein Max232 hat dort nichts zu suchen. INPUTBIN kannst du nur bedingt einsetzen.Es liest zwar eine angegebene Anzahl von Byte, erkennt aber nicht den Anfang vom Datensatz. Ich habe das so gelöst: Jedes empfangene Byte löst einen Interrupt aus. In der Isr wird jedesmal ein Timer neu gestartet (Länge ca 2fache Bytelänge). Erst wenn der Timer auslöst und genau 5 Byte emfangen wurden, wird der Datensatz als gültig markiert und ausgewertet.
Bevor du einfach alle Bytes als Long interpretierst, würde ich erstmal beginnen mir jedes Byte als Hex/Dezimal ausgeben zu lassen. Ich habe mal so ein 6€ Ding aus China gekauft (siehe Bild), und der gibt jedes Digit des Codes des RFID-Tags folgendermaßen aus: 0x1E-0x26 (30-38 dez) entspricht 1..9 und 0x27 (39 dez) entspricht "0". Dazu kommt noch ein Start-Byte (0xBD) gefolgt von einen "Count". Aus einen RFID-Tag mit der Nummer 0006292190 kommt also der Datenstrom
1 | 0xBD 0x05 0x27 0x27 0x27 0x23 0x1F 0x03 0xBD 0x06 0x26 0x1F 0x1E 0x26 0x27 0x28 0x03 |
2 | ^^Start | | |
3 | ^^Count | | |
4 | 0 0 0 6 2 ^^STOP | |
5 | ^^START |
6 | ^^Count |
7 | 9 2 1 9 0 ^^ENDE RFID-Tag |
8 | ^^STOP |
Wird bei dir vermutlich anders aussehen, aber so wäre jetzt erstmal meine Herangehensweise. Bei deinem Ding scheint es aber tatsächlich so zu sein, dass nur die 5 Nutzbytes ausgegeben werden. Oder du schaust dir den Datenstrom erstmal mit HTerm an, bevor du mit dem µC drauf losgehst. EDIT: Ich glaube du verwendest inputbin auch irgendwie falsch. Schau dir nochmal die Doku an
:
Bearbeitet durch User
Hallo, danke für den Tipp. Das mit HTerm werde ich heute mal ausprobieren. Wenn die Erkennung so wie sie jetzt ist sicher ist, wäre ich auch zufrieden. Ich weiß nur nicht, ob das Ding morgen einen anderen Wert des TAGs anzeigt als heute. Wäre nicht so toll. Auch sollte jeder Tag an jeder Prüfstation den gleichen Wert anzeigen.
Hi bastelwastel2708, ich habe mir mal das Datenblättchen angesehen. Dein Max brauchst du nur wenn du mit dem PC kommunzieren willst. Der Anschluss an den µC erfolgt direkt. Das mit dem invertieren, ist im Datenblättchen bescheuert ausgedrückt. Nimm den Max mal raus, dann solltest du passende Ergebnisse haben. Die Idee "werner alt" zum Erkennen des Endes des Strings ist super!
Hi, das ohne Max werde ich gleich mal testen. Hab zwar diret angeschlossen auch Daten erhalten, jedoch so glaubte ich jedenfalls auch nicht die Erwarteten. Hab da aber dann wohl nicht intensiv genug danach gesucht, weil ich mich dann gleich auf invertiert eingeschossen habe. Werde nach dem Auslesen und Erkennen des Datenstroms mal ohne Max weitermachen. Die Idee von "werner alt" muss ich mir mal in einer ruhigen Minute zur Gemüte führen.
Hi, habe heute mit HTerm die Daten der TAGs ausgelesen. Über den MAX232 erhalte ich für den Transponder "0013547888" die Hexadezimalzahl "3800CEB970" was zufälligerweise haargenau mit der Transpondernummer übereinstimmt. Der TAG sendet ständig die 5 Bytes wie im Protokoll angegeben. Da jedoch gestern Abend "jemand" meinen Atmega8 auf dem Board verfust hat, kann ich das auf dem Atmega nun leider nicht ausprobieren. Herr Pollin hat mir aber versprochen morgen erhalte ich Ersatz. Jetzt muss ich dann nur noch die 5 Bytes hintereinander in den Atmega bekommen und den Wert von hexadezimal in dezimal umwandeln. Ist je easy ;-) Danke für den Tip mit HTerm.
Ach ja, "Ist ja easy" war eher sarkastisch gemeint. Und was ich gerade noch bemerkt habe die letzten 3 Bytes reichen zu Identifizierung der Transpondernummer. "CEB970" ergibt dann die 13547888.
Hallo, Neuen Atmega8 ins Board eingesteckt und weiter experimentiert. Es funktioniert also tatsächlich ohne Invertierung des Signals. Die Antenne direkt angeschlossen, erhalte ich die korrekten Daten. Hier kurz das Einlesen: ********************************* Inputbin Tag_byte(1) ' wandelt in Hexadezimal Tag_byte_hex(5) = Hex(tag_byte(5)) Tag_byte_hex(1) = Hex(tag_byte(1)) Tag_byte_hex(2) = Hex(tag_byte(2)) Tag_byte_hex(3) = Hex(tag_byte(3)) ' fügt jedes Byte hinterinander in einen String Tag_byte_hex_gesamt = Tag_byte_hex(5) + Tag_byte_hex(1) + Tag_byte_hex(2) + Tag_byte_hex(3) ' wandelt Hex-String in Dezimalzahl um Tag_nummer = Hexval(tag_byte_hex_gesamt) Locate 1 , 1 Lcd Tag_nummer ; " " ********************************* Bitte nicht wundern, ich schreibe den Code immer so kompliziert. Ich mus das schrittweise machen, damit ich das auch in einem Jahr noch kapiere. Wie "werner alt" das beschrieben hat, muss ich jetzt nur noch die 5 Bytes "extrahieren". So wie das Programm jetzt geschireben ist, läuft es zwar fehlerfrei, wenn ich jedoch noch Code hinzufüge, sprich die Laufzeit des Programms länger wird, erhalte ich wirre Zeichen. Ich nehme auch an, dass das Ganze dann auf meinem Atmega2561 mit 16MHz kompletten Schrott anzeigt. Ich bin aber froh, das ich das mit Eurer Hilfe bis hierhin hinbekommen habe. Jetzt gehts an die Interrupts, ISR und Timer. Ohje und Gruß
Hallo, war heute wieder an meinem Projekt tätig. Das Erkennen der TAGs funktioniert jedoch sehr unsicher. Je nachdem wo ich beim Lesen in die 5 Bytes "hineinspringe", bekomme ich Wirrwarr. Ich erwische nicht jedes Mal den Anfang der 5 Bytes. Ich habe nun folgendes probiert und bin bis jetzt sehr zufrieden damit: ich nehme einen Atmega8 mit Minimalbeschaltung und 3,6864 MHz Quarz auf einer kleinen Lochrasterplatine. Das Miniprogramm liest ständig die an RxD angeschlossene RFID-Antenne und auf TxD geht der erkannte Code wieder raus auf den Atmega 2561. Der Vorteil: was da ankommt hat dann gleich 2 Extrabytes "oD" und "0A", die ich dann gleich zum Erkennen des Anfanges des Pakets hernehmen kann. Und das Programm auf dem Atmega8 ist so klein gehalten, dass dieser immer den Anfang der 5 Nutzbytes erwischt. Ist zwar ein bisschen naja.... Aber die 1,90 für den Atmega und ein paar Cent für den Quarz. Und das kleine Teil passt auch noch gut ins Gehäuse. Hätte zwar auch gleich den vorhandenen Pollinbausatz nehmen können, der ist mir aber um einiges zu groß für den Einbau. Und so wie ich das sehe, ist der auch nicht mehr lieferbar. Im Anhang ein JPG von meinem letzten Projekt. Eine Heizungssteuerung, die auch über einen Webserver (von myAVR) Ein- und Ausgeschaltet werden kann. So in etwa sieht dann die ESD-Prüfstation aus, nur in einem Pultgehäuse und mit RFID-Antenne. Gruß
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.