kramann.info
© Guido Kramann

Login: Passwort:










Mikrocontroller
1 Einfuehrung
..1.1 Entwicklungsgeschichtliches
..1.2 Maschinensprache
..1.3 Assemblerbeispiel
..1.4 Sprachwahl
..1.5 Praxis
....1.5.1 Digital_IO
....1.5.2 Byteoperationen
....1.5.3 AVR_Studio
....1.5.4 Testboard
....1.5.5 Aufgaben
....1.5.6 Do_it_yourself
......1.5.6.1 Ampel
......1.5.6.2 Programmierer
..1.6 Literatur
..1.7 Programmierer
....1.7.1 Bauverlauf
....1.7.2 KurzreferenzLow
....1.7.2 Kurzreferenz_16PU
..1.8 Uebung1
..1.9 BoardAtHome
....1.9.1 Software
....1.9.2 Hardware
....1.9.3 Knoppix
....1.9.4 Aufbau
....1.9.5 LED
2 Oszillator
..2.1 Assembler
..2.2 Interner_RC
..2.3 Quarz
..2.4 Taktgenerator
3 DigitalIO
..3.1 Elektrische_Eigenschaften
..3.2 Pullup_Widerstaende
..3.3 Bitmasken_Eingang
..3.4 Bitmasken_Ausgang
..3.5 Tic_Tac_Toe
....3.5.1 DuoLEDs
....3.5.2 Schaltplan
....3.5.3 Spielfeld
....3.5.4 Anwahl
....3.5.5 Kontrolle
..3.6 Laboruebung2
..3.7 Laboruebung2_alt
4 PWM
..4.1 Prinzip
..4.2 Nutzen
..4.3 Generierung
..4.4 Programmierung
..4.5 Servos
..4.7 Laboruebung3
..4.8 LoesungUE3
..4.9 Uebung6
5 LichtKlangKugeln
..5.1 LED
..5.2 RGB
..5.3 Sensoren
..5.4 lautsprecher
..5.5 tonerzeugung
6 UART
..6.1 Bussysteme
..6.2 UART
..6.3 RS232
..6.4 Hardware
..6.5 Senden
..6.6 Hyperterminal
..6.7 Empfangen
..6.8 Broadcast
..6.9 Uebung4
7 Infrarot
..7.1 schalten
..7.2 seriell
..7.3 Uebung
8 OOP
..8.1 Probleme
..8.2 Konzept
..8.3 Statisch
..8.4 Datentypen
..8.5 RS232
....8.5.1 Prozedural
....8.5.2 Analyse
....8.5.3 Umsetzung
....8.5.4 Vererbung
....8.5.5 Statisch
....8.5.6 Performance
..8.6 Fahrzeug
9 ADW
..9.1 ADW
..9.2 Zaehler
10 Peripherie
..10.1 RS232Menue
..10.2 ASCIIDisplay
..10.3 Tastenmatrix
..10.4 Schrittmotor
..10.5 Zaehler
..10.6 Uebung7
11 SPI
..11.1 Testanordnung
..11.2 Register
..11.3 Test1
..11.4 Test2_Interrupt
..11.5 Test3_2Slaves
..11.6 Laboruebung
12 EEPROM
13 I2C
..13.1 MasterSendByte
..13.2 MasterSend2Bytes
..13.3 MasterReceiveByte
..13.4 MasterReceive2Bytes
14 Anwendungen
..14.1 Mechatroniklabor
....14.1.1 Biegelinie
....14.1.2 Ausbruchsicherung
....14.1.3 Einachser
....14.1.4 AV
....14.1.5 Vierradlenkung
....14.1.6 Kommunikation
..14.2 Sinuserzeugung
....14.2.1 Variante1
....14.2.2 Variante2
....14.2.3 Variante3
....14.2.4 Variante4
..14.3 Laboruebung8
..14.4 Loesung_Ue8
..14.5 SPI_Nachtrag
20 Xubuntu

8.6 Programmierung eines Autonomen Vehikels mit objektorientierten Modulen

8.6 Programming an autonomous vehicle with object-oriented modules (EN google-translate)

