Arexx RP6 V2 Build your own robot kit RP6 V2 Manuale Utente
Codici prodotto
RP6 V2
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
anpassen. Standardmäßig hat der Ringpuffer eine Größe von 32 Zeichen. In der
RP6uart.h Datei können Sie dies mit der UART_RECEIVE_BUFFER_SIZE Definition an-
passen.
Ein größeres Programm dazu finden Sie bei den Beispielprogrammen! Das Beispiel
„Example_02_UART_02“ wurde an die neuen Funktionen angepasst.
passen.
Ein größeres Programm dazu finden Sie bei den Beispielprogrammen! Das Beispiel
„Example_02_UART_02“ wurde an die neuen Funktionen angepasst.
4.6.3. Delay Funktionen (Verzögerungen und Zeitsteuerung)
Oft muss man Verzögerungen (Delays) in sein Programm einbauen, oder eine be-
Oft muss man Verzögerungen (Delays) in sein Programm einbauen, oder eine be-
stimmte Zeitspanne warten bevor eine bestimmte Aktion ausgeführt wird.
Auch dafür hat die RP6Library Funktionen. Für die Verzögerungen einer der Timer des
Auch dafür hat die RP6Library Funktionen. Für die Verzögerungen einer der Timer des
MEGA32 verwendet, um möglichst unabhängig von der sonstigen Programmausfüh-
rung (Interrupts) zu sein und die Verzögerungen einigermaßen genau zu halten.
Aber man muss genau überlegen wann man diese Funktionen verwenden kann! Wenn
man die automatische Geschwindigkeitsregelung und das ACS verwendet (wird später
rung (Interrupts) zu sein und die Verzögerungen einigermaßen genau zu halten.
Aber man muss genau überlegen wann man diese Funktionen verwenden kann! Wenn
man die automatische Geschwindigkeitsregelung und das ACS verwendet (wird später
noch erläutert) könnte das sonst zu Problemen führen! Dann sollte man nur ganz ganz
kurze Pausen mit wenigen Millisekunden (<10ms) einfügen! Das Problem kann aber
kurze Pausen mit wenigen Millisekunden (<10ms) einfügen! Das Problem kann aber
leicht umgangen werden wenn man die Stopwatches verwendet die direkt im An-
schluss beschrieben werden.
schluss beschrieben werden.
void sleep(uint8_t time)
Mit dieser Funktion hält man den normalen Programmablauf für eine gewisse Zeit an.
Die Zeitspanne wird dabei in Schritten von 100µs übergeben (100µs = 0.1ms =
0.0001s also für die menschliche Wahrnehmung sehr kurz...). Da wir eine 8 bit Varia-
0.0001s also für die menschliche Wahrnehmung sehr kurz...). Da wir eine 8 bit Varia-
ble benutzten, ist die maximale Zeitspanne 25500µs = 25.5ms. Interrupt Ereignisse
werden trotzdem weiter behandelt – es wird nur der normale Programmablauf unter-
werden trotzdem weiter behandelt – es wird nur der normale Programmablauf unter-
brochen.
Beispiele:
Beispiele:
sleep(1); // 100µs Pause
sleep(10); // 1ms Pause
sleep(10); // 1ms Pause
sleep(255); // 25.5ms Pause
void mSleep(uint16_t time)
Wenn man längere Pausen benötigt, kann man mSleep verwenden, denn hier wird die
Zeitspanne in Millisekunden angegeben. Die maximale Zeitspanne beträgt 65535ms,
Zeitspanne in Millisekunden angegeben. Die maximale Zeitspanne beträgt 65535ms,
oder 65.5 Sekunden.
Beispiele:
Beispiele:
mSleep(1); // 1ms Pause
mSleep(100); // 100ms Pause
mSleep(100); // 100ms Pause
mSleep(1000); // 1000ms = 1s Pause
mSleep(65535); // 65.5 Sekunden Pause
mSleep(65535); // 65.5 Sekunden Pause
Stopwatches
Das Problem bei diesen normalen Delay Funktionen ist - wie oben schon gesagt - dass
Das Problem bei diesen normalen Delay Funktionen ist - wie oben schon gesagt - dass
sie den normalen Programmablauf komplett unterbrechen. Das ist aber nicht immer
erwünscht, denn oft muss nur ein Teil des Programms für eine bestimmte Zeit warten,
erwünscht, denn oft muss nur ein Teil des Programms für eine bestimmte Zeit warten,
während andere Dinge weiterlaufen sollen...
Das ist der größte Vorteil daran, Hardwaretimer zu verwenden, denn diese laufen un-
Das ist der größte Vorteil daran, Hardwaretimer zu verwenden, denn diese laufen un-
abhängig vom restlichen Programmablauf. Die RP6Library implementiert mit den Ti-
- 84 -