Forum: Mikrocontroller und Digitale Elektronik Bascom / UART String nach Länge hin auswerten


von Ch S. (spelli)


Lesenswert?

Hallo,

ich möchte den UART auswerten und nach einer bestimmten Länge prüfen, ob 
ein bestimmter String übergeben wurde. Wenn ja, möchte ich zu einer 
Anweisung springen.

Ich habe mir jetzt aus Codeschnipseln das hier zusammengedacht...
Danke für Hilfestellungen.


1
$regfile = "m8def.dat"
2
$Crystal = 3686400
3
$Baud    = 9600
4
5
Dim S As String * 11
6
7
On URXC OnRxD
8
Enable URXC
9
Enable Interrupts
10
11
12
Main:
13
  If Len(s) > 10 Then
14
    Print s
15
    s = ""
16
17
    Select Case S
18
19
            Case 00000000001
20
            Goto Wert1
21
22
            Case 00000000002
23
            Goto Wert2
24
    End Select
25
26
  End If
27
Goto Main
28
29
OnRxD:
30
  s = s + Chr(UDR)
31
Return
32
33
34
35
Wert1:
36
 'anweisungen etc.
37
Return
38
39
Wert2:
40
 'anweisungen etc.
41
Return

von tip (Gast)


Lesenswert?

Kenn mich mit Bascom zwar nur ganz wenig aus, aber das da wird nicht 
funktionieren, da die Variable S immer leer ist beim Case auswerten.
1
s = ""
2
Select Case S
Die Variable S z.B. erst nach dem End Select löschen.

von Loeter (Gast)


Lesenswert?

Wie tip schon sagt..
Ansonsten sieht das gut aus und sollte funktionieren.

Wozu soll das dann dienen ?

von Ch S. (spelli)


Lesenswert?

Tja, gedacht ist es u. a. für ein XBee Mesh Netz:

Beitrag "zigbee / xbee - verständisfrage x-ctu"


Mehrere "Sensor-Module" bestehen aus je einem XBee Modul und einem AVR. 
Ich stelle mir das so vor, dass die ganzen Sensoren per "Funk-"UART an 
einen Zentralen AVR angeschlossen sind...

Es gibt einen festen Befehlssyntax und dann weiß der zentrale AVR, von 
welchem Sensor welcher Wert kommt....

Ich weiß aber gar nicht, ob das so geht, also die XBee-Kommunikation...


Den String auf Länge hin auswerten benötige ich noch für eine andere 
RS232-Kommunikation bei einem anderen Projekt..

---------------

Leider erhalte ich bei dem o. g. Code immer den Fehler:

Invalit datatype

Irgendwas mache ich mit der Stringberechnung und Case falsch...

von Klaus D. (kolisson)


Lesenswert?

wenn S ein String ist muss es ja wohl eher so aussehen:

Case "00000000001"

allerdings leuchtet mir nicht ganz ein, warum du nicht
auf die Anwesenheit eines Zeilenendes <CR> hin auswertest
und dann prüfst, was im Empfangspuffer steht.

Gruss Klaus de Lisson

von Ch S. (spelli)


Lesenswert?

Hallo!

Auja! Danke für den Hinweis!

Ich bin ein Neuling auf diesem Gebiet...

Daher habe ich den Ansatz des Zeilenendes nicht bedacht.

Grundsätzlich werden -falls das überhaupt geht- über ein XBee-Netz 
mehrere Mdoule per UART verbunden (das würde zu zimelich viel Verkehr 
auf dem UART führen, denke ich...).

00000000001 -> ist ein Beispiel von mir. Ich muss mir da noch einen 
Syntax überlegen, wie ich einem Sensor-Modul eine ID verteile und dann 
Daten/Stati und Messwerte sende..

Die 00000000001 werden also von einem anderen AVR per XBee an die o.g. 
Auswertung gesendet...

So bislang der Plan!

von Klaus D. (kolisson)


Lesenswert?

schau auch mal hier auf eine alternative Empfangsroutine.

Beitrag "Re: BASCOM UART Senden geht empfangen nicht"

Klaus

von Ch S. (spelli)


Lesenswert?

Hallo!

Das ist ein wenig komplizierter. So ganz habe ich es noch nicht 
verstanden...

Da sind viele neue Befehle drin! ;-)

von Ch S. (spelli)


Lesenswert?

Ich bin immer noch nicht weitergekommen...

Über die serielle Schnittstelle werden die Hex-zeichen:

>> 8101060100010301FF << gesendet.

Hierbei möchte die vorderen 2 Zeichen abtrennen und dann einfach prüfen, 
ob der Befehl: >> 01060100010301FF << angekommen ist (also 8 Bytes). 
Wenn dem so ist, sollen Anwisungen ausgeführt werden.

Ich habe leider totale Probleme dabei, diese 8 Hex-Zeichen einzulesen 
bzw. als String abzuarbeiten.

Vielen Dank für Hilfe!

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.