8.6 Programowanie autonomicznego pojazdu z modułami obiektowymi (PL google-translate)

vorlesung_2014_05_21.zip - Material aus der Vorlesung vom 21.05.2014
vorlesung_2014_06_04.zip - Material aus der Vorlesung vom 21.05.2014

Die Möglichkeiten der Programmierung sind an der nachfolgend abgebildeten Platine zu ersehen:

The possibilities of programming are shown on the following board:

Możliwości programowania pokazano na poniższej tablicy:

  • Eine LED-Leiste bei PORTC kann angesteuert werden.
  • Der Antriebsservo wird über OCR1A angesteuert
  • Der Lenkservo wird über OCR1B angesteuert
  • Ein Entfernungssensor kann an ADW0 angeschlossen werden
  • Kommunikation über die serielle Schnittstelle mit einem PC ist möglich (vergl. Beispiele in Kapitel 6 UART)
Fahrzeugplatine

Bild 8.6-1: Fahrzeugplatine

Konfiguration für Timer 1:

Configuration for Timer 1:

Konfiguracja dla Timera 1:

            TCCR1A = (1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<FOC1A) | (0<<FOC1B) | (1<<WGM11) | (1<<WGM10);
            TCCR1B = (0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10);
            DDRD |= (1<<PB5) | (1<<PB4); //auf Ausgang setzen.           
            OCR1A = 108;// 72...144, middle 108
            OCR1B = 108;// 72...144, middle 108

Code 8.6-1: Passende Konfiguration für die Servos. - Es ergibt sich ein sinnvoller PWM-Bereich von 72 bis 144 (vergl. Kapitel 4.8 "Verfeinerte Winkelauflösung")

Konfiguration für den Analog-Digital-Wandler:

Configuration for the analog-to-digital converter:

