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"
#include "myasuro.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)

V003 - 20.02.2007 - m.a.r.v.i.n
Defines fuer Dometrie High/Low Werte aus myasuro.h verwenden StopSwitch ersetzt. Deshalb wurde immer die komplette switches.o mitgelinkt

V004 - 15.11.2007 - m.a.r.v.i.n
RIGHT_DIR und LEFT_DIR waren in der Init Funktion vertauscht

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 117 der Datei asuro.c.

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


Erzeugt am Sun Nov 18 18:24:52 2007 für ASURO Library von  doxygen 1.5.1-p1