asuro.c-Dateireferenz

Init- und Interrupt-Funktionen der Asuro Library.
Timer2 wird mit 36 kHz betrieben, im Gegensatz zur ausgelieferten
Version mit 72 kHz. Mehr ...

#include "asuro.h"

gehe zum Quellcode dieser Datei

Funktionen

void Init (void)
 Initialisiert die Hardware: Ports, A/D Wandler, Serielle Schnittstelle, PWM
Die Init Funktion muss von jeden Programm beim Start aufgerufen werden.


Ausführliche Beschreibung

Init- und Interrupt-Funktionen der Asuro Library.
Timer2 wird mit 36 kHz betrieben, im Gegensatz zur ausgelieferten
Version mit 72 kHz.

Interrupt-Doku nur ueber die Datei zu sehen:
Bitte ueber den oben ausgegebenen Link 'gehe zum Quellcode
dieser Datei' direkt in der Datei nachsehen.
DoxyGen ist nicht zur Erkennung von Interrupt-Funktionen 'bereit'.
Behandelt werden folgende Interrupts:
Wichtiger Hinweis:
Die Init()-Funktion muss von jedem Programm beim Start
aufgerufen werden.
Siehe auch:
Defines zum setzen von Port's und Konfigurationen in asuro.h
IRTX, LEFT_DIR, PWM, GREEN_LED, RIGHT_DIR, FRONT_LED,
ODOMETRIE_LED, RED_LED, ON, OFF, GREEN, FWD, TRUE, FALSE
Version:
V--- - 10.11.2003 - Jan Grewe - DLR
Original Version von der ASURO CD

V--- - 20.11.2006 - m.a.r.v.i.n
+++ SIGNAL (SIG_ADC)
static Variable toggle mit FALSE initialisiert.
(Bug report von Rolf_Ebert)

V--- - bis zum 07.01.2007 -
Bitte in Datei CHANGELOG nachsehen.

V001 - 13.01.2007 - m.a.r.v.i.n
+++ Alle Funktionen
Zerlegte Sourcen in einzelne Dateien fuer eine echte Library.

V002 - 27.01.2007 - Sternthaler
+++ Alle Funktionen
Kommentierte Version (KEINE Funktionsaenderung)

Definiert in Datei asuro.c.


Dokumentation der Funktionen

void Init ( void   ) 

Initialisiert die Hardware: Ports, A/D Wandler, Serielle Schnittstelle, PWM
Die Init Funktion muss von jeden Programm beim Start aufgerufen werden.

Parameter:
keine 
Rückgabe:
nichts
Siehe auch:
Die Funktionen Sleep() und Msleep() in time.c werden mit dem hier
eingestellten 36 kHz-Takt betrieben.
Funktionsweise der Zeitfunktionen:
Msleep() ruft Sleep() auf. In Sleep() wird die globale Variable count36kHz
zur Zeitverzoegerung benutzt. Diese Variable wird jedesmal im Interrupt
SIG_OVERFLOW2 um 1 hochgezaehlt.
Der Interrupt selber wird durch den hier eingestellten Timer ausgeloesst.
Somit ist dieser Timer fuer die Zeitverzoegerung zustaendig.
Siehe auch:
Die globale Variable autoencode fuer die automatische Bearbeitung der
Odometrie-ADC-Wandler wird hier auf FALSE gesetzt.
Hinweis zur 36 kHz-Frequenz vom Timer 2
Genau diese Frequenz wird von dem Empfaengerbaustein benoetigt und kann
deshalb nicht geaendert werden.
In der urspruenglichen, vom Hersteller ausgelieferten LIB, war diese
Frequenz allerdings auf 72 kHz eingestellt. Durch eine geschickte
Umkonfigurierung durch waste konnte diese aber halbiert werden.
Sinnvoll ist dies, da der durch diesen Timer2 auch ausgeloesste Timer-
Interrupt dann nur noch die Haelfte an Rechenzeit in Anspruch nimmt.
Beispiel:
(Nur zur Demonstration der Parameter/Returnwerte)
  // Die Init()-Funktion MUSS IMMER zu Anfang aufgerufen werden.
  int main (void)
  {
    int wert;

    Init ();

    while (1)
    (
        // Dein Programm
    }
    return 0;
  }

Definiert in Zeile 107 der Datei asuro.c.

00109 {
00110   /*
00111     Timer2, zum Betrieb mit der seriellen Schnittstelle, fuer die
00112     IR-Kommunikation auf 36 kHz eingestellt.
00113   */
00114   TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
00115   OCR2  = 0x91;                         // duty cycle fuer 36kHz
00116   TIMSK |= (1 << TOIE2);                // 36kHz counter
00117 
00118   /*
00119     Die serielle Schnittstelle wurde waerend der Boot-Phase schon
00120     programmiert und gestartet. Hier werden die Parameter auf 2400 1N8 gesetzt.
00121   */
00122   UCSRA = 0x00;
00123   UCSRB = 0x00;
00124   UCSRC = 0x86; // 1 Stop Bit | No Parity | 8 Data Bit
00125   UBRRL = 0xCF; // 2400bps @ 8.00MHz
00126 
00127   /*
00128     Datenrichtung der I/O-Ports festlegen. Dies ist durch die Beschaltung der
00129     Asuro-Hardware nicht aenderbar.
00130     Port B: Seriell Senden; Richtungsvorgabe Motor links; Takt fuer die
00131             Geschwindigkeit beider Motoren; Grueneanteil-Status-LED
00132     Port D: Richtungsvorgabe Motor rechts; Vordere LED;
00133             Odometrie-LED (Radsensor); Rotanteil-Status-LED
00134   */
00135   DDRB = IRTX | LEFT_DIR | PWM | GREEN_LED;
00136   DDRD = RIGHT_DIR | FRONT_LED | ODOMETRIE_LED | RED_LED;
00137 
00138   /*
00139     PWM-Kanaele OC1A und OC1B auf 8-Bit einstellen.
00140     Sie werden fuer die Geschwindigkeitsvorgaben der Motoren benutzt.
00141   */
00142   TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
00143   TCCR1B = (1 << CS11);                 // tmr1-Timer mit MCU-Takt/8 betreiben.
00144 
00145   /*
00146     Einstellungen des A/D-Wandlers auf MCU-Takt/64
00147   */
00148   ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1);
00149 
00150   /*
00151     Sonstige Vorbereitungen.
00152     - Alle LED's ausschalten
00153     - Motoren stoppen und schon mal auf Vorwaerts einstellen.
00154     - Globale Variable autoencoder ausschalten.
00155   */
00156   ODOMETRIE_LED_OFF;
00157   FrontLED (OFF);
00158   BackLED (ON, ON);
00159   BackLED (OFF, OFF);
00160   StatusLED (GREEN);
00161 
00162   MotorDir (FWD, FWD);
00163   MotorSpeed (0, 0);
00164 
00165   autoencode = FALSE;
00166 
00167   /*
00168     Funktion zum ALLGEMEINEN ZULASSEN von Interrupts.
00169   */
00170   sei ();
00171 }


Erzeugt am Wed Feb 14 16:10:02 2007 für ASURO Library von  doxygen 1.5.1-p1