Forum: Mikrocontroller und Digitale Elektronik Barcodescanner mit Atmega128 einlesen


von Andreas R. (bastelwastel2708)


Angehängte Dateien:

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

von Wolfgang (Gast)


Lesenswert?

Andreas R. schrieb:
> Ich bekomme aber ums Verrecken die Zahlen des Barcodes auf mein LCD.

Was erscheint den statt dessen auf deinem LCD.

> Irgenwo habe ich mich festgefahren.

Vielleicht hier?
>   S = S + Hex(udr)

von Andreas R. (bastelwastel2708)


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

von Andreas R. (bastelwastel2708)


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

: Bearbeitet durch User
von Draco (Gast)


Lesenswert?

Was denkst du denn was "long" für einen Wertebereich hat und wann der 
überläuft ;-)

von Andreas (Gast)


Lesenswert?

Hallo,
funktioniert, Problem gelöst.
Schöne Grüße, Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.