'------------------------------------------------------------------------------- ' Beispielprogramm für den Pollin-Electronic RFID-Bausatz, ArtNr:810059 ' Es dient zum Auslesen einer HITAG RFID-Karte mittels eines Atmel U2270B. ' Âusschnitte des Codes wurden von der Beispielsoftware für den Em4095 von ' www.mcselec.de übernommen und für den U2270B abgeändert ' Als Controller wird ein AT-Tiny 2313 verwendet. ' Sie handeln auf eigene Gefahr! ' Bei diesen Daten handelt es sich um Beispielanwendungen die nicht für den produktiven ' Einsatz geacht sind. ' Pollin Electronic gibt keine Garantien irgendeiner Art , weder ausdrücklich ' noch implizit , einschließlich unbegrenzt aller Garantien der Verwendbarkeit ' dieser Daten für einen bezeichneten oder nicht bezeichneten Zweck. ' Pollin Electronic ist nicht haftbar für jedwede Folgeschäden die aufgrund ' der Benutzung dieser Daten entstehen. Dies gilt auch dann, wenn ' Pollin Electronic von der Möglichkeit eines solchen Schadens unterrichtet worden ist. ' Firma: Pollin-Electronic-GmbH ' Autor: Christian Schmailzl '------------------------------------------------------------------------------------------------------------------ $regfile = "attiny2313.dat" ' Controller : Tiny 2313 $baud = 9600 ' Übertragungsrate der UART-Schnittstelle $crystal = 8000000 ' Taktfrequenz des Controllers $hwstack=16 $swstack=16 $framesize=16 Dim Tags(5) As Byte '"Tags" als Array mit 5 Bytes definieren bytes Dim Zaehler As Byte '"Zähler" als Byte definieren Dim Wert As String * 10 '"Wert" als String mit 5 Hexwerten definieren Config Portb = Output 'Port B als Ausgang definieren Config Hitag = 64 , Type = Em4095 , Demod = Pind.3 , Int = @int1 'konfiguriert den Timer und die Variablen für HITAG Config Lcdpin = Pin , Rs = Portb.5 , E = Portb.4 , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 'konfiguriert die LCD-Belegung Config Lcd = 16 * 2 'konfiguriert die Displaygröße _cfe Alias Portd.2 '_cfe wird dem Portd.2 zugewiesen Config _cfe = Output '_cfe wird als Ausgand definiert _cfe = 1 '_cfe wird high Config Debounce = 30 'Tastenentprellung = 30ms On Int1 Checkints Nosave 'Int1 wird als Eingang für HITAG verwendet Mcucr.isc10 = 1 ' entspricht: config INT1 = changing ( der Befehl wird vom MC unterstützt, Mcucr.isc11 = 0 ' beim 2313 aber nicht von Bascom) Enable Interrupts 'Enable all interrupts Locate 1 , 1 'Cursor am Display in Zeile 1, ganz links Lcd "RFID-Modul" ' Text schreiben Locate 2 , 1 'Cursor am Display in Zeile 1, ganz links Lcd "with U2270B" ' Text schreiben Set Portb.6 ' Led 1 einschalten Set Portb.7 ' Led 2 einschalten Wait 2 ' Warte 2 Sekunden Reset Portb.6 'Led 1 ausschalten Reset Portb.7 ' Led 2 ausschalten Main: ' ab hier beginnt das Hauptprogramm Do ' Do-Schleife Cls 'Display löschen Lcd "Check..." ' Text schreiben If Readhitag(tags(1)) = 1 Then ' INT1 wird enabled For Zaehler = 5 To 1 Step -1 ' For-Schleife beginnend von 5 nach 1; rückwärts zählend Wert = Wert + Hex(tags(zaehler)) ' "Wert" = bestehender inhalt in der Variable + gerade gelesenen ' Tag an Position vom Zähler Next ' Ende For-Schleife Toggle Portb.6 ' Led 1 Zustand wechseln Gosub Senden ' gehe zu Unterroutine Toggle Portb.6 ' Led 1 Zustand wechseln End If ' Ende der If-Abfrage Debounce Pind.4 , 1 , Taste1 , Sub ' Taste 1 entprellen; wenn gerdückt, zur Unterroutine "Taste1" springen Debounce Pind.5 , 1 , Taste2 , Sub ' Taste 2 entprellen; wenn gerdückt, zur Unterroutine "Taste2" springen Debounce Pind.6 , 1 , Taste3 , Sub ' Taste 3 entprellen; wenn gerdückt, zur Unterroutine "Taste3" springen Waitms 500 ' Warte 500 ms Loop ' Sprunganweisung zum Anfang Do-Schleife Taste1: ' Unterroutine "Taste1" Cls ' Lcd löschen Locate 1 , 1 ' Cursor in Zeile 1, Position 1 Lcd " T1 " ' Text schreiben Wait 1 ' warte 1s Cls ' Lcd löschen Locate 1 , 1 'Cursor in Zeile 1, Position 1 Lcd " RFID " ' Text schreiben If _cfe = 1 Then ' If-Abfrage Locate 2 , 1 ' Cursor in Zeile 2, Position 1 Lcd "ausgeschaltet" ' Text schreiben Print "ausgeschaltet" ' Text über UART ausgeben _cfe = 0 ' _cfe auf low setzen -> Treiberstufen des U2270b abschalten Bitwait Pind.4 , Reset ' Warte bis Pind.4 = low Waitms 30 ' Warte 30ms ( Entprellung) Bitwait Pind.4 , Set 'Warte bis Pind.4 = high Locate 2 , 1 ' Cursor in Zeile 2, Position 1 Lcd "eingeschaltet" ' Text schreiben Print "eingeschaltet" ' Text über UART ausgeben _cfe = 1 ' _cfe auf high setzen -> Treiberstufen des U2270b einschalten Wait 1 ' Warte 1s Gosub Main ' Sprunganweisung zum Anfang der Hauptschleife End If ' Ende der If-Anweisung Return ' Sprunganweisung in die Hauptschleife Taste2: ' Unterroutine "Taste2" Cls ' Display löschen Locate 1 , 1 ' Cursor in Zeile 1, Position 1 Lcd " T2 " ' Text schreiben Toggle Portb.6 ' Led 1 Zustand wechseln Wert = "T2" ' Wert = "T2" Gosub Senden ' Sprungbefehl zur Unterroutine "Senden" Bitwait Pind.5 , Reset ' Warte bis Pind.5 = low Return 'Sprunganweisung in die Hauptschleife Taste3: ' Unterroutine "Taste3" Cls 'Display löschen Locate 1 , 1 ' Cursor in Zeile 1, Position 1 Lcd " T3 " ' Text schreiben Toggle Portb.7 ' Led 2 Zustand wechseln Wert = "T3" ' Wert = "T3" Gosub Senden ' Sprungbefehl zur Unterroutine "Senden" Bitwait Pind.6 , Reset ' Led 2 Zustand wechseln Return ' Sprunganweisung in die Hauptschleife Checkints: ' Unterroutine "Checkints:" Call _checkhitag ' Eine ausgelagerte Unterroutine aufrufen Return ' Sprunganweisung in die Hauptschleife Senden: ' Unterroutine "Senden" Cls ' Display löschen Locate 1 , 1 ' Cursor in Zeile 1, Position 1 Lcd "send..." ' Text schreiben Locate 2 , 1 ' Cursor in Zeile 2, Position1 Lcd Wert ' Variable "Wert" schreiben Print Wert ' Variable "Wert" über Uart ausgeben Wert = "" ' Inhalt von Variable "Wert" = "" 'Waitms 500 ' warte 500ms Return 'Sprunganweisung in die Hauptschleife End 'Programmende