myavr.CHKRonline.de

Informationen und Projekte Rund um die Mikrocontroller-Programmierung
von myAVR (ATmega8), STM32 (Cortex-M3/4) und Raspberry Pi (ARM11)

Der Autor

Christian KrügerChristian Krüger, ursprünglich aus dem Altenburger Land stammend, wohnt heute in Nürnberg. Nach seinem Studium der Informations­technik an der West­sächsischen Hochschule in Zwickau, ist er heute Software Entwickler für ein­gebettete Systeme. Seine Berufung fand er im Dienst für seine Kollegen als Teamleiter bei ISCUE.

Die größte Leidenschaft Christians ist es, die Schönheit unserer Welt einzufangen und weiter­zuerzählen. Dies gelingt ihm mit Hilfe seiner Kamera. Seine Fotos und Videos sind auf Instagram und seiner Webseite zu betrachten.

Für seine Zukunft freut sich Christian auf erinnerungs­würdige Reisen, begeisterungs­fähige Menschen und viele neue Erfahrungen.

CHKRonline.de

Facebook Profil

Twitter Profil

XING Profil

Meine myAVR Treiber

UART Library

Eine der wichtigsten Schnittstellen der Computer-Branche war und ist die RS232. Früher im PC-Bereich für Datenkommunikationen aller Art genutzt, wurde sie dort mittlerweile durch Ethernet und USB verdrängt. In eingebetteten Systemen ist sie aber nach wie vor in Form des UART (Universal Asynchronous Receiver Transmitter) vorhanden und findet breite Anwendung.

Die Eleganz des UARTs liegt in seiner Einfachheit. Eine serielle Vollduplex-Datenverbindung über zwei Drähte mit bis zu 500.000 Baud. Daten werden in der Regel Byteweise versendet (5 bis 9 Bit), gesichert durch Parität und umschlossen von einem Start- und bis zu zwei Stoppbit. Mehr braucht es nicht.

Startbit Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Parität Stopbit

Die Schnittstelle eignet sich daher ideal für die Anbindung einzelner Komponenten oder die Kommunikation zwischen verschiedenen Microcontrollern. Auch bietet sie die Möglichkeit, mit dem PC in Verbindung zu treten. Daten werden in dem Fall meist als ASCII-Zeichen interpretiert.

Im ATmega8 ist der UART die einzige Möglichkeit, mit einem PC Daten auszutauschen. Daher ist eine Implementierung bei vielen Anwendungen notwendig. Der Programmer mySmartUSB MK2 bietet die Möglichkeit, das UART-Signal des ATmega8 über USB an den PC weiter zu reichen. Dort kann es am virtuellen COM-Port ausgelesen werden.

Umsetzung

Die Bibliothek umfasst grundlegende Funktionen für das Versenden und Empfangen von Daten. Ich konnte allerdings nicht sämtliche Kombinationen aus Baudrate, Parität, Datenbits und Stoppbits testen. Wegen der großen zeitlichen Unbestimmtheit einer Datenverbindung ist es meist notwendig, die Interrupt-Handler des ATmega für die Kommunikation zu verwenden. Diese sind in der Bibliothek lediglich als Prototypen ausgelegt und müssen im Hauptprogramm gefüllt werden. Ein ausgewachsenes Strömungsmodell wäre an dieser Stelle vermutlich zu viel des Guten gewesen.

Lizenz

Dieses Programm ist freie Software. Du kannst es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach deiner Option) jeder späteren Version.

Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es dir von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details findest du in der GNU General Public License.

Die Lizenzvereinbarung stehen folgend zur Verfügung: GPL 3.0 Lizenz

Kompilierung

Der Treiber liegt in Form einer statischen Bibliothek vor. Diese kann einfach zusammen mit einem ausführbaren Programm gelinkt werden. Dazu sind der Header der Bibliothek als auch die Bibliothek selbst notwendig. Neben der Bibliothek steht ein kleines Testprogramm zur Verfügung, welches den aktuellen Wert des ADC0 via UART versendet. Dieser Wert lässt sich am PC z.B. mittels des myAVR Workpad Plus in einen grafischen Verlauf darstellen.

Die Bibliothek wurde mit Hilfe des myAVR Workpad Plus und AVR-Eclipse entwickelt. Sie sollte sich in einem Hauptprogramm mit Hilfe des myAVR Workpad SE bzw. Plus oder AVR-Ecplise jederzeit kompilieren und auf ein myAVR Board MK2 USB transferieren lassen. Bei der Nutzung des myAVR Workpad ist dazu die Angabe der Bibliothek in den Datei-Kommentaren notwendig:

// LinkerOption   : -v -L"PATH_TO_UART_LIBRARY" -lUARTDriver

Unter Eclipse ist die Definition des Symbols __ECLIPSE__ für eine korrekte Kompilierung notwendig, außerdem müssen die Pfäde zu der Bibliothek in den Projekt-Eigenschaften hinterlegt werden. Siehe dazu auch das AVR-Eclipse Tutorial Seite 3.

Die Kompilierung der Bibliothek selbst ohne Hauptprogramm ist lediglich mit AVR-Eclipse vorgesehen. Das myAVR Workpad bietet keine mir bekannte Möglichkeit, eine Bibliothek zu kompilieren.

Beispiel Hauptprogramm:

#define F_CPU 3686400
#include "UARTDriver.h"

int main(void)
{
    uint8_t i = 0; 
    uart_init(Asynchronous,Rise,Baud9600,Even,Stopbit1,Char8);
    uart_configChannel(true,true,false,false,false);
    while(1)
    {
        uart_sendData(i++);
    }
    return 0;
}

Bei Fragen oder Anregungen stehe ich gerne zur Verfügung: chkr1989@chkronline.de

Changelog

Test Version 1.4

Version 1.1

Test Version 1.3

Version 1.0

Test Version 1.2

Version 0.9

Version 0.8

Bibliothek ATmega8 @ 3,6864 MHz

Bibliothek ATmega328P @ 16,0 Mhz

Testprogramm ATmega8 @ 3,6864 MHz

Testprogramm ATmega328P @ 16,0 Mhz

Lizenzinformationen