Sie sind hier
E-Book

Multitasking mit AVR RISC-Controllern

Lösungsansätze und praktische Beispiele für Multitasking-Programme

AutorProf. Dr. Ernst Forgber
VerlagFranzis
Erscheinungsjahr2014
Seitenanzahl260 Seiten
ISBN9783645252706
FormatPDF/ePUB
KopierschutzWasserzeichen/DRM
GerätePC/MAC/eReader/Tablet
Preis39,99 EUR
Das Buch stellt anhand praktischer Beispiele für die Atmel-8-Bit-Controller mehrere Ansätze für Multitasking-Programme vor. Ausgehend von der Lösung mit einer einfachen Programmschleife werden Multitasking- und Echtzeitkonzepte erläutert - bis hin zur Entwicklung eines echtzeitfähigen, prioritätsgesteuerten, präemptiven Tasking-Systems. Die Ausführungen der verschiedenen Konzepte erfolgen anhand durchgehender Beispiele. Dabei wird zunächst immer die grundlegende Idee vorgestellt, die dann mithilfe der praktischen Beispielen konkretisiert und in einem anschließenden Blick auf die Details vertieft wird. Aufbau des Buchs: Multitasking, Kontext, Real-Time & Co. Begriffliche Erklärungen und grundlegende Mechanismen. Experimentierumgebung Beschreibung der Hard- und Software. AVR-Controller in C programmieren Besonderheiten bei der Programmierung von AVR-Controllern. Multitasking, die Erste: Die Minimalversion Klassischer Ansatz zum Multitasking unter komplettem Verzicht auf einen Scheduler und dem Versuch, alles über Interrupts und eine große Programmschleife zu realisieren. Betrachtung verschiedener Scheduler mit wachsender Komplexität in Theorie und Praxis. Multitasking, die Zweite: Ein Scheduler im Eigenbau Darstellung der Funktionsweise eines einfachen prioritätsgesteuerten Schedulers für zyklische Funktionen. Multitasking, die Dritte: Kooperation ist gefragt Zeigt die Funktionsweise eines kooperativen Schedulers auf der Basis von Dunkels' Protothreads. Multitasking, die Vierte: Präemptives Tasking Vorstellung eines vollständig prioritätsgesteuerten RTOS-Schedulers mit Präemption.

Prof. Dr. Ernst Forgber lehrt an der Hochschule Hannover an der Fakultät Elektro- und Informationstechnik. Er arbeitet auf den Gebieten Software-Technik, Echtzeitsysteme und Entwurf digitaler Schaltungen mit VHDL.

Kaufen Sie hier:

Horizontale Tabs

Leseprobe

3AVR-Controller in C programmieren

Bei der Programmierung der AVR-Controller in C sind einige Besonderheiten gegenüber einem PC-Programm zu beachten. Zum einen gibt es in der Regel keine Standardeingabe und -ausgabe, d.h., Funktionen wie printf() und scanf() entfallen. Zum anderen will man die digitalen Ein-/Ausgabesignale (Ports) des Prozessors nutzen, um externe Hardware anzusteuern und auszulesen.

3.1Digitale Ein- und Ausgaben

Die AVR-Controller besitzen verschiedene 8 Bit breite I/O-Register (Ports), auf denen digitale Signale ausgegeben und eingelesen werden können. Die Port-Pins lassen sich unabhängig voneinander benutzen. Dazu muss man zuvor für jeden Pin die Datenrichtung angeben, indem man das zugeordnete Data Direction Register entsprechend setzt.

Direkt nach dem Einschalten der Betriebsspannung sind alle Register des Prozessors gelöscht, d.h., sie enthalten den Wert 0. Wird ein Bit im Data Direction Register auf 1 gesetzt, ist damit der entsprechende Port-Pin als Ausgang konfiguriert.

Der ATmega8 besitzt die Ports B, C und D, deren Pins meist mehrere Funktionen haben. Im folgenden Beispielprogramm wird ein Taster ausgelesen, der mit Port D, Pin 4 (kurz: pd4) verbunden ist. Bei gedrücktem Taster wird eine LED eingeschaltet, die an Port D, Pin 5 (pd5) angeschlossen ist. Die restlichen I/O-Pins bleiben ungenutzt, es ist also nur das Data Direction Register für Port D, Pin 5 auf 1 (DDRD |= (1<<5)) zu setzen (siehe Funktion _initPortDirections()).

