- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Conrad Rfid Reader an µController

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    43

    Conrad Rfid Reader an µController

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    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!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    43
    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

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    43
    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

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    04.11.2007
    Beiträge
    43

    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
  •  

12V Akku bauen