I2C-Echtzeituhr am Atmel AVR

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.