Listing Anfang

/**************************************************

Beispiel ATmega8 Port I/O:

Taster an pd4 lesen, LED an pd5 ansteuern

***************************************************/

#include <avr/io.h>

#define AN      1

#define AUS    0

#define set_bit(sfr,bit)    sfr |= (1<<(bit))

#define clear_bit(sfr,bit)  sfr &= ~(1<<(bit))

/*--------------------------------------------------*/

// function prototypes

/*--------------------------------------------------*/

void    _initPortDirections(void);

uint8_t _Taster_T3_pressed(void);

void    _setLED1(uint8_t val);

/*--------------------------------------------------*/

int main(void)

{   _initPortDirections();

    while (1)  // Endlosschleife, Atmega kehrt nie zurueck...

{   if(_Taster_T3_pressed())

              _setLED1(AN);

            else

              _setLED1(AUS);

}

    return 0;

}

/*!

 **************************************************************

 * @par Beschreibung:

 *   PORT-Richtungen einstellen

 *************************************************************/

void _initPortDirections(void)

{   DDRB = 0; /* Port B: alle Pins auf INPUT */

    DDRC = 0; /* Port C: alle Pins auf INPUT */

    DDRD |= (1<<5);  /* Port D: Ausgabe: LED1, pd5 */

}

/*!

 **************************************************************

 * @par Beschreibung:

 *   Taster T3 lesen, Pin pd4

 *************************************************************/

uint8_t  _Taster_T3_pressed(void)

{   uint8_t x;

    x = PIND & (1<<4);

    if(x!=0) return 1;  /* gedrueckt */

    else     return 0;

}

/*!

 *************************************************************

 * @par Beschreibung:

 *   LED1 ansteuern, Pin pd5

 *************************************************************/

void _setLED1(uint8_t val)

{

    if(val!=0) set_bit(PORTD,5);

    else       clear_bit(PORTD,5);

}

Listing Ende

Sicher kann man diesen Programmcode auch deutlich kürzer halten, aber die Verwendung von Funktionen erhöht die Lesbarkeit und wird in größeren Programmen unverzichtbar.

Zu Beginn des Programms werden die Symbole »AN« und »AUS« sowie die Makros set_bit(sfr,bit) und Letter clear_bit(sfr,bit) definiert. Die Makros erleichtern das Setzen bzw. Löschen eines Bits in einem Register (siehe Funktion _setLED1()).

Das Hauptprogramm main() eines AVR-Controllers darf sich nicht beenden, sondern enthält eine Endlosschleife, in der mit maximaler Geschwindigkeit der Taster abgefragt und die LED entsprechend geschaltet wird.

Die Funktion _initPortDirections() setzt die Data Direction Register des ATmega8, hier gibt es nur einen Ausgabe-Pin pd5.

In der Funktion _Taster_T3_pressed() wird der Taster abgefragt. Mit dem Zugriff auf PIND kann man alle Pins am Port D gleichzeitig einlesen. Anschließend wird das interessierende Bit isoliert (»ausmaskiert«), und die Funktion gibt einen entsprechenden Wert zurück.

Ausgaben an Port D erfolgen, indem man auf PORTD schreibt (siehe Funktion _setLED1()).

3.2Die serielle Schnittstelle nutzen

Für die Kommunikation zwischen PC und AVR-Controller ist die serielle Schnittstelle (RS232) sehr hilfreich. Wenn der PC keine echte RS232-Schnittstelle mehr besitzt, kann man einen USB-RS232-Konverter benutzen, um diese einfache und praktische Schnittstelle weiterhin zu nutzen.

Die meisten AVR-Controller verfügen über eine USART-Schnittstelle (Universal Synchronous and Asynchronous Receiver and Transmitter). Für die Signalwandlung auf einen Pegel von +/–12 V ist externe Hardware nötig, die auf den Experimentierboards vorhanden ist.

In diesem Abschnitt werden die benötigten AVR-Register und ihre Einstellungen für die Kommunikation mit einem PC-Terminalprogramm vorgestellt. Die verwendeten Funktionen sind in einem C-Modul (avr_ser\avr_ser.h und avr_ser\avr_ser.c) zusammengefasst, das in den weiteren Abschnitten für die serielle Kommunikation Verwendung findet.

3.2.1Die serielle Schnittstelle initialisieren

