Forum: Mikrocontroller und Digitale Elektronik BASCOM: Empfang eines strings oder HEX-Wertes per UART


von micha b (Gast)


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!

von A. K. (addy)


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

von micha b (Gast)


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 ,-)

von A. K. (addy)


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

von Wolfgang (Gast)


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

von papa_of_t (Gast)


Lesenswert?

Du kannst Byte für Byte auch so lesen:

If UCSRA.RXC=1 Then meinByte = UDR

(mußt mal prüfen ob der Registername stimmt, beim MEga8 geht es so)

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.