Änderungen

LK-RTC

4.628 Byte hinzugefügt, 09:04, 23. Aug. 2016
Die Seite wurde neu angelegt: „==Bild== [[Datei:LK-RTC.png|358x358px|none]] ==Technische Daten / Kurzbeschreibung== <div class="level2"> Linker Kit Platine mit RTC (Echtzeituhr), ohne Batte…“
==Bild==
[[Datei:LK-RTC.png|358x358px|none]]

==Technische Daten / Kurzbeschreibung==
<div class="level2">
Linker Kit Platine mit RTC (Echtzeituhr), ohne Batterie. Das RTC Modul basiert auf dem Uhr-Chip DS1307, welches das I2C Protokoll unterstützt. Für eine genaue Anzeige benötigt man eine Lithium Zellen Batterie(CR1225). Die Uhr liefert Sekunden, Minuten, Stunden, Tage, Monat und Jahr. Das Modul liefert das richtige Datum trotz Monate die weniger als 31 Tage haben, zusätzlich werden Schaltjahre berücksichtigt. Die Uhr arbeitet im 24 Stunden oder im 12 Stunden Format mit einer AM/PM Anzeige. Und sie ist gültig bis 2100. Wenn das Modul nur mit der primären Stromversorgung versorgt wird, funktioniert das Modul nicht richtig, weil der Kristall nicht schwingen kann.

</div>
===Spezifikation===
<div class="level3">
Maße: 42,1 × 24,2 × 10,6mm<br />Gewicht: 3,8g<br />IO Struktur: SCL,SDA,VCC,GND<br />ROHS: Ja<br />Vcc:4,5 ~ 5,5V<br />Logik High Level Eingang:2,2 - Vcc+0,3V<br />Logik Low Level Eingang:-0,3 - +0,8V<br />Batterie Spannung:2,0 - 3,5V

</div>
==Codebeispiel Arduino==
<pre class="code">#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68 // Das ist die I2C Adresse
// Globale Variablen
int command = 0; // Das ist der Befehl char, in ascii Form, aus dm seriellen Port gesendet
byte zero=0;
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
byte test;

byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Konventiert BCD-Code Zahlen zu normalen Dezimalzahlen
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}

void setDateDs1307(void)
{
second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48));
minute = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
hour = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
dayOfWeek = (byte) (Serial.read() - 48);
dayOfMonth = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
month = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
year= (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(zero);
Wire.write(decToBcd(second)); // 0 bis bit 7 startet die Uhr
Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour)); // Wenn Sie eine 12 Stunden Uhr (am/pm) haben wollen, müssen Sie
// Bit 6 setzten (Es muss readDateDS1307 verändert werden)
Wire.write(decToBcd(dayOfWeek));
Wire.write(decToBcd(dayOfMonth));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.endTransmission();
}

// Ruft das Datum und die Uhrzeit aus dem DS1307
void getDateDs1307()
{
// Registerzeiger wird zurückgesetzt
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Einige von diesen benötigen Masken, weil bestimmte Bits Steuerbits sind.
second = bcdToDec(Wire.read() & 0x7f);
minute = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read() & 0x3f); // Dies muss verändert werden,
// wenn der 12Stunden Modus(am/pm) eingeschaltet ist
dayOfWeek = bcdToDec(Wire.read());
dayOfMonth = bcdToDec(Wire.read());
month = bcdToDec(Wire.read());
year = bcdToDec(Wire.read());

Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(month, DEC);
Serial.print("/");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(year, DEC);
Serial.println(" ");
}

void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
delay(2000);
/*T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99) - T(sec)(min)(hour)(dayOfWeek)(dayOfMonth)(month)(year)
- T stellt das Datum des RTC DS1307 Chip.
Beispiel zum setzten der Zeit für 02-DEC-10 @ 19:57:11 für den dritten Wochentag, senden Sie diesen Befehl
- T1157193021210
*/
if (Serial.available())
{ // Wenn es festgestellt wurde, geben Sie char in der seriellen Warteschlange und Prozess
command = Serial.read();
if (command == 84)
{ //Wenn command = "T" setze Datum
setDateDs1307();
getDateDs1307();
Serial.println(" ");
}
while(1)
{
getDateDs1307();
delay(1000);
}
}
}</pre>
==Codebeispiel Raspberry==
 
==Downloads==
Infos:<br />Englisch: 

Schaltung: [[Medium:001267860-sp-01-en-linker_kit_platine_mit_rtc_echtzeituhr_.pdf|001267860-sp-01-en-linker_kit_platine_mit_rtc_echtzeituhr_.pdf]]
Administrator
403
Bearbeitungen