Damit die serielle Kommunikation gelingen kann, ist nicht nur eine korrekte elektrische Verbindung der beiden Partner notwendig, es ist auch das »Protokoll« festzulegen. Dazu gehören die Baudrate, die Anzahl der Datenbits und Stoppbits sowie die Verwendung des Paritätsbits. In der Tabelle sind die relevanten AVR-Register und ihre Funktion dargestellt.

RegisterFunktion
UDRUSART Data Register – eigentlich zwei Register, man schreibt das zu sendende Byte und liest das empfangene Byte
UCSRA

UCSRB

UCSRC

USART Control and Status Register A/B/C – Konfiguration und Status des USART
UBRRL

UBRRH

USART Baud Rate Registers – Low-Byte und High-Byte für die Baudrate

Bild 3.3: USART-Register und ihre Funktion (Schäffer 2008).

Die folgende Funktion initialisiert die serielle Schnittstelle des ATmega8 für eine Kommunikation mit 8 Datenbit, kein Paritätsbit und 1 Stoppbit (8N1).

Listing Anfang

void serInit(uint32_t processorClock_Hz, uint32_t baudRate)

{      uint8_t x;

/* Baudrate Low und High Byte */

UBRRL = (processorClock_Hz / (16*baudRate))-1;

UBRRH = ((processorClock_Hz /...

Blick ins Buch

Weitere E-Books zum Thema: Programmiersprachen - Softwareentwicklung

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

ASP.NET Shortcut

E-Book ASP.NET Shortcut
Format: PDF

Shortcut-Tipps für ASP.NET-Profis Die neue .NET-Version der Active Server Pages stellt eine Umgebung zur Entwicklung von Web-Applikationen im .NET-Framework bereit. Viele aus der Desktop-…

Programmieren lernen in PHP 5

E-Book Programmieren lernen in PHP 5
Format: PDF

Mit der Version 5 erreicht PHP einen bemerkenswerten Reifegrad, der PHP zu einer festen Größe in der Welt der Webprogrammierung macht. Gerade die leichte Erlernbarkeit macht PHP zur idealen…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Mathematik für Informatiker

E-Book Mathematik für Informatiker
Format: PDF

Die Informatik entwickelt sich in einer unglaublichen Geschwindigkeit. Häufig ist die Mathematik Grundlage von Neuerungen. Deshalb ist sie unverzichtbares Werkzeug jedes Informatikers und Pflichtfach…

Weitere Zeitschriften

Ärzte Zeitung

Ärzte Zeitung

Zielgruppe:  Niedergelassene Allgemeinmediziner, Praktiker und Internisten. Charakteristik:  Die Ärzte Zeitung liefert 3 x pro Woche bundesweit an niedergelassene Mediziner ...

Baumarkt

Baumarkt

Baumarkt enthält eine ausführliche jährliche Konjunkturanalyse des deutschen Baumarktes und stellt die wichtigsten Ergebnisse des abgelaufenen Baujahres in vielen Zahlen und Fakten zusammen. Auf ...

dental:spiegel

dental:spiegel

dental:spiegel - Das Magazin für das erfolgreiche Praxisteam. Der dental:spiegel gehört zu den Top 5 der reichweitenstärksten Fachzeitschriften für Zahnärzte in Deutschland (laut LA-DENT 2011 ...

DGIP-intern

DGIP-intern

Mitteilungen der Deutschen Gesellschaft für Individualpsychologie e.V. (DGIP) für ihre Mitglieder Die Mitglieder der DGIP erhalten viermal jährlich das Mitteilungsblatt „DGIP-intern“ ...

DULV info

DULV info

UL-Technik, UL-Flugbetrieb, Luftrecht, Reiseberichte, Verbandsinte. Der Deutsche Ultraleichtflugverband e. V. - oder kurz DULV - wurde 1982 von ein paar Enthusiasten gegründet. Wegen der hohen ...

EineWelt

EineWelt

Lebendige Reportagen, spannende Interviews, interessante Meldungen, informative Hintergrundberichte. Lesen Sie in der Zeitschrift „EineWelt“, was Menschen in Mission und Kirche bewegt Man kann ...

Euro am Sonntag

Euro am Sonntag

Deutschlands aktuelleste Finanz-Wochenzeitung Jede Woche neu bietet €uro am Sonntag Antworten auf die wichtigsten Fragen zu den Themen Geldanlage und Vermögensaufbau. Auch komplexe Sachverhalte ...