Difference between revisions of "AVR Embedded Tutorial - I²C External-Clock/de"
From Free Pascal wiki
Jump to navigationJump to search (Fixed template loop; syntax highlighting; modded categories to German; added language category) |
|||
Line 1: | Line 1: | ||
− | {{ | + | {{LanguageBar}} |
+ | |||
=I²C Externe Uhr DS3231= | =I²C Externe Uhr DS3231= | ||
==Vorwort== | ==Vorwort== | ||
− | Dieser Code ist für einen '''Atmega328/Arduino''' mit '''16MHz''' und einem Uhrenbaustein '''DS3231'''. | + | Dieser Code ist für einen '''Atmega328/Arduino''' mit '''16MHz''' und einem Uhrenbaustein '''DS3231'''. |
Die folgende Funktionen, sind in folgenden Tutorials beschrieben: | Die folgende Funktionen, sind in folgenden Tutorials beschrieben: | ||
+ | |||
* [[AVR Embedded Tutorial - Delays/de|Delay]] | * [[AVR Embedded Tutorial - Delays/de|Delay]] | ||
* [[AVR Embedded Tutorial - UART/de|UART, Serielle Schnittstelle]] | * [[AVR Embedded Tutorial - UART/de|UART, Serielle Schnittstelle]] | ||
Line 12: | Line 14: | ||
==Beschreibung== | ==Beschreibung== | ||
+ | |||
Dieses Beispiel zeigt, wie man den Uhrenbaustein DS3231 anspricht, welcher am '''I²C-Bus''' hängt. | Dieses Beispiel zeigt, wie man den Uhrenbaustein DS3231 anspricht, welcher am '''I²C-Bus''' hängt. | ||
Line 17: | Line 20: | ||
== Funktionen für die DS3131 Ansteuerung. == | == Funktionen für die DS3131 Ansteuerung. == | ||
+ | |||
=== Konstanten === | === Konstanten === | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang="pascal"> | ||
const | const | ||
I2CAddr = $68; // Defaultadresse des DS3131. | I2CAddr = $68; // Defaultadresse des DS3131. | ||
Line 36: | Line 41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | ===Funktionen=== | ||
+ | |||
+ | Umwandlung von BCD --> BIN, BIN --> BCD. | ||
− | |||
− | |||
Dies wird benötigt, das der im BCD-Format angesprochen wird. | Dies wird benötigt, das der im BCD-Format angesprochen wird. | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang="pascal"> | ||
function bcd2bin(val: uint8): uint8; | function bcd2bin(val: uint8): uint8; | ||
begin | begin | ||
Line 54: | Line 61: | ||
Baustein mit einer Zeit beschreiben. Dabei sieht man, das man das Format umwandeln muss. | Baustein mit einer Zeit beschreiben. Dabei sieht man, das man das Format umwandeln muss. | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang="pascal"> |
procedure WriteDS3231(addr: UInt16); | procedure WriteDS3231(addr: UInt16); | ||
begin | begin | ||
Line 71: | Line 78: | ||
Die Zeit aus dem Baustein auslesen. | Die Zeit aus dem Baustein auslesen. | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang="pascal"> | ||
procedure ReadDS3231(addr: UInt16); | procedure ReadDS3231(addr: UInt16); | ||
begin | begin | ||
Line 92: | Line 100: | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== Beispiel == | == Beispiel == | ||
=== Variablen === | === Variablen === | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang="pascal"> | ||
var | var | ||
s: ShortString; | s: ShortString; | ||
Line 103: | Line 111: | ||
=== Hauptprogramm === | === Hauptprogramm === | ||
+ | |||
Die Zeit muss man nur in den DS3231 schreiben, wen man die Uhr richten will. | Die Zeit muss man nur in den DS3231 schreiben, wen man die Uhr richten will. | ||
− | <syntaxhighlight> | + | |
+ | <syntaxhighlight lang="pascal"> | ||
begin | begin | ||
UARTInit; // UART inizialisieren | UARTInit; // UART inizialisieren | ||
Line 133: | Line 143: | ||
== Siehe auch == | == Siehe auch == | ||
+ | |||
* Übersichtseite [[AVR Embedded Tutorial/de|AVR Embedded Tutorial]] | * Übersichtseite [[AVR Embedded Tutorial/de|AVR Embedded Tutorial]] | ||
Autor: [[User:Mathias|Mathias]] | Autor: [[User:Mathias|Mathias]] | ||
− | [[Category: | + | [[Category:AVR/de]] |
− | [[Category: | + | [[Category:Arduino/de]] |
− | [[Category: | + | [[Category:Embedded/de]] |
+ | [[Category:Tutorials/de]] | ||
+ | {{AutoCategory}} |
Revision as of 06:14, 26 January 2020
│ Deutsch (de) │ English (en) │
I²C Externe Uhr DS3231
Vorwort
Dieser Code ist für einen Atmega328/Arduino mit 16MHz und einem Uhrenbaustein DS3231.
Die folgende Funktionen, sind in folgenden Tutorials beschrieben:
- Delay
- UART, Serielle Schnittstelle
- I²C-Bus ansteuern oder AVR Embedded Tutorial - Software I2C, TWI/de
Beschreibung
Dieses Beispiel zeigt, wie man den Uhrenbaustein DS3231 anspricht, welcher am I²C-Bus hängt.
PulUp-Widerstände sind nötig, der DS3231 enthält keine.
Funktionen für die DS3131 Ansteuerung.
Konstanten
const
I2CAddr = $68; // Defaultadresse des DS3131.
TWI_Write = 0;
TWI_Read = 1;
Record für die Zeitspeicherung.
type
TDate = record
year: uint16;
month, day, hour, minute, second, dayOfTheWeek: uint8;
end;
var
Date: TDate;
Funktionen
Umwandlung von BCD --> BIN, BIN --> BCD.
Dies wird benötigt, das der im BCD-Format angesprochen wird.
function bcd2bin(val: uint8): uint8;
begin
Result := val - 6 * (val shr 4);
end;
function bin2bcd(val: uint8): uint8;
begin
Result := val + 6 * (val div 10);
end;
Baustein mit einer Zeit beschreiben. Dabei sieht man, das man das Format umwandeln muss.
procedure WriteDS3231(addr: UInt16);
begin
TWIStart((addr shl 1) or TWI_Write);
TWIWrite(0);
TWIWrite(bin2bcd(Date.second));
TWIWrite(bin2bcd(Date.minute));
TWIWrite(bin2bcd(Date.hour));
TWIWrite(bin2bcd(0));
TWIWrite(bin2bcd(Date.day));
TWIWrite(bin2bcd(Date.month));
TWIWrite(bin2bcd(Date.year - 2000));
TWIStop;
end;
Die Zeit aus dem Baustein auslesen.
procedure ReadDS3231(addr: UInt16);
begin
TWIStart((addr shl 1) or TWI_Write);
TWIWrite(0);
TWIStop;
TWIStart((addr shl 1) or TWI_Read);
Date.second := bcd2bin(TWIReadACK_Error and $7F);
Date.minute := bcd2bin(TWIReadACK_Error);
Date.hour := bcd2bin(TWIReadACK_Error);
TWIReadACK_Error;
Date.day := bcd2bin(TWIReadACK_Error);
Date.month := bcd2bin(TWIReadACK_Error);
Date.year := bcd2bin(TWIReadNACK_Error) + 2000;
TWIStop;
end;
Beispiel
Variablen
var
s: ShortString;
Hauptprogramm
Die Zeit muss man nur in den DS3231 schreiben, wen man die Uhr richten will.
begin
UARTInit; // UART inizialisieren
TWIInit; // I²C inizialisieren
asm Sei end;
// Eine Zeit in den DA3231 schreiben.
Date.second := 33;
Date.minute := 22;
Date.hour := 11;
WriteDS3231(I2CAddr);
// Zeit auslesen und über UART ausgeben.
repeat
ReadDS3231(I2CAddr);
str(Date.second: 6, s);
UARTSendString('Sec: ' + s);
str(Date.minute: 6, s);
UARTSendString(' Minute: ' + s);
str(Date.hour: 6, s);
UARTSendString(' Stunden: ' + s);
UARTSendString(#13#10);
until 1 = 2;
end.
Siehe auch
- Übersichtseite AVR Embedded Tutorial
Autor: Mathias