hallo an alle hat jemand schon mal mit dem RFID Chip von Philips HTRC110 rumgebastelt. Ist ein Lesebaustein für HITAG TAG's 125 khz. Gruss und Hellau Juppo
Hallo Juppo, jau, ich habe damit einen Leser gebaut. Ist allerdings schon eine Weile her, ich war jedoch nur für die Hardware zuständig. Die Unterlagen sind doch eigentlich vertraulich, oder? Jedenfalls ist das Ding eine Preciose, Du brauchst eine TOP-Versorgung und ein gutes Layout, sonst haste Ärger. Und von der Programmierung auch nicht ganz ohne,zumal unsere Doku noch Fehler enthielt. Ohne den LA wäre da nix gegangen. Gruß Wolfram
Danke für die Antwort Ich habe da ein fertiges Modul ,das kann schon alles, nur ich möchte selber den HTRC110 Programmieren. Datenblatt von Philips ist ja nicht so doll,gibt es noch woanders Info ?? Gruss Juppo
Hallo Juppo, nun, der HTRC110 ist ein sehr leistungsfähiger Chip zum Aufbau eines RFID-Readers. Um ihn zu verstehen und optimal ausnutzen zu können, wirst Du Dich da gründlich einarbeiten müssen - macht aber Spaß! Also zunächst solltest Du das System des HTRC verstehen: Die meisten RFID-Lesegeräte leiten das Antennensignal über einen AM-Demodulator (im einfachsten Fall Diode und Kodensator), gefolgt von Bandpassfilter und Verstärker. Nicht so der HTRC110: Hier wird das Antennensignal zu einem ganz bestimmten Zeitpunkt abgetastet und dieser Wert dann Verstärkt und digitalisiert. Erwischst Du hier den falschen Zeitpunkt zur Abtastung, kann es sein, daß Du kein auswertbares Signal bekommst, oder ein genau invertiertes. Der Abtastzeitpunkt wird phasenstarr zum Takt des HTRC mit dem Befehl SetSamplingTime als 64-Bit-Wert vorgegeben. Die Phasenlage des modulierten Signals ist abhängig vom Antennenschaltkreis. Sprich, durch Änderung der Induktivität der Antennenspule (z.B. Metall in der Nähe der Antenne) ändert sich die Phasenlage. Vorteil dieser Methode ist, daß der HTRC nicht nur ASK sondern auch PSK und FSK Transponder mit entsprechender Software lesen könnte. Diese sind jedoch so selten, daß ich sie nie implementiert habe. Um die Funktion des HTRC110 möglichst schnell zu verstehen, hatte ich mir damals ein Programm geschrieben, mit dem ich alle Konfigurationsbits des HTRC vom PC aus mit einem Delphiprogramm per Mausklick verstellen und anzeigen konnte. So lernt man die Funktionen und Zusammenhänge am schnellsten. Viel Erfolg, Markus_8051
Hallo Markus Mag ja garnicht Fragen. Das Programm könnte ich das bekommen?? Gruss Juppo
Nun, das Programm besteht aus zwei Teilen, das eine in Delphi auf dem PC, das andere auf dem µC im Lesegerät. Ich glaube kaum, daß Dein Lesegerät auch auf einem 89S8252 basiert und der HTRC genauso an den µC angeschlossen ist wie bei mir. Von daher wirst Du mit der SW nicht viel anfangen können. Auch die PC mußt Du sicher umschreiben. Hast/kannst Du Delphi? Ich schau mal, was ich davon noch finde... Markus_8051
Hi Bei der Platinen mit dem HTRC kann ich dir Digitalen leitungen ja kappen und auf einen 89C8252 legen ,da habe ich eine Platine mit Display und serielle usw. Delphi kann ich ein wenig. Aber dann könnte ich die kommandos die ja vom PC kommen auch direkt im µc verarbeiten und dort austesten. Naja ,kannste ja mal schauen. Gruss juppo
Hallo! Ich habe mir mit dem HTRC11001 und einem ATMega8 einen RFID Reader gebaut. Von der Hardware her funktioniert alles schon perfekt, ich kann alle Register ansprechen und die Manchester-Daten auslesen. Ich verwende Transponder vom Typ "Unique" mit 64-bit: http://www.barcode-fonts.de/sokymat/Unique.pdf Ein gültiges Datenpacket (64-bit) erkennt man also an den 9 Startbits, dem Stopbit und den Zeilen- und Spalten Prüfsummen. Es kommen aber relativ oft "falsche" Daten an, manchmal invertiert, manchmal nicht nachvollziehbar. Dabei handelt es sich aber nicht um Störungen, weil in einem solchen Fall die fehlerhaften 64-bit immer wieder hintereinander ausgegeben werden... Weiter oben im Thread wurde schon mal kurz "falsche Phasenlage" erwähnt. Kann mir jemand nähere Hinweise zu den Einstellungen des HTRC Chips geben, besonders die Parameter "Sampling Time" und die Verstärkungs- und Filtereinstellungen ? Gruß Stefan
Hallo Stefan, lies Dir mal das Funktionsprinzip des HTRC110 durch. Während "normale" Reader hier den Weg einer einfachen AM-Demodulation mit Diode und Lade-Kondensator wählen, benutzt der HTRC eine andere Methode. Er speichert zu einer "bestimmten Zeit" den aktuellen Spannungswert des HF-Signals und gibt diesen auf einen AD-Wandler. Dadurch hat er die Möglichkeit, nicht nur amplitudenmoduliernde Transponder lesen zu können, sondern auch phasenmodulierende. Für den Unique, der AM-Moduliert stellst Du diese "bestimmte Zeit" so ein, daß Du genau im Maximum der Amplitude samplest. Wie findet man das Maximum? Nun, mit der Sampling-Zeit verstellst du die Phasenlage von eben diesem Sample-Zeitpunkt zur internen Oszillatorfrequenz des HTRC. Es ist aber leider nicht so, daß Du bei Phasenlage "0" immer genau im Maximum liegst. Vielmehr ist die Phasenlage des Maximums der Antennenspannung ganz wesentlich von den elektrischen Eigenschaften der Antenne abhängig. Ebenso verschiebt sich die Phasenlage wieder, wenn große Metallteile in das Antennenfeld geraten. Für die Phasenlage (Samplingtime) kannst du einen 5-bit-Wert in das entsprechende HTRC-Register schreiben. So entspricht dieser Wert (0-63) einer Phasenverschiebung von 0-360°, ein Digit also 5.625°. Für den Anfang probiere einfach mal die Werte in Schritten von 8 (also 45°) durch, und beobachte dabei daß Datensignal. Irgendwo wirst Du den normalen Bitstrom haben, irgendwo einen genau invertierten, dazwischen wird es jeweils einen Punkt geben, wo du keinen Transponder lesen kannst. Hast Du diese vier Punkte gefunden, kannst Du die Schrittweite veringern und die Punkte genauer bestimmen. Zur automatischen Einstellung der SamplingTime kannst Du Dir auch ein Programm schreiben: der HTRC hat die Möglichkeit, einen Samplingwert zu speichern, und diesen mit dem aktuellen Samplingwert zu vergleichen. Zur Einstellung der Filter und Verstärkungsfaktoren mußt Du einfach testen, was bei Dir am besten funktioniert. Frohe Ostern Markus_8051
Hi Markus, Danke für die Infos, das ist doch schon mal was. Habe inzwischen auch eine Application Note von Phillips gefunden, wo auch noch ein paar Infos drin stehen: http://www.semiconductors.philips.com/acrobat_download/other/identification/rc110an2.pdf Darin steht auch beschrieben wie man die Sampling-Time einzustellen hat: Die Phasenlage auslesen, Wert mit 2 multiplizieren, Offset addieren und das ganze als Sampling-Time setzen (Abschnitt 9.2.3). In der AN wird eine "typische" Offset-Konstante von 0x3F angegeben, scheint wohl alles andere als das Optimum zu sein. Ich werde also mal wie von Dir vorgeschlagen die Sampling-Time in 45° Schritten durchtesten. Zu der Sache mit dem Amplitudenvergleich (AMPCOMP): Muss ich das ganze machen wenn ein Transponder an der Antenne anliegt oder wenn die Antenne ohne Belastung ist ? Gruß Stefan
So, hab nun wieder zig Stunden rumprobiert: In der Tat kann ich in Abhängigkeit der Sample-Time Daten dekodieren oder auch nicht, immer hin. Was ich jedoch nicht verstehe: Habe ich eine passende Sample-Time gefunden und nehme den Transponder von der Antenne weg und wieder dran, stimmt die Sample-Time wieder nicht mehr... Auch hab ich mir die Daten mal genauer angesehen: Wie gesagt wiederholen sich die Daten des Transponders alle 64-bit, das zeigt mir dass ich schon mal kein Rauschen o.Ä. dekodiere. Allerdings stimmen die Daten nie wirklich (Zeilen- und Spaltenparitäten), und irgendwie sehen die Werte auch "auffällig" falsch aus: ff98899ee1199666 = 1111111110011000100010011001111011100001000110011001011001100110 ff8cc55ff1188aa6 = 1111111110001100110001010101111111110001000110001000101010100110 Diese beiden Werte bekomme ich wenn ich den Transponder an die Antenne führe, und an der Samplingzeit drehe bis was dekodiert wird. Mit den GAIN und FILTER Werten hab ich auch etwas experimentiert, brachte aber keinen Unterschied... Noch Ideen ? Die Verzweiflung beginnt in Agression überzugehen, aber die Hoffnung stirbt zuletzt :-( Stefan
So, wieder viele verzweifelte Stunden später: Wie es scheint, ist von der Hardware her alles in Ordnung. Ich habe mir von Conrad eine "Referenzplatine" besorgt, die ebenfalls mit dem HTRC11001 arbeitet, und habe den Datenausgang des RFID-Chips dieser Platine abgegriffen und auf meinen AVR geführt. Das Ergebnis ist das gleiche: In einem "Durchgang" (Transponder an die Antenne führen, Daten anglotzen und wieder weg) werden brav immer wiederholt die selben 64 Bits ausgegeben. Vergleicht man aber die 64-Bit-Pakete aus den einzelnen Durchgängen sind diese oft unterschiedlich :-( Hier ist zunächst mal meine Manchester-Routine:
1 | SIGNAL (SIG_INTERRUPT0) |
2 | {
|
3 | static unsigned char bitcount = 8; |
4 | static unsigned char old_cnt; |
5 | static unsigned char data; |
6 | |
7 | if ((TCNT0 - old_cnt) < MAN_SHORT_TO_LONG) |
8 | return; |
9 | |
10 | old_cnt = TCNT0; |
11 | |
12 | data <<= 1; |
13 | |
14 | if (bit_is_clear(PIND, PD2)) |
15 | data |= 1; |
16 | |
17 | bitcount--; |
18 | |
19 | if (bitcount == 0) |
20 | {
|
21 | bitcount = 8; |
22 | if (bit_is_clear(PINC, PC5)) |
23 | UDR = data; |
24 | }
|
25 | |
26 | }
|
Die Konstante MAN_SHORT_TO_LONG habe ich schon mehrfach mit Oszilloskop und Timer verifiziert und liegt richtigerweise genau in der Mitte zwischen einer ganzen und einer halben Bitzeit (also 3/4 Bitzeit). Bei 16 MHz und einem Vorteiler von 64 ergibt sich der Wert 94. Bitte auch nur bei der geringsten Idee nicht zögern hier zu Antworten, nun weiß ich wirklich nicht mehr weiter... Gruß Stefan
Versuche doch einfach mal vor jedem Lesevorgang die Sampling-Time neu zu berechnen und zu setzen. Der Antennenschwingkreis wird je nachdem wie nah sich der Tag an der Antenne befindet unterschiedlich belastet. Daher stimmen die einmal gesetzten Werte irgendwann nicht mehr. Wie oft treten denn die falschen Datenpakete auf?
Hallo Stefan, die Daten, die Du bekommst, sehen ja schon recht regelmäßig aus. Hast Du ein (gekauftes) Lesegerät, mit dem Du auslesen kannst, welche Nummer der Transponder wirklich hat? Oder hast Du ein Oszi mit entsprechend breiter Zeitbasis, womit Du den TP mal "per Hand" dekodieren kannst? Dann könntest Du die Hardware nämlich schon mal ausschließen, wenn Du jedesmal den gleichen Datenstrom bekommst, nur die SW macht daraus etwas anderes... Daß die Antenne durch Annäherung eines TAGs so verstimmt wird, daß ein Neutuning nötig ist, kann ich eigentlich nicht bestätigen. Wäre evtl. möglich, wenn Antenne- und Transponderspule die gleiche Geometrie haben und exakt aufeinander liegen... Laß halt erstmal (bis die SW stabil läuft) ein paar cm Platz zwischen den beiden Spulen. Mir scheint, Deine Manchester-Dekodierung ist noch etwas fehlerhaft: Von der Beschreibung Deines Fehlers her, würde ich sagen, du hast die Variablen zu Beginn der Dekodierprozedur seit dem letzten Mal nicht neu initialisiert. Wenn ich mir Deinen Code ansehe, glaube ich, da fehlt etwas. Ich kann mich da schwach an etwas erinnern: Du mußt beim Manchester-Code den Zustand des letzten Bits in die Berechnung des neuen Bits mit einfließen lassen. Welche Zeiten mißt Du? Nur die Low- oder High-Zeit oder beide? Gruß, Markus_8051
Hallo ! So, es geht langsam in die richtige Richtung... Zunächst hatte ich einen kleinen aber wirkungsvollen Fehler bei dem Bitgeschiebe drin, die ausgelesenen Daten sind nun schlüssig mit dem Datenblatt des Transponders. Dann hab ich das "Tuning" des Schwingkreises noch ein gutes Stück verbessert, hab nun so 80 V Spitze-Spitze am "Tap-Pin". In weiser Vorraussicht hatte ich 2 SMD Pads für 2 Kondensatoren (parallel) auf der Platine vorgesehen. Dann hieß es reinlöten, rauslöten, rein... naja, die richtige Anzahl an rein und raus spar ich mir hier ;-). Jedenfalls hat sich 820pF + 470pF = 1290pF als recht gut erwiesen. Ich verwende übrigens diese Conrad Antenne, die sind im Datenblatt mit einer Induktivität von 1,04 mH angegeben. Rechnerisch (Thomson Formel) kommt man da bei 125kHz auf 1559pF. Der Rest scheint sich wohl durch parasitäre Kapazitäten etc zu ergeben. Zur Manchester-Dekodierung: Eigentlich müsste es so passen, hier mal mein Denkansatz, vielleicht hab ich was verpeilt: Sieht man sich den Manchester-Code an, sieht man dass in den Bit-Mitten IMMER ein Pegelwechsel stattfindet, an den Bit-Grenzen nur manchmal. Ich warte also zunächst auf eine "lange" Zeit, danach bin ich auf jedenfall in der Bit-Mitte, und das System ist "eingerastet". Hab ich nun ein High (also kurz nach der Bit-Mitte) wird eine 0 eingelesen, hab ich ein Low eben eine 1. Wenn der nächste Interrupt-Aufruf zu "schnell" stattfindet (halbe Bitzeit), wird dieser abgebrochen und auf den nächsten Pegelwechsel gewartet. Damit werden die Flanken an den Bitgrenzen ausgeblendet. Der IRQ Handler reagiert also bei dieser Vorgehensweise auf beide Flanken. Die Bits werden in einen Ringbuffer geschoben, und wenn darin das Muster 0b0111111111 (Stop-Bit vom letzten Durch + 9 Startbits vom aktuellen Durchgang) werden die Daten eingelesen. Im Moment ist es so dass wenn ich den Transponder an die Antenne führe mal Daten dekodiert werden, manchmal nicht, in etwa mit einer Trefferquote von 50%... Die 50% fand ich etwas auffällig, weswegen ich einfach mal die Biterkennung (High nach Bit-Mitte -> 1, Low -> 0) invertiert habe, und siehe da, gleiches Ergebnis. D.h. dass ich die Daten vom Transponder machmal invertiert bekomme. Nun weiß ich nicht ob das prinzipbedingt normal ist, und ich die Software so bauen muss dass invertiert und nicht-invertiert dekodiert werden muss ? Den Orginal-Conrad-Leser hab ich noch etwas näher analysiert, der HTRC wird nur 1x beim Einschalten konfiguriert, danach werden keine Daten mehr an das IC gegen. Es gibt auch einen Sourcecode in Basic auf www.fastavr.com , aber leider sind meine Basickenntnisse recht schlecht, aber ich glaube auch hier rausgelesen zu haben dass der HTRC nur 1x konfiguriert werden, und vor allem die Daten nicht doppelt (invertiert und nicht-invertiert) dekodiert werden. So, sorry für den langen Text, aber vielleicht (ich hoffe) findet jemand noch Ungeziefer in dieser Denkblase. Gruß Stefan
@Marcus Stimmt, die Verstimmung wird erst relativ groß, wenn sich ein Transponder mit ähnlicher Geometrie wie die Antenne in nächster Nähe befindet, also die Kopplung beider Spulen relativ groß wird. Ich hatte immer Probleme im Nahbereich, daher habe ich die Zeit dann vor jedem Lesen geändert. @Stefan "Sieht man sich den Manchester-Code an, sieht man dass in den Bit-Mitten IMMER ein Pegelwechsel stattfindet, an den Bit-Grenzen nur manchmal. Ich warte also zunächst auf eine "lange" Zeit, danach bin ich auf jedenfall in der Bit-Mitte," So kann man natürlich vorgehen. Allerdings gibt es lange High und lange Low-Impulse. Bist Du sicher, dass du den richtigen erwischst? Beim Unique gehe ich im Prinzip ähnlich vor. Allerdings syncronisiere ich auf die Bitmitte (bei meiner Implementation eine lange 0) und taste das Signal dann nach ca. 1/4 Bitzeit, also bei 3/4 ab. Bei jeder Flanke in Bitmitte wird das Programm wieder mit dem Datenstrom synchronisiert. Es reicht im Prinzip (wenn deine Routinen funktionieren), wenn du 64 Bit einließt und dir dann den Anfang im Ringpuffer suchst. Geht wesentlich schneller, da du nicht auf den Header warten musst.
@Steffen: Wenn Du mich meintest, ich schreibe mich mit "k" !!! Stimmt, auf diese Art geht es natürlich schneller... @Stefan: 1mH ist ein guter Wert für eine Antennenspule - frag mich nicht warum, aber damit habe ich - unabhängig vom Rest der Reader-Elektronik - immer die besten Lesereichweiten erzielt. Hat jemand zufällig eine plausible Erklärung dazu? Anschließend die Spannung am Tap-Point durch Variation der Kapazität auf Maximum abgleichen. Eine Kapazitätsdekade tut hier gute Dienste... Zur Manchester-Dekodierung: Sorry, ich hatte meine SW auf dem 8051 geschrieben. Der kann nur falledne Flanken erkennen. Das reicht zur Manester-Dekodierung aus, allerdings muß man sich dabei den letzten Bit-Zustand merken. Zu den invertierten Daten: Seltsam, ich hatte nie Probleme mit invertierten Daten. Wie ich oben schon geschrieben habe: Wenn man die SamplingTime des HTRC um 180° verdreht, bekommt man invertierte Daten. In diesem Fall konnte meine Software dann gar nichts mehr lesen. Bei Dir müßte sie ja trotzdem in 50% der Fälle ein Ergebnis liefern, wenn wirklich der Transponder mal invertiert und mal normal sendet. Markus_8051
Hi! >Allerdings gibt es lange High und lange >Low-Impulse. Bist Du sicher, dass du den richtigen erwischst? Ist egal: Nach einem langen Low-Impuls bin ich in der Bit-Mitte und habe eine steigende Flanke, d.h. eine Daten-0, nach einem langen Low-Impuls eine Daten-1. >Allerdings syncronisiere ich >auf die Bitmitte Das sollte bei mir auch so sein, nach einem langen Impuls ist man immer in der Bitmitte. Aber gute Idee mit dem 64-bit Ring, werde ich mal ändern, also 64-bit einlesen, und dann dann Ring untersuchen wo die Startsequenz ist... Allerdings bin ich mir immer noch nicht sicher ob es normal ist dass die Daten vom HTRC manchmal invertiert ankommen (allerdings wie gesagt in einer "Session" - Transponder an die Antenne, warten und wieder weg - immer gleich, ohne die Sampling-Time zu verändern). Naja, ich werd mal eben den Code etwas umschreiben dass erst 64-bit ganz eingelesen werden und dann nach Start-Sequenz suchen. Bis denn, Stefan
@Markus Sorry, werde ich das nächste mal beachten. @Stefan "Ist egal: Nach einem langen Low-Impuls bin ich in der Bit-Mitte und habe eine steigende Flanke, d.h. eine Daten-0, nach einem langen Low-Impuls eine Daten-1." Ist richtig, hätte aber eine evtl. Fehlerquelle sein können. Was mir aber recht seltsam erscheint, wenn du bisher auf die Startsequenz gewartet hast, wie dann falsche Daten kommen können, da die Startsequenz ja generell nur einmal auftaucht. 9 mal Eins ist sonst eigentlich ausgeschlossen. Da wird wohl nur der Vergleich der Daten mit einem LA oder Speicher-Oszi Aufschluss bringen.
Hallo, mein Deutsch ist leider nicht so gut, ich bin aus Norwegen. Ich habe ein RFID reader, mit HTRC110 und Atmega 8 gemacht. Ich habe einige Problem mit dem Kommunikation zwischen die atmega und die HTRC. Können jemand upload das Schema für die Hardware. Ich glaube daß ich habe Problemet min meinen. Vielen dank!
@eric Liest du noch hier? Die Hardware ist unproblematisch. Am besten verwdndest du für DO einen interruptfähigen Eingangspin. Hier als beispiel ein Kartenschloß(noch nicht fertig)
@eric Hast du den Modepin auf ground? sonst läuft die Kommunikation durch sehr langsame Filter.
Hallo, ich habe ebenfalls eine Schaltung mit dem HTRC110. Jedoch wird dieser mit einem 6MHz Quarz getaktet. Der Reder kann aber nur im 125kHz Bereich lesen! Nun möchte ich dies aber auf 13,56MhZ umstellen! Hat jemand von euch sowas schonmal gemacht, bzw. eine Ahnung wie ich vorgehn kann?
Der HTRC110 ist nicht fuer 13.56Mhz Transponder geeignet, das ist eine voellig andere Baustelle.
Hi Markus, I know this post is ancient, but would you point to the right direction to make the HTRC110 read a PSK card (indala) type? Thanks!!! Sergio.
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.