-
-
Conrad Rfid Reader an µController
Hallo,
gleich zu beginn, ja ich habe die Boardsuche zum Thema RFID benutzt und auch alle Quellcodes und Ratschläge ausgeführt, komme aber trotzdem nicht weiter:
Der RFID Reader sendet per TX (Baud 9600 ) den empfangenen Code. Direkt an der Schnittstelle angeschlossen klappt dies auch wunderbar nur über den µController gibt es ein paar Probleme.
Er sendet am Anfang ein Startbyte ( 002) und am Ende ein Stoppbyte (004), Dazwischen lieben die 5 Datenbytes jeweils im Hex Format.
Mein µController läuft auf 8Mhz, der Reader auf 16Mhz, dabei sind aber die Baudraten natürlich gleich eingestellt.
Habe mal mit einem einfachen Programm versucht die vom µController empfangenen Werte über RS232 durchzzuschleifen, das Ergebnis war überraschend ( Log-Datei im Anhang)
1. Es wird das Start 002 und das Stoppbyte 004 gesendet
2. Dazwischen liegen auch immer genau 5 Datenbytes
3. Was aber überhaupt nicht sein kann, dass diese 5 Datenbytes immer variieren.
Auszug aus der Logdatei:
2
146
120
112
112
118
4
2
146
120
48
112
118
4
2
146
120
48
112
54
4
2
146
56
48
48
197
4
2
210
120
112
112
118
4
2
210
56
112
48
197
4
Hier mal wenn ich den Reader direkt an die RS232 anschliese:
R80410241E6 R80410241E6 R80410241E6 R80410241E6 R80410241E6 R80410241E6
Hier der dazu gehörende Quelltext:
[code]
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
Dim A As Byte
Do
A = Inkey()
If A > 0 Then
Print A
A = 0
End If
Loop
End
Meine Vermutung:
Mit Inkey werden doch die Werte im Dezimal eingelesen, kann es deswegen zu Komplikationen kommen? Was dagegen spricht, die Start und Stoppbytes werden ja sachgemäß übertragen.
Ich verzweifle noch, hat jemand eine Idee????
Grüße
hdtvfreak
-
Moderator
Robotik Visionär
Hallo
Versuche doch mal ein komplettes Datenpacket (bis zum Endebyte 4) zu Empfangen und erst dann die Daten auszugeben. Vielleicht wird durch das zeitgleiche Senden der Empfang gestört (oder andersrum).
Egal ob dezimal, hex, oder sonstwas, für die Schnittstelle ist es eine Folge von Bits die zu einem Byte zusammengestellt werden. Die Schreibweisen beeinflussen die Daten nicht.
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
-
So, habe es nochmal versucht, hier das Ergebnis:
Ò8x4102Ã1ÄÅ
Òx84q02ƒ1Ä
Å
Ò8
x410rÃ1„Å
’884102Ã1ÄÅ
Òx84q02
Ã1ÄÅ
Ò884102Ã1Ä…
Ò8x41p
2Ã1„Å
Ò8x
4102Ã1ÄÅ
Ò8x41p2ÃqÄÅ
Mit Folgendem Code ( Also eine Zeile entspricht einem Scan ) Rauskommen sollte eigentlich R884102C1DE,
Mir ist aufgefallen, dass z.B. bei:
Ò884102Ã1Ä…
’884102Ã1ÄÅ
Die Zahlen ja stimmen, aber was ist mit den Buchstaben, woran liegt das, die Ascii Tabelle ist ja überall gleich?
Achja der Code
[code]
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
Dim Flag As Byte
Dim Temp As Byte
Dim Dat As String * 20
Config Serialin = Buffered , Size = 20
Enable Interrupts
Do
Gosub Datenemphang
loop
Datenemphang:
Waitms 20
Dat = ""
Do 'Auf Echo warten
temp = Inkey()
If temp <> 0 Then Dat = Dat + Chr(temp)
Loop Until Temp = 0
If Dat <> "" Then
Print Dat
End If
Return
-
So habe jetzt mal ein größeres Array (100) genommen und die Intervalle betrachtet:
2
146
56
112
116
113
112
50
116
113
133
118
4
2
210
120
48
116
113
48
114
116
113
133
54
4
2
210
120
112
52
113
48
114
116
49
133
118
4
2
146
120
48
116
113
112
114
52
113
133
54
4
Was mich wunder ist, das vom Start zum Stoppbyte jetzt 11 Byte liegen, im Datenblatt steht aber 5 Byte, kann es sein, dass der AVR zu schnell einließt als der Reader sendet? Dann müssten es aber immer Paare geben ( 166,166 z.B. hintereinander)
Hm, Noch eine Idee???
Hier der Quelltext:
[code]
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
Dim Temp As Byte
Dim Dat(100) As Byte
Dim Count As Byte
Dim I As Byte
Count = 1
Config Serialin = Buffered , Size = 20
Enable Interrupts
Do
Gosub Datenemphang
Loop
Datenemphang:
Do 'Auf Echo warten
temp = Inkey()
If Temp <> 0 Then
Dat(count) = Temp
Incr Count
End If
Loop Until Temp = 0
If Count = 100 Then
For I = 1 To 100
Print Dat(i)
Dat(i) = 0
Next I
Print "______"
Count = 1
End If
Return
-
Fusebits
Ok, hat sich geklärt, lag an den Fusebits, ein atmega16 funktioniert optimal
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen