BASCOM: Empfang eines strings oder HEX-Wertes per UART

Gast #344421
Lesenswert?

Hi Jungs, ihr seit meine letzte Hoffnung!

Ich hänge jetzt seit Tagen an der Inbetriebnahme einer RS232-Verbindung
zwischen einem ATM128 und einem ELM323 und komme nicht mehr weiter:

>$baud1 = 9600
>Open "COM2:" For Binary As #1
>Waitms 50
>Print #1 , "ATI"

Die Verbindung steht bereits in die eine Richtung; der ATM128 kann den
ELM ansprechen (z.B. über "Print #1 , "irgendwas") der ELM reagiert
darauf und sendet eine ASCII-Folge (bekannt) zurück. Konkret frage ich
hier seinen Namen mit "ATI" ab, zurück sollte der ASCII-String
"ELM323 Version 2.0" kommen.

Leider bekomme ich diesen String weder mit "INKEY", "WAITKEY",
"GET" oder sonst irgendwas eingelesen.
ISCHARWAITING sagt mir zwar, es wäre wohl ein Zeichen im Buffer, aber
wie komme ich an diese Zeichen heran damit ich nachher einen kompletten
String habe?

Darüber hinaus sollen im nächsten Step dann auch Hex-Werte empfangen
werden.


Kann mir irgendjemand ne kleine Hilfestellung geben? :-)


Danke!
#344422
Lesenswert?

Hi,

wie frägst du denn ab?
Wenn du dir eine Schnittstelle zuweist auch z.B wie du "#1" dann
musst die auch mit inkey(#1) oder waitkey(#1) abrufen.
Dann sollte der Empfang klappen, wenn ischarwaiting schon 1 zurückgibt,
liegts ja blos noch am auslesen. :-)

greetz
Addy
Gast #344423
Lesenswert?

YIP!
Frage ab mit z.B. inkey (#1), da kommt dann aber nix! :-/

Gibt's denn nicht irgendwo ein Codefragment, in dem man die genauen
Definitionen und die Vorgehensweise sehen kann?


Und bevor jemand schreit .... wills ja nicht kopieren, sondern
verstehen ,-)
#344424
Lesenswert?

Ich arbeite da gerne mit dem Urxc - Interrupt

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 ,
Databits = 8 , Clockpol = 0

Open "com1:" For Binary As #1

Enable Interrupts

Enable Urxc
On Urxc Daten_empfang

Dim Abfrage_zeichen as Byte
Dim Daten as Bit
'--------------------------------------
Do
  If Daten = 1 Then
  'Tue hier was
  Reset Daten
  End If
Loop
End
'--------------------------------------
Daten_Empfang:
  Abfrage_zeichen = Inkey(#1)
  Set Daten
Return

Das ist jetzt mal so ein Pseydocode ohne Empfangspuffer.
Wenn du Empfangspuffer benötigst, solltest du das hier verwenden.

Config Serialin = Buffered , Size = 20

Dim Na As String * 10

Enable Interrupts

Print "Start"

Do
  If Ischarwaiting() = 1 Then
      Print Na
  End If
  Wait 1
Loop

Da bleibt dann auch Luft um was zu bearbeiten.

greetz
Addy
Gast #344425
Lesenswert?

Hallo,
ich habe das mal wie folgt gelöst (aus meinem Archiv ohne
Funktionsgarantie, da ich es jetzt gerade nicht getestet habe):

Wolfgang

Do
   X = Ischarwaiting()
   If X = 1 Then
         Gosub Datenempfang
         Zeile = Str(rxin)
         Call LCD_Print(Zeile, x1, y1, Font1, XSize, YSize, Red,
White)
   End If
Loop


Datenempfang:
   Inputbin Rxin
Return

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren