Forum: Mikrocontroller und Digitale Elektronik Real Time Clock programmieren


von leinad R. (leinad2)


Lesenswert?

Hallo,
ich spiele gerade etwas mit einer Real Time Clock (TinyRTC V1).
Ich Programmiere in SiSy C++ und wollte jetzt mal fragen wo ich eine 
"Befehlssammlung" einsehen kann ...
Also was ich alles an dem Teil verstellen und programmieren kann.

Danke

von Eumel (Gast)


Lesenswert?

Schau was für ein Chip drauf ist und dann schaust du in das 
entsprechende Datenblatt. Wo liegt das Problem?

von leinad R. (leinad2)


Lesenswert?

Es ist ein Atmega8A-PU.
Mein Problem liegt darin, dass ich nicht weiß wie ich bestimmte Aktionen 
programmieren soll und noch nichts mit den rtc. Befehlen gemacht habe.
Jetzt würde ich einfach gerne nachlesen was dabei überhaupt möglich ist 
und welche Befehle was machen.

von Eumel (Gast)


Lesenswert?


von leinad R. (leinad2)


Lesenswert?

Ja genau um das Teil hier gehts :-)
Das andere ist natürlich ob es iwo ein "Nachschlagewerk" für Befehle 
gibt.

von Eumel (Gast)


Lesenswert?

Siehst du, das meinte ich. Auf dem Teil sind zwei ICs drauf. Eine RTC 
und ein EEPROM. Und die Datenblätter dieser beiden Teile suchst du dir 
jetzt. In denen steht ALLES was die können.

von leinad R. (leinad2)


Lesenswert?

Also nur fürs richtige Verständnis ... ich bin mir sicher, dort ALLES 
drin steht was der kann aber steht da auch drin wie man ihn dazu bringt 
wie er das macht was er kann ?

Ich seh grad ich hab mich evtl. etwas sehr falsch ausgedrückt!
Ich habe dieses Teil (TinyRTC V1) an einem Atmega8 hängen welchen ich 
jetzt gerade programmiere.
Ich habe ein Beispielprogramm gefunden anhand dessen ich zumindest mal 
die Zeit an einem Display ausgeben können aber mich würden 
weitreichendere Befehle interessieren.
Ich meine eben sowas wie "rtc.setTime ();" "rtc.config();"

von Eumel (Gast)


Lesenswert?

leinad R. schrieb:
> Also nur fürs richtige Verständnis ... ich bin mir sicher, dort ALLES
> drin steht was der kann aber steht da auch drin wie man ihn dazu bringt
> wie er das macht was er kann ?

Ja, wirklich alles.

Die beiden Teile sind ja über I2C mit deinem Controller verbunden. Du 
kannst ihnen Befehle/Daten schicken und sie Antworten ggf.

Diese Highlevelfunktionen die du da gerade zitierst machen genau das. 
Schau dir erstmal an wie I2C funktioniert, allgemein und mit deinem 
Atmega. Dann baust du dir eigene Funktionen die das tun was du willst.

Sowas wie
rtc.setTime () könnte dann z.b. 3 int Werte übergeben kriegen:
rtc.setTime (Stunde,Minute,Sekunde)

was innerhalb der Funktion passiert orientiert sich dann am Datenblatt 
der RTC. Da steht drin wie du die Werte genau auf dem Teil speicherst.

von leinad R. (leinad2)


Lesenswert?

OK
Dann danke erstmal wenn dann noch Fragen auftauchen meld ich mich 
einfach wieder hier :-)

von Eumel (Gast)


Lesenswert?

Ja, lass dich nicht entmutigen.
Benutze mal keine LIbaries oder so, mach es "von Hand". Dann weißt du 
für die Zukunft wie man sowas angeht :)

von leinad R. (leinad2)


Lesenswert?

Ja mein "Problem" ist ich hab mir für meine bisherigen spielereien immer 
einfach einzelne Codestellen aus verschiedenen Tutorials und 
Beispielprogrammen rauskopiert.
Das was ich dann geschrieben hab hab ich verstanden aber mit dem drumrum 
is halt schlecht ;-)

von Eumel (Gast)


Lesenswert?

