
Viele Arduino Clones aus China verwenden statt dem Atmega16U2 den günstigeren CH340G. Dieser benötigt einen speziellen Treiber, der leider nicht leicht zu finden und oft nur auf chinesischen Seiten verfügbar ist, dessen Seriösität nicht immer bewertet werden kann.
Da es leider keine Bibliothek für den DS3231M gab, die meinen Anforderungen entspricht, habe ich eine eigene entwickelt. Folgende Funktionen sind vorhanden:
- Zeit setzen
- Zeit auslesen
- Temperatur auslesen
- Mehrere Module durch freie Adresswahl an einem Bus betreiben
Methodenübersicht
RTCConnection();
void setAddress(byte address);
byte getSeconds();
byte getMinutes();
byte getHours();
byte getWeekDay();
byte getDay();
byte getMonth();
byte getYear();
void setSeconds(byte seconds);
void setMinutes(byte minutes);
void setHours(byte hours);
void setDay(byte day);
void setMonth(byte month);
void setYear(byte year);
void setTime(byte day, byte month, byte year);
void setTime(byte hours, byte minutes, byte seconds, byte day, byte month, byte year);
float getTemperature();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #include <RTC.h> //RTC library
void setup() {
Serial.begin(250000);
RTC.setSeconds(30);
RTC.setMinutes(7);
RTC.setHours(12);
RTC.setDay(5);
RTC.setMonth(2);
RTC.setYear(16);
}
void loop() {
Serial.print(RTC.getDay());
Serial.print(".");
Serial.print(RTC.getMonth());
Serial.print(".");
Serial.print(RTC.getYear());
Serial.print(" ");
Serial.print(RTC.getHours());
Serial.print(":");
Serial.print(RTC.getMinutes());
Serial.print(":");
Serial.print(RTC.getSeconds());
Serial.print(" Temperature: ");
Serial.println(RTC.getTemperature());
delay(100);
}
|
Downloads:
Für ein schnelles Füllen von Schieberegistern ist man auf eine hohe Schaltgeschwindigkeit der einzelnen Pins angewiesen. Mit einem Arduino Uno (@ 16Mhz) dauert das toggeln eines Pins bis zu 12 µs, was bei mehreren in Reihe geschalteten Schieberegistern zu einem Verlust von Rechenzeit führt, mit der die nächsten Elemente berechnet werde müssen.
Es existiert eine Bibliothek namens digitalWriteFast, die in der Lage ist, eine Pin-Toggle in unter 1 µs durchzuführen. Allerdings hat sie so ihre Macken, sobald sie mit einem ATtiny in Berührung kommt. Also habe ich die Bibliothek für ATtinys umgeschrieben.
Der Ordner digitalWriteFastTiny wird nach C:\Users\Benutzername\Documents\Arduino\libraries bzw. C:\Program Files\Arduino\libraries kopiert und anschließend wie im Beispiel eingebunden.
Beispiel:
1
2
3
4
5
6
7
8
9
10
11
12
13
| #include <digitalWriteFastTiny.h>
#define led 0
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWriteFast(led, HIGH);
delay(1000);
digitalWriteFast(led, LOW);
delay(1000);
}
|