| 
 Software-Architektur für das Gesamtkonzept
Objektorientierter Ansatz
- Die einzelnen Peripherien, wie Motortreiber, Servo, Funkmodul, RS232, etc. sollen jeweils durch eine C++ - Klasse repräsentiert werden.
 
- Diese Klassen sollen weitestgehend durch die Studierenden selbständig geschrieben werden.
 
- Um ein gleichartiges Zusammenspiel der Objekte der Klassen untereinander gewährleisten zu können, werden die Namen und Übergabeparameter der Objektmethoden der Klassen vorab vereinbart.
 
- Um die Einhaltung dieser Planvorgaben zu gewährleisten, werden solche Schnittstellen durch Vererbung von abstrakten Klassen umgesetzt.
 
- Im folgenden ist für ein Beispiel dargestellt, wie die Programmstruktur dann aussehen kann.
 
- Es handelt sich um eine Klasse, die die beiden Taster des Testboards ausliest:
 
  |   
#include <avr/io.h>
class COACHBASIS
{
    public:
        virtual void start(void);
        virtual void stop(void);
};
class PeripherieBASIS
{
    public:
        virtual bool ansteuern(int);
};
class Peripherie : public COACHBASIS, PeripherieBASIS
{
    private:
        unsigned char akku;
    public:
        void start(void)
        {
            DDRB &= 0b11111100;
        }
        void stop(void)
        {
            DDRB &= 0b11111100;
        }
        bool ansteuern(int nr)
        {
            akku = PINB;
            if(nr==0)
                akku &= 0b00000001;
            else
                akku &= 0b00000010;
            if(akku>0)
                return true;
            else
                return false;
        }
};
Peripherie peripherie;
int main(void)
{
    peripherie.start();
    DDRC = 0b11111111;
    while(true)
    {
        if( peripherie.ansteuern(0)==true )
            PORTC = 1;
        else if( peripherie.ansteuern(1)==true )
            PORTC = 2;
        else
            PORTC = 0;
    }
    return 0;
}
Code 0-1: Klasse Peripherie, für die die Methoden in COACHBASIS und PeripherieBASIS festgelegt wurden.
  
- Solange noch keine Klassen entwickelt wurden, muß gewährleistet sein, dass nicht durch zufällige Konfigurationen schädliche Konfigurationen entstehen.
 
- So darf der Antriebsmotor auch ohne Motortreiber-Ansteuerung nicht laufen, die Anzeige sollte keinen Strom verbrauchen, das Funkmodul sollte inaktiv sein usw.
 
- Zusammengefaßt sollte keine Peripherie aktiv sein, zumindest sollte sie nicht unnötig viel Leistung aufnehmen.
 
- Dies kann erreicht werden durch eine Klasse, deren Objekt die Basiskonfiguration vornimmt.
 
- Da diese Klasse das gesamte AV in einen Anfangszustand versetzt, soll sie einach "COACH" genannt werden.
 
  |   
Wichtiger Hinweis: start() und stop() dürfen andere Peripherie nicht beeinflussen:
- Die in jeder Peripherie-Klasse zu implementierende Methode 
start() darf nur diejenigen Pins des Mikrocontroller beeinflussen, die auch wirklich absolut notwendig zur Ansteuerung der betreffenden Peripherie sind. 
- Die Methode 
stop() soll nur die zuvor in start() manipulierten Pins wieder in ihren Ur-Zustand zurück versetzen. 
- Der Urzustand ist derjenige, der durch die 
start()-Methode des Objekts vom Typ "COACH" verursacht wird. 
- Sollten beide Zustände miteinander übereinstimmen, sollte dieser trotzdem aktiv in 
start() und stop() gesetzt werden. 
- Dies soll vermeiden helfen, dass eine Änderung der 
start()-Methode in "COACH" eine völlige Verwirrung bzgl. der anzustrebenden Zustände in den anderen Peripherien nach sich zieht. 
  |   
Aufgabe 1.2-1
- Analsysieren Sie den Schaltplan der Grundplatine anhand des Layouts und legen Sie fest, welchen Zustand die einzelnen Bits der Ports A, B, C und D haben sollten.
 
- Schreiben Sie dann die Klasse COACH mit der Methode start(), die diese Konfiguration vornimmt.
 
- Tauschen Sie sich untereinander über die Sinnhaftigkeit Ihrer Festlegungen aus, versuchen Sie sich auf ein gemeinsames Konzept zu einigen.
 
  |   
Aufgabe 1.2-2
- Analysieren Sie das Layout und das Datenblatt für das Anzeigelement.
 
- Schreiben Sie eine Klasse "Anzeige" zur Ansteuerung des Anzeigeelements.
 
- Sie soll Integerzahlen im Bereich +/-999 darstellen können.
 
- Es soll folgende Schnittstellendefinition eingehalten werden und die von "COACHBASIS":
 
  |   
class AnzeigeBASIS
{
    public:
        virtual void zahl(int);
};
Code 0-2: Schnittstellendefinition für "Anzeige"
  
Hinweise zum Vorgehen zur Lösung der Aufgabe 1.2-2:
- Erstellen Sie zunächst eine Zuordnungstabelle, anhand der ersichtlich ist, welcher Pin des Mikrocontrollers mit welchem der Anzeige verbunden ist.
 
- Erstellen Sie dann mit Hilfe der Datenblätter von ATmega32 und HDSP-B08G (Anzeigeelement), wie die Zuordnung zwischen Port-Bits und 7-Segment-Elementen ist.
 
- Beachten Sie: Das Anzeigeelement besteht aus vier 7-Segmentanzeigen. Es kann gleichzeitig immer nur eines eingeschaltet werden über die Auswahl der gemeinsamen Anode.
 
- Ist eine Anode ausgewählt, können die sieben Segmente des betreffenden Bausteins gleichzeitig angesteuert werden.
 
- Eine vierstellige Zahl wird dadurch sichtbar, dass zyklisch in schnellem Tempo die einzelnen Anzeigeelemente aufgefrischt werden.
 
  |   
Aufgabe 1.2-3
- Lassen Sie die Klasse "AnzeigeText" von "Anzeige" erben und ergänzen Sie hier eine Methode, 
 
- mit der Text dargestellt werden kann.
 
- Halten Sie folgende Schnittstellendefinition ein:
 
- class AnzeigeTextBASIS
 
- {
 
-     public:
 
-         virtual void text(char*);
 
- };
 
- Schnittstellendefinition für "AnzeigeText"
 
  |   
  |