Fachbereich Elektrotechnik und Informatik Labor für 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 internen Schnittstelle schreiben und über den I2C-Bus das Datum und die Uhrzeit auslesen. Diese Daten sollen auf einem LC-Display ausgegeben werden. Zur Durchführung des Versuchs benötigen Sie: • Datenblatt des ATmega16 Mikrocontrollers • Datenblatt der verwendeten Echtzeituhr (Dallas DS1307) • Machen Sie sich vor Beginn des Praktikums mit der I2C / TWI Schnittstelle vertraut. AVR-Platine AVR-Evaluation-Board Auf der Platine ist ein ATmega16 Controller mit einem 8 MHz-Quarz und externer Beschaltung vorhanden. Des Weiteren ist die TWI Schnittstelle herausgeführt und an die I2C-Slave Platine angeschlossen. Der ATmega16 Mikrocontroller wird, wie im Versuch „AVR UART Kommunikation“, über die USBSchnittstelle mit Hilfe der Software AVRFlash programmiert. Eine direkte Programmierung aus dem AVRStudio ist nicht möglich. I2C-Echtzeituhr am Atmel AVR Seite 3 I2C Slave Platine Auf der Slave-Platine ist eine Dallas DS1307 Echtzeituhr mit I2C-Schnittstelle und externer Beschaltung vorhanden. Über den I2C-Bus können 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 continues 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 erfolgen. Die Ansteuerung dieses Displays haben Sie in einem früheren Versuch bereits durchgeführt. 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); Löscht 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 für das Bus-Timing. Sie als Benutzer dieser Schnittstelle brauchen lediglich die Register des TWI Interfaces initialisieren und können 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 für 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 Schnittstelle 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 Mikrocontroller der Firma Atmel. Zu diesen Mikrocontroller-Typen stellt der Hersteller eine Entwicklungsumgebung zur Verfügung, 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 können 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 werden dabei Compilermeldungen angezeigt, die Ihnen Rückschlüsse 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 ISPSchnittstelle programmiert. Um die vom Compiler erzeugte Hex Datei in den Controller zu flashen, müssen Sie zunächst die Software AVRFlash starten. Kontrollieren Sie zunächst ob die Einstellungen im Flashtool mit den hier angezeigten übereinstimmen. Anschließend können Sie mit dem Button Load im Bereich Code die von Ihnen erzeugte Hex-Datei in das Programmiertool laden. Mit dem Button Write können Sie anschließend die Datei zum Controller übertragen. Nach erfolgreichem Programmiervorgang wird das Programm automatisch ausgeführt. I2C-Echtzeituhr am Atmel AVR Seite 8 Versuchsdurchführung: Gehen Sie zur Versuchsdurchführung 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 erläutert sind. Ermitteln Sie die Registerwerte, die für 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 einem Prescaler-Wert TWPS=0. Auf der Seite 185 finden Sie Beispiele für 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 =0x START STOP Bedingung: TWCR =0x STOP Start der Übertragung: TWCR =0x Übertragung Zur Vereinfachung der Programmierung können Sie auch die vorgegebenen Codeabschnitte aus dem Datenblatt verwenden. Damit entfällt die Berechnung einiger Register.
© Copyright 2024 ExpyDoc