I2C-Echtzeituhr am Atmel AVR - Hochschule · PDF fileI2C-Echtzeituhr am Atmel AVR Seite 2...

download I2C-Echtzeituhr am Atmel AVR - Hochschule · PDF fileI2C-Echtzeituhr am Atmel AVR Seite 2 Aufgabenstellung In diesem Versuch soll die interne TWI Schnittstelle eines AVR-Mikrocontrollers

If you can't read please download the document

Transcript of I2C-Echtzeituhr am Atmel AVR - Hochschule · PDF fileI2C-Echtzeituhr am Atmel AVR Seite 2...

  • Fachbereich Elektrotechnik und Informatik

    Labor fr Angewandte Informatik und Datenbanken

    Praktikum Mikrocontroller und DSP

    (EMD) Prof.Dr.-Ing. E. Coersmeier

    I2C-Echtzeituhr am Atmel AVR

    Name, Vorname

    Matrikelnummer

    Versuchstag

    Testat

  • I2C-Echtzeituhr am Atmel AVR Seite 2

    Aufgabenstellung In diesem Versuch soll die interne TWI Schnittstelle eines AVR-Mikrocontrollers zur Kommunikation mit einem I2C-Slave, in diesem Fall eine Echtzeituhr, verwendet werden. Um die Funktion der TWI-Schnittstelle zu testen sollen Sie ein Programm zur Initialisierung der inter-nen Schnittstelle schreiben und ber den I2C-Bus das Datum und die Uhrzeit auslesen. Diese Daten sollen auf einem LC-Display ausgegeben werden. Zur Durchfhrung des Versuchs bentigen Sie:

    Datenblatt des ATmega16 Mikrocontrollers Datenblatt der verwendeten Echtzeituhr (Dallas DS1307) Machen Sie sich vor Beginn des Praktikums mit der I2C / TWI Schnitt-

    stelle vertraut.

    AVR-Platine

    AVR-Evaluation-Board

    Auf der Platine ist ein ATmega16 Controller mit einem 8 MHz-Quarz und externer Beschaltung vor-handen. Des Weiteren ist die TWI Schnittstelle herausgefhrt und an die I2C-Slave Platine angeschlossen. Der ATmega16 Mikrocontroller wird, wie im Versuch AVR UART Kommunikation, ber die USB-Schnittstelle mit Hilfe der Software AVRFlash programmiert. Eine direkte Programmierung aus dem AVRStudio ist nicht mglich.

  • I2C-Echtzeituhr am Atmel AVR Seite 3

    I2C Slave Platine

    Auf der Slave-Platine ist eine Dallas DS1307 Echtzeituhr mit I2C-Schnittstelle und externer Beschal-tung vorhanden. ber den I2C-Bus knnen Uhrzeit und Datum gelesen und geschrieben werden. Genauere Informationen zu diesem Baustein finden Sie im Datenblatt. DESCRIPTION The DS1307 serial real-time clock (RTC) is a low-power, full binary-coded decimal (BCD) clock/calendar plus 56 bytes of NV SRAM. Address and data are transferred serially through an I2C, bidirectional bus. The clock/calendar provides seconds, minutes, hours, day, date, month, and year information. The end of the month date is automatically adjusted for months with fewer than 31 days, including corrections for leap year. The clock operates in either the 24-hour or 12-hour format with AM/PM indicator. The DS1307 has a built-in power-sense circuit that detects power failures and automatically switches to the backup supply. Timekeeping operation con-tinues while the part operates from the backup supply.

    Montage der I2C Slave Platine

    Die Uhrenplatine wird am rechten Rand des Evaluation-Boards an Port C angeschlossen.

  • I2C-Echtzeituhr am Atmel AVR Seite 4

    HD44780-Display

    Die Anzeige der ausgelesenen Informationen soll auf einem HD44780-Display mit 2x16 Zeichen erfol-gen. Die Ansteuerung dieses Displays haben Sie in einem frheren Versuch bereits durchgefhrt. Zur Vereinfachung der Ausgabe finden Sie daher in dem vorgegebenen Projekt bereits einige fertige Funktionen zur Ansteuerung des Displays. void lcd_init(void); Initialisiert das LC-Display void out4(unsigned char x); Gibt ein einzelnes Zeichen auf dem Display aus void lcd_string(char* str); Gibt einen String auf dem Display aus void lcd_setpos(int z,s); Setzt den LCD-Cursor auf die Position Zeile,Spalte void lcd_clrhome(void); Lscht das Display und setzt den LCD-Cursor auf die Position 0,0. void lcd_bcd(unsigned char bcd); Gibt einen BCD-Wert auf dem Display aus. void lcd_int(uint16_t wert, uint8_t s); Gibt den Wert wert mit s Stellen auf dem Display aus.

  • I2C-Echtzeituhr am Atmel AVR Seite 5

    AVR-TWI (TWO-Wire Serial Interface) Der in diesem Versuch eingesetzte ATmega16 besitzt eine Hardware TWI/I2C Schnittstelle. Bei der bertragung bernimmt die ATmega Hardwareschnittstelle die bertragung auf Bit und Byte Ebene und sorgt fr das Bus-Timing. Sie als Benutzer dieser Schnittstelle brauchen lediglich die Re-gister des TWI Interfaces initialisieren und knnen danach Daten ber den Bus schicken. Die TWI Schnittstelle hat die folgenden zum Betrieb notwendigen Register:

    TWBR: TWI Bit Rate Register

    TWCR: TWI Control Register

    TWSR: TWI Status Register

    TWDR: TWI Data Register

    TWAR: TWI (Slave) Address Register Die fr die TWI-Kommunikation notwendigen Informationen zur Initialsierung der TWI Schnittstelle finden Sie im ATmega16 Datenblatt im Kapitel TWO-Wire Serial Interface.

    Machen Sie sich vor Beginn des Praktikums mit der Bedeutung der einzelnen Register und mit der Funktionsweise der TWI Schnittstel-le vertraut! Ansteuerung des DS1307 - Hilfestellung: Gehen Sie zum Auslesen der Uhrzeit aus dem DS1307 in folgenden Schritten vor twi_start(0xd0) twi_send(0) twi_start(0xd1) twi_readAck() twi_readNak() twi_stop() Zum Auslesen des Datenspeichers ersetzen Sie die Adresse 0 im zweiten Schritt durch die Adresse 8.

  • I2C-Echtzeituhr am Atmel AVR Seite 6

    Das Atmel AVR Studio Die in diesem Versuch eingesetzten Mikrocontrollerkarten enthalten einen ATmega16 AVR Mikrocont-roller der Firma Atmel. Zu diesen Mikrocontroller-Typen stellt der Hersteller eine Entwicklungsumge-bung zur Verfgung, die auf den Praktikumsrechnern installiert ist. Der verwendete AVR-GCC-Compiler ist auf den Rechnern bereits im AVR Studio integriert. Starten Sie das AVR Studio in dem Sie auf das AVR Studio 4 Symbol auf dem Desktop klicken.

    Folgendes Fenster ffnet sich automatisch:

    Es ist ein Standardprojekt voreingestellt und Sie knnen direkt Ihren Code eingeben.

    Achtung! ndern Sie keinesfalls die Projekteinstellungen! Um Ihr Projekt zu kompilieren klicken Sie auf den Button Projekt-kompilieren. Im Build-Fenster wer-den dabei Compilermeldungen angezeigt, die Ihnen Rckschlsse auf eventuelle Programmierfehler erlauben. Als Ergebnis erhalten Sie eine Intel-HEX Datei, die in den Mikrocontroller programmiert werden kann.

  • I2C-Echtzeituhr am Atmel AVR Seite 7

    Das Programmiertool Der Mikrocontroller wird im Rahmen dieses Praktikums mit einem Flash-Tool ber eine ISP-Schnittstelle programmiert. Um die vom Compiler erzeugte Hex Datei in den Controller zu flashen, mssen Sie zunchst die Soft-ware AVRFlash starten. Kontrollieren Sie zunchst ob die Einstellungen im Flashtool mit den hier angezeigten bereinstimmen.

    Anschlieend knnen Sie mit dem Button Load im Bereich Code die von Ihnen erzeugte Hex-Datei in das Programmiertool laden. Mit dem Button Write knnen Sie anschlieend die Datei zum Controller bertragen. Nach erfolgreichem Programmiervorgang wird das Programm automatisch ausgefhrt.

  • I2C-Echtzeituhr am Atmel AVR Seite 8

    Versuchsdurchfhrung: Gehen Sie zur Versuchsdurchfhrung in folgenden Schritten vor Machen Sie sich mit dem I2C-Bus vertraut (siehe Vorlesungsunterlagen). Im Datenblatt auf den Seiten 172ff finden Sie die Dokumentation der TWI Schnittstelle in der die

    Bedeutung der einzelnen Register erlutert sind. Ermitteln Sie die Registerwerte, die fr die korrekte Kommunikation notwendig sind. Die Kommunikation soll im Standardmode mit 100kBit/s stattfinden (der ATmega16 wird von

    einem Quarz mit 8 MHz getaktet). Die Kommunikation soll ohne Interrupts ablaufen. Auf der Seite 178 finden Sie die Formel zur Berechnung von TWBR. Arbeiten Sie dabei mit ei-

    nem Prescaler-Wert TWPS=0. Auf der Seite 185 finden Sie Beispiele fr eine I2C Kommunikation in Assembler und C. Machen Sie sich mit dem Datenblatt der DS1307 Echtzeituhr vertraut. Initialisieren Sie die TWI-Schnittstelle und lesen Sie die erforderlichen Informationen aus dem

    RTC-Baustein aus. Geben die Uhrzeit in der ersten Zeile des Displays und das aktuelle Datum in der zweiten Zeile

    des Displays aus. Verwenden Sie dazu die vorgegebenen Funktionen zur Ansteuerung eines HD44780-Displays.

    Ermittelte Registerwerte:

    TWBR =0x

    START Bedingung:

    TWCR

    START

    =0x

    STOP Bedingung:

    TWCR

    STOP

    =0x

    Start der bertragung:

    TWCR

    bertragung

    =0x

    Zur Vereinfachung der Programmierung knnen Sie auch die vorgegebenen Codeabschnitte aus dem Datenblatt verwenden. Damit entfllt die Berechnung einiger Register.