Zitat Zitat von Foooob

Sobald das erste Zeichen reinflattert soll der AVR dieses entgegennehmen und so lange warten bis die übrigen 5 Zeichen ebenfalls gespeichert sind. Erst dann soll er den String auswerten. Und erst wenn dieser String ausgewertet ist soll der nächste entgegengenommen werden.

Ich scheitere momentan vor allem daran, dass der AVR wirklich so lange wartet, bis er einen 6-stelligen String hat.
.
.
.
Hallo,

mit nachfolgendem Code wartet der AVR zunaechst auf ein bestimmtes Zeichen oder eine Zeichenfolge. In meinem Beispiel horcht der AVR auf ein "a".
Anschliessend liest der AVR die naechsten anstehenden Zeichen ein und speichert diese in die Stringvariable "zeichen".
Das ganze ist eine Endlosschleife. Mit diesem Programmschnipsel habe ich erfolgreich in einem anderen Projekt die Daten einer GPS-Mouse (Koordinaten, Geschwindigkeit usw. ) eingelesen.
Der Code basiert auf einem Beispiel aus dem Buch von Claus Kuehnel "Programmieren der AVR-Risc...") - na, kennt hier ja jeder...

Code:
$lib "glcdKS108.lib"
$regfile = "m32def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 20
$framesize = 40
$baud = 4800
Config Graphlcd = 128 * 64sed , Dataport = Portc , Controlport = Portb , Ce = 1 , Ce2 = 0 , Cd = 4 , Rd = 3 , Reset = 2 , Enable = 5
Config Serialin = Buffered , Size = 10
Declare Function Read_string(byval T As Byte) As String
Declare Sub Wait_for_string(byval S As String)
Enable Interrupts
Dim Zeichen As String * 6

Setfont 6x8font
Cls
Lcdat 1 , 1 , "wait_for_string"

Do
 Print "test"
 Call Wait_for_string( "a")
 
'Zeichen = Read_string(8)

 Print "Alles wird gut"
 Lcdat 3 , 1 , "Zeichen a empfangen"
 waitms 500
Loop

End

Sub Wait_for_string(byval S As String) As String
Local Ii As Byte
Local Cc As Byte
 Ii = 1
 M1:
 Cc = Waitkey()
 If Cc <> Mid(s , Ii , 1) Then
 Goto M1
 Else
  Incr Ii
 If Ii > Len(s) Then Goto M2
  Goto M1
 End If
M2:
End Sub

Function Read_string(byval T As Byte) As String
 Local Cc As Byte
 Local Ss As String * 10
 Ss = ""
 Do
  Cc = Waitkey()
  Ss = Ss + Chr(cc)
 Loop Until Cc = ","
 Read_string = Left(ss , T)
End Function

$include "6x8font.font"

Screenshot: http://www.elektronik-web.de/atmel/r...tforstring.gif

Drahtigel: http://www.elektronik-web.de/atmel/roboternetz/wfs.jpg

Vielleicht hilft es ja etwas weiter...

Mit freundlichen Gruessen
Digitali