Barcodescanner mit Atmega128 einlesen

OP #4538260
Lesenswert?
• ▲
▼
Hallo,

ich will auf Atmega128 meinen Hand-Barcode-Scanner Opticon OPL-6845 über 
UART div. Barcodes-Etiketten einlesen.
Der Scanner ist auf 9600/8/N/1 eingestellt und liefert auf Hyperterminal 
die Dezimalzahlen z.B. "0122190370006000000114273898" das ganze endet 
mit CR.
Mich interessieren nur die ersten 13 Stellen. Den Rest bräuchte ich 
nicht unbedingt.Den Scanner versorge ich mit 5VDC extern, später dann 
über die 5V vom Atmega. Masse habe ich gemeinsam verbunden.
Mit folgendem Programm habe ich vor einiger Zeit meinen RFID-Scanner zum 
Laufen gebracht, der heute noch super seine Dienste verrichtet.

'*********************************************************************** 
*
$regfile = "m128def.dat"
$crystal = 14745600
$hwstack = 64
$swstack = 40
$framesize = 80
$baud = 9600

' ******************************************* Variabeln dimensionieren
Dim S As String * 10
Dim Wert As Long

' ********************************************************************

' *************************** LCD konfigurieren *******************

Config Lcd = 40 * 4
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.4 , Db6 = Portc.5 , 
Db7 = Portc.6 , E = Portc.1 , E2 = Portc.2 , Rs = Portc.0
Config Lcdbus = 4

' einmaliges Initialisieren des Displays
Dim ___lcdno As Byte

___lcdno = 0 : Initlcd : Cursor Off : Cls
___lcdno = 1 : Initlcd : Cursor Off : Cls

' ** Interrupts ********************************************

On Urxc Onrxd
Enable Urxc
Enable Interrupts

' ** Hauptprogramm ******************************************
___lcdno = 1 : Cls
___lcdno = 0 : Cls

Locate 1 , 1
Lcd "                "

Locate 2 , 1
Lcd "                "

Do

   If Len(s) > 9 Then
      Wert = Hexval(s)
      ___lcdno = 0 : Cls
      Locate 1 , 1
      Lcd Wert ; "   "
      S = ""
      Wert = 0
   End If

Loop

' ** Unterroutine ***************************************

Onrxd:
  S = S + Hex(udr)
Return
' ***************************************************************
End
'*****************************************************************

Ich bekomme aber ums Verrecken die Zahlen des Barcodes auf mein LCD.
Irgenwo habe ich mich festgefahren.

Kann mir jemand einen Tip geben?

Bin für jede Hilfe dankbar.

Danke und schöne Grüße, bastelwastel2708
Angehängte Dateien:
OP #4538320
Lesenswert?
• ▲
▼
Hallo,

danke für die schnelle Antwort.
Bei jedem Scan des Etiketts 0122190370000600114273898 bekomme ich die 9 
Stellen "875967555" und "826488899".
Es ist also nichts was Sinn ergäbe.
Stimmt hex ist wohl falsch, da der RFID-Scanner hex bringt, klappt das 
da.
Eigentlich müsste ich ja gar nicht wandeln, da die Zahlen ja wie von der 
Tastatur kommen.
Wie mache ich das denn schon wieder?
Ich habe es auch schon mit input versucht, aber irgendwie wird CR nicht 
erkannt und das Programm hängt sich auf.
Ich hoffe du kannst damit was anfangen und kannst mir noch nen Tip 
geben.
Danke

Gruß, Andreas
OP #4539100
Lesenswert?
• ▲
▼
Hi,

jetzt bin ich ein bischen weitergekommen.
Mit den folgenden Änderungen habe ich jetzt schon einmal reproduzierbare 
Zeichen, mit denen ich was anfangen kann:

' *****************************************************
On Urxc Onrxd
Enable Urxc
Enable Interrupts

' *** Hauptprogramm ******************************************
___lcdno = 1 : Cls
___lcdno = 0 : Cls

Locate 1 , 1
Lcd "                "

Locate 2 , 1
Lcd "                "

Do
   If Len(s) > 0 Then
      Wert = Hexval(s)
      ___lcdno = 0 : Cls
      Locate 1 , 1
      Lcd "*" ; Wert ; "*     "
      S = ""
      Wert = 0
   End If
Loop

' **** Unterroutine ***************************************

Onrxd:
  S = Hex(udr)
Return

' ********************************************************************

Wenn ich hiermt einen Barcode mit einstelligen Zahlen scanne bekomme ich 
auch immer gleiche Zahlenwerte. Z.B.:

0 = 198
1 = 103
2 = 51
3 = 102
4 = 25
5 = 101

Die angezeigten Zahlen sind auch reproduzierbar. Insofern schon mal ein 
kleiner Lichtblick.
Außer mit dem Befehl: Hex(udr) bekomme ich keine plausiblen Resultate.
Im Prinzip könnte ich jetzt mit Select Case ja eine Zuordnung machen und 
ich könnte somit den mehrstelligen Barcode auch auswerten.

Jetzt muss ich nur noch versuchen mehrstellige Codes nacheinander zu 
lesen. Das klappt noch nicht so richtig.
Es wird immer nur das erste Zeichen gelesen, das zweite wird ignoriert.
Ich benötige nur die ersten 10-11 Stellen.
Wie bekomme ich die Zahlen hintereinander in ein Array?
Wie komme ich nacheinander an die weiteren Stellen ran?

Danke und Gruß, Andreas

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.