Konfiguracja dla przetwornika analogowo-cyfrowego:

            ADCSRA = (1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (1<<ADPS0);
	    ADMUX = (0<<REFS1) | (0<<REFS0) | (1<<ADLAR) | (0<<MUX4) | (0<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
            DDRA &= 0b11111110;

Wert holen:


        int holeWert()
        {
            ADCSRA |= (1<<ADSC);        	
  
            while( (ADCSRA & (1<<ADSC)) );  
        	
            x = ADCL;
            y = ADCH;

            return ((y<<2) | (x>>6));
        }

Code 8.6-2: Kein Freilaufmodus. Neuer Wert wird bei Bedarf geholt.

Abstrakte Klassen

Abstract classes

Klasy abstrakcyjne

Über abstrakte Klassen mit virtuellen Methoden, können die Schnittstellen (Objektmethoden) einer Klasse vorab vereinbart werden: Die eigentliche Klasse erbt von der abstrakten Klasse und muss die dort vereinbarten Methoden exakt implementieren.

Using abstract classes with virtual methods, the interfaces (object methods) of a class can be pre-agreed: The actual class inherits from the abstract class and must exactly implement the methods agreed there.

Używając klas abstrakcyjnych z wirtualnymi metodami, interfejsy (metody obiektowe) klasy mogą być wstępnie uzgodnione: Rzeczywista klasa dziedziczy z klasy abstrakcyjnej i musi dokładnie implementować uzgodnione tam metody.

Hinweis: In Java kann dieses Konzept über Schnittstellen (Schlüsselwort interface) realisiert werden.

Note: In Java, this concept can be realized via interfaces (keyword interface).

Uwaga: W języku Java koncepcja ta może być realizowana za pośrednictwem interfejsów (interfejs słów kluczowych).

Hier ein Beispiel aus einem älteren Projekt mit änlicher Zielrichtung:

Here is an example from an older project with similar goals:

Oto przykład ze starszego projektu o podobnych celach:

class CoachBASIS 
{
	virtual void start();
	virtual void stop();
	virtual int summe(int,int);
};

Code 8.6-3: Datei CoachBASIS.h

class Coach : CoachBASIS
{
    public:		
        Coach()
        {
	}

        void start()
        {
            DDRA = 0b00000000;
            DDRB = 0b00000000;
            DDRC = 0b00000000;
            DDRD = 0b10111000; 

            PORTA = 0b00000000;
            PORTB = 0b00000000;
            PORTC = 0b00000000;
            PORTD = 0b10111000;
        }

        void stop() //hier wie start()
        {
            DDRA = 0b00000000;
            DDRB = 0b00000000;
            DDRC = 0b00000000;
            DDRD = 0b10111000; 

            PORTA = 0b00000000;
            PORTB = 0b00000000;
            PORTC = 0b00000000;
            PORTD = 0b10111000;
        }

        int summe(int x, int y)
        {
            return x+y;
        }
};

Code 8.6-4: Datei Coach.h - erbt von CoachBASIS, muss start(), stop() und int summe(int,int) implementieren.

Übungen (3./4.6.2014)
Exercises (3./4.6.2014)
Ćwiczenia (3./4.6.2014)

Im Verlauf der kommenden Übungen und Vorlesungen soll basierend auf den obign Angaben ein modulares objektorientiertes Framework zur Programmierung der AVs umgesetzt werden.

In the course of the upcoming exercises and lectures, based on the obign data, a modular object-oriented one will be developed Framework for programming the AVs to be implemented.

W trakcie zbliżających się ćwiczeń i wykładów, opartych na odpowiednich danych, opracowany zostanie modułowy obiektowy Ramy programowania AV do wdrożenia.

Aufgabe 1 - Sicherer Start

Task 1 - Safe Start

Zadanie 1 - Bezpieczny start

Ähnlich zu Coach / CoachBASIS soll eine Klasse Fahrzeug umgesetzt werden, die die in FahrzeugBASIS vereinbarten Methoden implementiert.

Similar to Coach / CoachBASIS, a class vehicle is to be implemented that implements the methods agreed in FahrzeugBASIS.

Podobnie jak w przypadku Coach / CoachBASIS, należy wdrożyć pojazd klasy, który wdraża metody uzgodnione w FahrzeugBASIS.

Die Klasse Fahrzeug dient dazu, dass nach dem Einschalten des Mikrocontrollers das Fahrzeug mit der Start-Methode in einen sicheren Zustand überführt wird.

The class vehicle serves that after switching on the microcontroller the vehicle with the start method into a safe Condition is transferred.

Pojazd klasy służy temu po włączeniu mikrokontrolera pojazd z metodą startową do sejfu Warunek jest przekazywany.

class FahrzeugBASIS
{
	virtual void start();
	virtual void stop();
	virtual int summe(int,int);
};

Code 8.6-5: Datei FahrzeugBASIS.h

Aufgabe 2 - Serielle Kommunikation

Task 2 - Serial Communication

Zadanie 2 - komunikacja szeregowa

Setzen Sie nachfolgende abtrakte Klasse RS232BASIS in einer von ihr erbenden Klasse RS232 in sinnvoller Weise um.

Conveniently implement subsequent class RS232BASIS in an inheriting class RS232.

Dogodnie implementuj kolejną klasę RS232BASIS w dziedziczącej klasie RS232.

Schreiben Sie ein passendes Testprogramm.

Write a suitable test program.

Napisz odpowiedni program testowy.

class RS232BASIS
{
	virtual void start();
	virtual void stop();

	virtual void sendeZeichen(char);
	virtual char empfangeZeichen();

	virtual void sendeText(char*);
	virtual void empfangeText(char*);

	virtual void sendeInt(int);
	virtual int  empfangeInt();
};

Code 8.6-6: Datei RS232BASIS.h

Aufgabe 3

Task 3

Zadanie 3

Setzen Sie nachfolgende abtrakte Klasse SensorBASIS in einer von ihr erbenden Klasse Sensor in sinnvoller Weise um.

Reapply the following class of SensorBASIS in a class of its own, Sensor Sensor.

Ponownie zastosować następującą klasę czujnika SensorBASIS w własnej klasie czujników.

Schreiben Sie ein passendes Testprogramm, welches RS232 verwendet und die aktuellen Sensorwerte anzeigt.

Write a suitable test program that uses RS232 and displays the current sensor values.

Napisz odpowiedni program testowy, który używa RS232 i wyświetla aktualne wartości czujników.

class SensorBASIS
{
	virtual void start();
	virtual void stop();

	virtual int holeWert();
};

Code 8.6-7: Datei SensorBASIS.h

Aufgabe 4

Task 4

Zadanie 4

Setzen Sie nachfolgende abtrakte Klasse LEDBASIS in einer von ihr erbenden Klasse LED in sinnvoller Weise um.

Conveniently implement subsequent LEDBASIS excerpts in their inherited Class LED.

Dogodnie implementuj kolejne fragmenty LEDBASIS w odziedziczonej klasie LED.

Hinweis: der übergebene Wert bei an(unsigned char), aus(unsigned char) bezeichnet die Nummer der zu schaltenden LED.

Note: the value passed in at (unsigned char), off (unsigned char) denotes the number of the LED to be switched.

Uwaga: wartość przekazana przy (unsigned char), off (unsigned char) oznacza numer LED, który ma zostać przełączony.

Schreiben Sie ein passendes Testprogramm, welches RS232 verwendet, um über ein PC-Terminal die LEDs zu schalten.

Write a suitable test program that uses RS232 to switch the LEDs via a PC terminal.

Napisz odpowiedni program testowy, który używa RS232 do przełączania diod LED przez terminal PC.

class LEDBASIS
{
	virtual void start();
	virtual void stop();

	virtual void an(unsigned char);
	virtual void aus(unsigned char);
};

Code 8.6-8: Datei LEDBASIS.h

Aufgabe 5

Task 5

Zadanie 5

Schreiben Sie sinnvolle Klassen TasterBASIS und Taster nach dem gleihen Schema wie bei den vorangegangenen Aufgaben.

Write useful classes TasterBASIS and push buttons according to the loan scheme as with the previous tasks.

Napisz użyteczne klasy TasterBASIS i przyciski zgodnie ze schematem wypożyczenia, tak jak przy poprzednich zadaniach.

Gesamtkonzept
overall concept
ogólna koncepcja

In der Vorlesung am 11.06.2014 wird abschließend beispielhaft ein Gesamtkonzept für ein sehr einfaches autonomes Vehikel umgesetzt.

In the lecture on 11.06.2014, finally, an overall concept for a very simple autonomous vehicle implemented.

W wykładzie w dniu 11.06.2014, ostatecznie, ogólna koncepcja wdrożony bardzo prosty autonomiczny pojazd.

Aufgaben hierzu (17.6./18.6.):

Tasks for this (17.6./18.6.):

Zadania do tego (17.6./18.6.):

Aufgabe 1

Task 1

Zadanie 1

  • Die Regelparameter des PI-Reglers für das Fahrzeut (vergl. Vorlesung) sollen über gtkterm vom PC aus vorgegeben werden können.

Aufgabe 2

exercise 2

Zadanie 2

Das, was der Entfernungssensor im Verlauf einer Testfahrt geliefert hat, soll im Mikrocontroller gespeichert und bei Tastendruck an den PC geschickt werden.

What the distance sensor delivered in the course of a test drive should be stored in the microcontroller and at Key press to be sent to the PC.

Co czujnik odległości dostarczony w trakcie jazdy próbnej powinien być przechowywany w mikrokontrolerze i na Naciśnij klawisz, aby wysłać do komputera.

Der Einfachheit halber soll dort in gtkterm ein zeilenweises Balkendiagramm sichtbar werden, um den Verlauf der Sensorwerte darzustellen, ähnlich wie nachfolgend (günstigerweise mit zusätzlicher Zeitangabe):

For the sake of simplicity, a line - by - line bar chart should be visible there in order to determine the course of the Sensor values, similar to the following (conveniently with additional time):

Dla uproszczenia powinien być tam widoczny wykres słupkowy po linii w celu określenia przebiegu Wartości czujników, podobne do poniższych (wygodnie z dodatkowym czasem):

0.1s ####
0.2s ######
0.3s ############
0.4s ##############
0.5s ##############
0.6s ##########
0.7s ######
0.8s ###
0.9s #
1.0s ######
1.1s ##########
1.2s #############
1.3s #####
1.4s ##
usw.

Code 8.6-9: Ausgabe des Sensorwert-Verlaufs auf gtkterm am PC.