Arexx RP6 V2 Build your own robot kit RP6 V2 Manuale Utente

Codici prodotto
RP6 V2
Pagina di 141
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.
4.6.3. Delay Funktionen (Verzögerungen und Zeitsteuerung)
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 
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 
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 
leicht   umgangen   werden   wenn   man   die   Stopwatches   verwendet   die   direkt   im   An-
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-
ble benutzten, ist die maximale Zeitspanne 25500µs = 25.5ms. Interrupt Ereignisse 
werden trotzdem weiter behandelt – es wird nur der normale Programmablauf unter-
brochen.
Beispiele:
sleep(1); // 100µs 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, 
oder 65.5 Sekunden. 
Beispiele:
mSleep(1);     // 1ms Pause
mSleep(100);   // 100ms Pause
mSleep(1000);  // 1000ms = 1s Pause
mSleep(65535); // 65.5 Sekunden Pause
Stopwatches
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, 
während andere Dinge weiterlaufen sollen...
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 -