leinad R. schrieb:
> Ja mein "Problem" ist ich hab mir für meine bisherigen spielereien immer
> einfach einzelne Codestellen aus verschiedenen Tutorials und
> Beispielprogrammen rauskopiert.
> Das was ich dann geschrieben hab hab ich verstanden aber mit dem drumrum
> is halt schlecht ;-)

Ja, das Highlevel Zeug hast du verstanden. Aber was da wirklich passiert 
eher nicht. :)

von Peter D. (peda)


Lesenswert?

leinad R. schrieb:
> Ich Programmiere in SiSy C++ und wollte jetzt mal fragen wo ich eine
> "Befehlssammlung" einsehen kann ...

Es würde mich arg wundern, wenn es zu SiSy keine Hilfe, Manuals oder 
Doku gäbe. Such dochmal auf Deiner Festplatte in der SiSy-Installation 
oder auf der SiSy-Webseite.


Eumel schrieb:
> Ja, das Highlevel Zeug hast du verstanden. Aber was da wirklich passiert
> eher nicht. :)

Das "Highlevel Zeug" ist so, wie mit Legosteinchen spielen.
Wenn Du etwas bauen willst und hast das dazu passende Legosteinchen 
gefunden, schön.
Wenn Du dieses Legosteinchen aber nicht findest, dann hast Du ein 
Problem. Es wird Dir niemand ein Legosteinchen zurechtfeilen, Du mußt es 
wohl oder übel selber programmieren.
Das ist dann der Schritt vom Spielen mit Legosteinchen weg und hin zum 
richtigen Programmieren. D.h. ein Problem analysieren und dann 
implementieren.

Es kann natürlich niemand alles wieder von vorne programmieren. Komplexe 
Anwendungen muß man kaufen, z.B. Windows wird niemand selber 
nachprogrammieren.

Eine RTC auf nem Microcontroller ist aber leicht zu implementieren. 
Außerdem gibt es schon reichlich Code im Web. Aber ohne kleinere 
Anpassungen wird es wohl nicht gehen.


Peter

P.S.:
Wenn es um spezielle Entwicklungsumgebungen geht, sollte man diese im 
Topic nennen. Dann brauchen sich das nur diejenigen ansehen, die sich 
damit auch auskennen.

von Julius (Gast)


Lesenswert?

Hallo,

also in meinem SiSy finde ich diverse Hilfen jeweils im Editor auf 
Rechte Maustaste... habe aber die Version 3.34 die ist verhältnismäßig 
frisch ;-) ob die aber ALLE Befehle enthält :-/ Zur Echtzeituhr müsstest 
ins Datenblatt schauen oder einen Devicedriver oder in SiSy eine 
entsprechende Klasse benutzen hier mal ein  Auszug aus der Hilfe zur 
Klasse DS1302

I2C_DS1307
Klasse für das TWI Add-On myTWI Echtzeituhr. [Mehr ...]

Vererbung
Basisklassen(n)
 I2C→  I2CDevice→  I2C_DS1307

Attribute
public:
Attribut Typ Beschreibung
day uint8 Tag des Monats
hours uint8 Stunden
bit6 = 1 -> 12h-Format (bit5=am/pm)
minutes uint8 Minuten
month uint8 Monat
seconds uint8 Sekunden
bit7 = 1 -> angehalten
weekday uint8 Wochentag
1=Montag ... 7=Sonntag
year uint8 Jahr, Zweistellig

Operationen
public:
Name Parameter Rückgabewert Beschreibung
convertDate const char* date void Lädt das Datum in die Attribute.
convertTime const char* time void Lädt die Uhrzeit in die Attribute.
formatTimeToString String& time,
const char* mask void Gibt aktuelles Datum und Uhrzeit zurück.
getTime char* time, char* mask void Gibt aktuelles Datum und Uhrzeit 
zurück.
getTime const char* mask String Gibt aktuelles Datum und Uhrzeit zurück.
read  bool Liest die aktuelle Zeit in die Klassenvariablen.
setDate const char* date void Setzt das Datum.
setTime const char* time void Setzt die Uhrzeit.
startClock  void Startet die Uhr wieder falls sie angehalten war.
stopClock  void Hält die Uhr an.
write  bool Schreibt die Klassenvariablen.

