PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Befehle über RS232 empfangen



addict
11.02.2005, 14:05
Hi ich benutze folgenden Controller:
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=64&products_id=10
Nun meine Frage:
Wie kann ich Befehle wärend der Laufzeit an den Controller senden?
Also dieser soll z.B den Befehl erhalten eine Sek. den rechten Motor einzuschalten.
Kann mir jemand sagen oder noch besser ein Beispiel geben, wie ich den Controller programmieren muss, damit er auf einen Befehl vom Computer (RS232-Schnitstelle) wartet?
Wie kann ich dann z.B den Motor ansteuern, damit dieser beginnt zu drehen?

Hat jemand ein Codebeispiel für dieses Problem?????

Vielen Dank für die Hilfe!

Gottfreak
11.02.2005, 18:49
Wie du das UART initialisierst, steht im Datenblatt von dem ATMEGA(der Abschnitt heist sogar so.). Im Prinzip musst du nur das Bit RXEN setzen und die Baudrate in UBRL einstellen. Das Datenblatt gibt's etwa bei atmel.de .
Dann wartest du in einer Endlosschleife darauf, dass das RXC-Bit gesetzt wird, guckst in UDR, was für ein Byte angekommen ist und machst dann das, was der Befehl bedeutet. Danach setzt du RXC wieder auf 0 und kehrst in deine Schleife zurück.
Das Ganze geht auch noch eleganter mit Interrupts(frag' ggf. nochmal nach).

addict
11.02.2005, 18:56
Dieses Datenblatt liegt dieses beim Controller/ Board bei?
Das UART ist dann die Schnitstelle für die Kommunikation zum PC sehe ich das richtig? Wie funktioniert dies dan beim Empfangen? Wartet der Controller immer, bis er etwas empfängt oder läuft er einfach weiter in der Schleife? Wie funktioniert es den mit Interrupts? (Was ist das überhaupt)??? Sorry bin noch neu auf diesem Gebiet, habe bis jetzt nur C++ Appl. geschrieben.... Hätte mir jemand ein Beispiel zu der ganzen Kommunikation? (Für den Teil auf dem Controller)

Gottfreak
11.02.2005, 19:09
Dieses Datenblatt liegt dieses beim Controller/ Board bei?

keine Ahnung. Wenn es ein Datenblatt für deinen ATMEGA32 ist, kann es jedenfalls nicht verkehrt sein.


Das UART ist dann die Schnitstelle für die Kommunikation zum PC sehe ich das richtig?

Ja.


Wie funktioniert dies dan beim Empfangen? Wartet der Controller immer, bis er etwas empfängt oder läuft er einfach weiter in der Schleife?

Das könntest du z.B. so machen:


for(;;){ //diese Schleife kommt in dein Hauptprogramm und läuft immer wieder durch
while (!(UCSRA&BV(RXC)));; //macht nix, bis etwas empfangen wurde
if (UDR==0) Bewegemotor(-1);
if (UDR==1) Bewegemotor(1);
}//wenn er sich dann um den Befehl gekümmert hat, geht er wieder zurück in die Warteschleife bis ein neuer ankommt.



Wie funktioniert es den mit Interrupts? (Was ist das überhaupt)???

Ein Interrupt erlaubt es dir, auf Befehle zu reagieren, ohne, dass der Controller die ganze Zeit darauf wartet.


Sorry bin noch neu auf diesem Gebiet, habe bis jetzt nur C++ Appl. geschrieben

Wenn du schon C++ kannst, solltest du mit etwas Geduld im Datenblatt 'rauskriegen, wie man den Controller bedient.


Hätte mir jemand ein Beispiel zu der ganzen Kommunikation? (Für den Teil auf dem Controller)

Ich hoffe, das Prinzip ist in dem Codeschnipsel klargeworden. Du musst vorher nur beim Start des Controllers je nach gewünschter Baudrate einen Wert in UBRRL(und ggf. auch in UBRRH) schreiben und das RXEN-Bit(zum aktivieren des Empfangs über das UART) setzen(ich verweise nochmal auf das Datenblatt, da ist die Prozedur genau beschreiben. Wenn du da was nicht verstehtst, kannst du ja gerne nochmal genau danach fragen.).