HI!
Ich versuche seit einigen Tagen an meinen Roboter
einen Slave-Prozessor anzuschließen.
Das funktioniert auch ganz gut, bis auf das
auslesen der Kommandos.
Also: Mein Master-Prozessor (Mega16) sendet über UART
mehrstellige Textkommandos (z.B.: "res", "mot" usw.)
an den Slave-Prozessor(AT90S4433).
Ich kann, wenn ich 1 Zeichen verschicke, (zb. "r")
das wunderbar mit Inkey() auslesen. Das funktioniert auch
prima.
Nun suche ich einen Befehl oder einen Codeschnipsel,
der das gleiche tut wie Inkey, nur für mehr als ein Zeichen,
dass ich oben erwähnte Befehle auswerten kann.
Versteht ihr, wie ich das meine?
Ich programmiere mit BASCOM AVR.
Leute helft mir bitte! Das bringt mich noch zur Weißglut.
Liebe Grüße, Tobi
vielleicht hilft ein wenig pseudocode am Weg zur Lösung:
einst$ = ""
while (1) do
c$ = inkey()
if ( c$ <> "" )
einst$ = einst$ + c$
if right$(einst$) = "res"
call do_res
einst = ""
end
if right$(einst$) = "mot"
call do_mot
einst = ""
end
end
grüsse leo9
Hi, leo9
Im Moment geht's mir nur ums einlesen. Der Rest
ist das kleinere Problem. Mann kann die Befehle ja dann
mit switch oder select, oder wie auch immer das heißt, aussuchen,
nur man muss sie vorher erst mal haben. :)
Ich habe das so schonmal getestet, wie du das aufgeschrieben hast,
aber es hat nicht funktioniert. Entweder war ich zu doof oder...
Trozdem vielen vielen vielen DANK!!!!!!
Jeder Zipfel ist im Moment Gold wert!
Liebe Grüße, Tobi!
Hi,
wieso versendest du ganze Strings?
Bau Dir doch lieber ein Protokoll auf ....
Damals hab ich alles ueber Inputbin gemacht ....
Beispiel : Inputbin startbyte, befehl, crc, endbyte
Wenn du moechtest suche ich es zu heute abend raus.
Mfg
Dirk
Setzte doch einfach einen Interrupt auf URXC (z.B. On URXC RecRXC).
Damit verpasst Du kein Zeichen und mußt auch nicht ständig pollen.
In der Interruptroutine kannst Du dann die Befehlswörter zusammensetzen
z.B. (RecBYTE = UDR)
Gruß, Toni
HI Dirk!
Wie das funktioniert, ist eigentlich egal.
Hauptsache, meine Motoren und Servos lassen sich gut und präzise
ansteuern...
Ich hätte halt ein Protokoll auf Strings aufgebaut.
Das wäre SUPERTOLL wenn du mir einen Ausschnitt aus deinem Code
schicken könntest!!!!!!!!!!!!!!!!!
TO BE CONTINUED...
Liebe Grüße und Danke!!!!!, Tobi
Hi
BASCOM ist zwar nicht mein Ding, aber:
der Input-Buffer fasst nur ein Byte, da kannst du also keine drei Byte
langen Texte rauslesen. Also musst du (wie oben hervorragend gezeigt)
jedes Zeichen einzeln auslesen und zu deinem gewünschten String
zusammenbasteln. Allerdings frage ich mich was das soll?
Reicht nicht ein Byte zur Unterscheidung der Befehle?
Warum stopfst du den AVR mit Strings zu?
Seine Stärken liegen im Byte-orientierten Arbeiten und nicht in der
"Tectverarbeitung".
Sicher, in einer Hochsprache wie BASCOM sieht das alles einfach aus,
aber hast du mal darüber nachgedacht, wie umfangreich die Abarbeitung
wird? Da werden noch und nöcher Ressourcen verschwendet.
Vorschlag: Nimm ein Zeichen (ASCII-Wert) als eindeutige Kennung für
Befehle, ein Folgezeichen, welches den Befehl eindeutig identifiziert,
und dann, falls erforderlich, noch die Parameter. So brauchst du nur
regelmäßig den Empfangsbuffer auslesen und auf "Befehlskennung"
prüfen. Erst wenn diese eintrifft aktivierst du die Auswertung, die
dann den Rest einliest und abarbeitet.
MfG, Heinz