protected:
Name Parameter Rückgabewert Beschreibung
bcd2num uint8 value uint8 Wandelt eine 2stellige gepackte BCD-Zahl in 
einen Integer.
num2bcd uint8 value uint8 Wandelt eine Zahl in eine 2stelligen gepackte 
BCD-Zahl.

Detailbeschreibung I2C_DS1307
Klasse für das TWI Add-On myTWI Echtzeituhr.

Beispiel: Verwendung

Twi_Time_DS1307 rtc;
rtc.config( 0xD0 );
...
char buffer[50];
rtc.getTime(buffer, "%d.%m.%Y %h:%i:%s")

Platzhalter:

%Y  Jahr vierstellig (es ist nur 20xx möglich, nicht 19xx)
%y  Jahr zweistellig
%m  Monat als  Zahl
%d  Tag  als Zahl
%w  Wochentag als Text (Mo,....,So)
%h  Stunden
%i  Minuten
%s  Sekunden
%a  am/pm wenn die Uhr im 12- Stundenformat läuft

Funktionsbeschreibungen
-----------------------
static bcd2num(uint8 value) uint8

Wandelt eine 2stellige gepackte BCD-Zahl in einen Integer.
convertDate(const char* date) void
Lädt das Datum in die Attribute.

Beispiel:
0904201 oder 09-04-20-1 = Mo der 20.04.2009
Format:
Jahr zweistellig,
Monat zweistellig,
Tag zweistellig und
Wochentag als Zahl (1 für Montag, 7 für Sonntag).
Die einzelnen Angaben können durch ein Trennzeichen abgetrennt werden, 
gültige Zeichen sind ., / und -.

Parameter:
date Die Zeichenkette mit dem Datum welches einstellt werden soll.

convertTime(const char* time) void
Lädt die Uhrzeit in die Attribute.

Beispiel:
165308  oder 16:53:08   = 16 Uhr 53 min 08 sek (24-Stunden-Modus)
040000a oder 04:00:00:a =  4 Uhr 0 min 0 sek (12-Stunden-Modus)
040000p oder 04:00:00:p = 16 Uhr 0 min 0 sek (12-Stunden-Modus)
163050  oder 16-30-50   = 16 Uhr 30 min 50 sek (24-Stunden-Modus)
Format:
Stunden zweistellig,
Minuten zweistellig,
Sekunden zweistellig,
wenn 12-Stunden Format: ein 'p' für pm oder ein 'a' für am.
Die einzelnen Angaben können durch ein Trennzeichen abgetrennt werden, 
gültige Zeichen sind :, /, -.

Parameter:
time Zeichenkette mit der Uhrzeit die einstellt werden soll.
in24h ob die Zeit als 24 oder 12 Stundenformat angegeben ist, 
24-Stundenformat ist Standard.


formatTimeToString(String& time,const char* mask) void

Gibt aktuelles Datum und Uhrzeit zurück.

Das Format der Rückgabe kann mittels einer Maske formatiert und 
individuell angepasst werden.

Beispiel:

Datum = Montag der 2009.04.20, Zeit  = 16:30:00
mask  = "Am %d.%m.%Y um %h:%i:%s Uhr."
ergibt: "Am 20.04.2009 um 16:30:00 Uhr."

Platzhalter:
%Y  Jahr vierstellig (es ist nur 20xx möglich, nicht 19xx)
%y  Jahr zweistellig
%M  Monat als  Zahl
%d  Tag  als Zahl
%w  Wochentag als Text (Mo,....,So)
%h  Stunden
%m  Minuten
%s  Sekunden
%a  am/pm wenn die Uhr im 12- Stundenformat läuft

Parameter:
time Zeiger auf die Ergebniszeichenkette
mask Zeiger auf die Zeichenkette mit der Maske für das Ergebnis


getTime(char* time, char* mask) void

Gibt aktuelles Datum und Uhrzeit zurück.
Das Format der Rückgabe kann mittels einer Maske formatiert und 
individuell angepasst werden.

Beispiel:
Datum = Montag der 2009.04.20, Zeit  = 16:30:00
mask  = "Am %d.%m.%Y um %h:%i:%s Uhr."
ergibt: "Am 20.04.2009 um 16:30:00 Uhr."

... naja und so weiter :-D

Gruß

von Julius (Gast)


Angehängte Dateien:

Lesenswert?

ups Bild vergessen :(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.