PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom rs232 robi steuerung



maximum2006
06.09.2007, 16:52
also ich möchte meine roboter fernsteuern können..
dazu habe ich eine rs232 funkbrücke für 60€ gekauft...


der roboter soll normalerweise eine bestimme aufgabe abarbeiten(autonom rumfahren)

und nur bei rs232 input befehlen steuerbarsein(also via hyperterminal zb.)



dazu gehören dann verschiedene funktionen:
sensoren auslesen
manuelle steuerung
greifarm(aus servos) bedienen


wie stell man das am besten in einem basic programm zusammen?



do

hauptaufgabe

loop


und dann via rxc interrupt uart auslesen?

und die befehl auswertung auch im interrupt?

und wie am besten die befehle auslesen?
ich schick zb. "vor" dann muss halt der l293d schalten usw...



mir gehts halts ums grundgerüst das am besten aufzusetzten..

grüße max

roboterheld
06.09.2007, 19:39
so mach ich es mit bascom mit einem atmega 32:



config int2=rising

On Int2 Int2_int

Enable Interrupts
Enable Int2

Open "comb.2:19200,8,n,1" For Input As #1
Open "comd.6:19200,8,n,1" For Output As #2

do
waitms 300
loop

End

Int2_int:
Disable Int2
Enable Interrupts
input #1, text
waitms 5
call empfang()
enable int2
Return

sub empfang()
If Text = "vor" Then
M_wert_a = 100
M_wert_b = 100
Call Robby_vor()
End If
If Text = "zurueck" Then
M_wert_a = 100
M_wert_b = 100
Call Robby_zurueck()
End If
If Text = "links" Then
M_wert_a = 60
M_wert_b = 60
Call Robby_links()
End If
If Text = "rechts" Then
M_wert_a = 60
M_wert_b = 60
Call Robby_rechts()
End If
If Text = "stop" Then
Call Robby_aus()
End If
end sub

maximum2006
07.09.2007, 10:28
ich würde lieber das hardware uart nehmen.

das ist doch softuart ne?


die m_wert zahlen sind deine motor werte oder?
da kann ich ja dann reinschreiben was ich will..

oder?

Vitis
07.09.2007, 11:45
ja, das ist Software UART ... kann man so machen, wenn die Hardware UART schon vergeben ist, ansonsten bietet sich die Hardware UART und der RXC Interrupt an. Die Auswertung würde ich nicht in der Interruptroutine machen, ein ungeschriebenes Gesetzt sagt, dass man die ISR so kurz wie möglich halten soll, da der AVR keine Interruptprioritäten hat und wenn ein INT ausgelöst ist kein INT bis zum Verlassen der ersten ISR ausgeführt wird, was aber manchmal nötig ist. Ich gehe bei solchen Sachen so vor, dass ich ein Flag setze, sprich UART auslesen, UDR in n Byte schreiben und ein zweites Byte auf Wert 1 setzen. In der Mainloop hab ich dann ne IF THEN, bei welcher das zweite Byte abgefragt wir. ist dies 1 wirds neu gesetzt zu Null und ein Unterprogramm angesprungen. Nur ein Vorschlag.

roboterheld
07.09.2007, 17:57
....ich würde lieber das hardware uart nehmen....

dann legste den rtx auf int 0 oder 1 oder 2 , fertig.

der udr ist für kurze abfragen , nach dem motto : a oder b oder c.

wenn du wörter abfragen möchtest, ist das nix.



Enable Interrupts
Enable Urxc
On Urxc Isr_von_urxc

Dim Text As String * 16

Do
Waitms 200
Loop
End

Isr_von_urxc:
If Udr = 13 Then
.....
End If
Return