PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Conrad RFID Leser 1 Plus an Atmega8



Holgi1988
05.11.2007, 13:52
Hallo,
ich habe mir aus Interesse den RFID Leser 1 Plus von Conrad gekauft und dazu einen RFID-Transponder. Nun will ich die Daten die der Leser sendet sobald er einen Transponder erkennt von einem Atmega8 auswerten lassen. Ich habe den Leser bereits direkt an meinen PC angeschlossen und das hat auch geklappt. Wenn ich den Transponder in die Nähe der Antenne gehalten habe hat der Leser immer wieder einen Code an den PC ausgegeben, in dem Fall <stx>R8803004031<eot>. Nun weiß ich nicht wie ich es Softwaremäßig realisieren kann, dass der Mega8 bei genau diesem Code z.B. eine LED anschaltet.
Könnte mir da vllt. wer weiterhelfen, ich wäre sehr dankbar.

mfg
Holgi

robodriver
05.11.2007, 14:50
Konnte bei Conrad nicht wirklich genau finden welches Ding du hast.
Gibt es dazu ein Datenblatt?
Über welche Schnittstelle läuft das ganze?
Mehr infos wären hier Notwendig

Holgi1988
05.11.2007, 15:20
http://www.conrad.de/goto.php?artikel=190968 hier findest du den Leser, eine Art Datenblatt gibt es da auch, ist allerdings eher eine Anleitung. Das Teil hat eine serielle Schnittstelle, allerdings TTL, deshalb hab ich nen MAX232 dazwischen gehangen damit ich es an den PC anschließen konnte. wenn ich den leser allerdings an den atmega8 anschließe gehen ich direkt an die uart pins.

robodriver
05.11.2007, 15:31
Okay, dann geht das ganze recht einfach:
TX und RX Leitung direkt an die Pins PD0 und PD1 des ATMega8.

Software dann wie folgt (oder ähnlich, wie du sie brauchst):


'Einstellung der Baudrate:
$Baud = 9600

Dim Text as String * 22 'Oder mehr, je nach Anwendung

Do
Input "Eingabe" , Text
if text = "<stx>R8803004031<eot>" then
Set Portc.3 'Hier den Pin deiner LED einsetzen
else
Reset Portc.3 'Hier den Pin deiner LED einsetzen
End If
Loop

End


Man müsste nur mal welches Trennzeichen verwendet wird

Holgi1988
05.11.2007, 15:39
super, danke
wieso musst du denn wissen welches trennzeichen verwendet wird?

robodriver
05.11.2007, 15:42
Weil die Input-Methode alles bis zum chr(10)&chr(13) Trennzeichen in die Variable schmeißt.
Wenn dein Sender aber das <eot> als End-Zeichen verwendet müsstest du den Code etwas anders gestalten.

Holgi1988
05.11.2007, 15:53
achso, dann hoffe ich mal das der sender dies nicht nutzt, sonst melde ich mich nochmal, werde das jetzt erstmal so aufbauen. danke

Holgi1988
07.11.2007, 11:42
also nach dem prinzip funktioniert das ganze nicht. ich verstehe das doch richtig das ich die txd leitung des leser an rxd des ports und umgekehrt anschließen muss, oder muss rxd an rxd und txd an txd??? Geht das denn überhaupt, das ich einen einfach text defieniere, weil in der anleitung zum leser steht das stx und eot ascii codes sind und die zahlen hinter dem R sind hexadezimal, also Hex(88) und so weiter.
holger

Holgi1988
07.11.2007, 11:43
das sollte natürlich hexadezimal 88 heißen ^^

robodriver
07.11.2007, 11:54
Ah okay, jetzt sehe ich es im Datenblatt :)
STX = 2 (Dezimal)
EOT = 4 (Dezimal)

demzufolge müsste das Programm etwas anders lauten:



'Einstellung der Baudrate:
$Baud = 9600

Dim Text as String * 20 'Oder mehr, je nach Anwendung
Dim tmp_text as String * 20

tmp_text = chr(2) + "R8803004031"
tmp_text = tmp_text + chr(4)

Do
Input "Eingabe" , Text
if text = tmp_text then
Set Portc.3 'Hier den Pin deiner LED einsetzen
else
Reset Portc.3 'Hier den Pin deiner LED einsetzen
End If
Loop

End


Versuchs mal damit.
Wenns nicht klappt, meld dich einfach nochmal.

Gruß Robodriver

robodriver
07.11.2007, 12:01
Achso, ich vergas:

Ja, die TXD Leitung muss an RXD und die RXD an die TXD.
Transmit --> Reciev
(Senden) --> (Empfangen)





PS: Conrad ist bei dem Produkt ein fehler unterlaufen. In der Artikelbeschreibung steht das der Ausgang 200mA hat und in der Bedienungsanleitung steht das er maximal 100mA hat ;)
^^ nur nebenbei, ansonsten nicht relevant für diesen Fall

Holgi1988
07.11.2007, 12:05
super das versuch ich mal, allerdings wie sieht das nochmal aus mit der verbindung zwischen leser und mega 8, rxd und txd vertauschen oder rxd an rxd und txd an txd?

robodriver
07.11.2007, 12:40
Ja, die TXD Leitung muss an RXD und die RXD an die TXD.
Transmit --> Reciev
(Senden) --> (Empfangen)

Holgi1988
07.11.2007, 12:52
so habe das jetzt mal alles so gemacht aber es tut sich trotzdem noch nichts. ich denke das problem liegt darin das 8803004031 im prinzip kein text ist sondern ein 5byte hexadezimal code. R könnte höchstens ein Text sein.

robodriver
07.11.2007, 13:37
In solchen Fällen mache ich das dann immer ganz einfach folgender masen:



Input "Eingabe" , Text
writeeeprom 1, Text

end


Dann lässt du einen String vom Controller empfangen und liest über deinen Compiler das EEPROM aus.
Dann siehst du ja ganz genau was vom Leser gesendet wurde.

Holgi1988
07.11.2007, 14:33
puh, hört sich kompliziert an, also ich lasse das programm einfach so und füge anstatt die if-abfrage das oben genannte hinzu. dann schließe ich den controller über rs232 an den pc, wie kann ich denn dann den eeprom auslesen?

robodriver
07.11.2007, 15:10
Dafür gibt es viele Möglichkeiten (EEPROM auszulesen)
Womit brennst du denn die Programme auf den Controller?
Diese Programme können meist auch EEPROMS auslesen.

Holgi1988
07.11.2007, 15:13
ich brenn die programme mit ponyprog auf den controller, kannst du mir nochmal genau sagen wie das programm aussehen muss, damit der controller die daten in den eeprom schreibt. damit wäre mir schon sehr geholfen

robodriver
07.11.2007, 16:21
'Einstellung der Baudrate:
$Baud = 9600

Dim Text As String * 20 'Oder mehr, je nach Anwendung
Dim Buchstabe As String * 1
Dim A As Byte
Dim Zeichen As Byte

waitms 100

Input "Eingabe" , Text
For A = 1 To Len(text)
Buchstabe = Mid(text , A , 1)
Zeichen = Asc(buchstabe)
Writeeeprom A , Zeichen
Next A

End


^^ ist doch bisserl umständlicher als ich zunächst geschrieben hatte. sorry.
So funktionierts jetzt aber.

Wenn du in BASCOM Programmierst kannst du übrigens darüber direkt das EEPROM auslesen (und auch das Programm brennen)