Forum: Mikrocontroller und Digitale Elektronik RTC mit Atmel 89C51CC03 verwenden aber wie?


von Sascha K. (quad2000)


Lesenswert?

Hallo an alle,

ich möchte ein Real Time Clock Baustein in mein µC System einbinden.
Dieser Baustein gibt seine Daten seriell aus.

Das ist das Datenblatt zu dem RTC:
http://www.reichelt.de/?;ACTION=7;LA=6;OPEN=1;INDEX=0;FILENAME=A200%252FDS_1307.pdf;SID=30DN4ja6wQAR4AAEBabaA417d2b9ffc15b86246ff21242641a573

Nun meine Frage:
1: Wie muss ich den RTC in mein µC Programm einbinden, damit ein 
Datenaustausch erfolgen kann (Programmcode)? Mit serieller 
Datenübertragen an einem µC hab ich leider noch keine Erfahrung sammeln 
können.
Die Vorgehensweise ist mir leider nicht bekannt.

Ich Arbeite mit Keil µVision 3.

Danke schonmal für die Hilfe.

von Stephan (Gast)


Lesenswert?

na dann such mal nach I2C so heist das nähmlich. 3 Drähte un dgut.

von Carlos (Gast)


Lesenswert?

Hallo,
wieso denn drei Drähte bei I2C ?
Zwei reichen doch völlig.

Allerdings ist das Protokoll für einen Anfänger nicht ganz so einfach 
umzusetzen.
Mußt Du diese RTC nehmen oder geht auch eine mit SPI-Bus oder mit 
paralleler Ansteuerung (z.B. RTC72421) ?

Carlos

von Gerhard. (Gast)


Lesenswert?

Hallo Sascha,

hier zum Anfang eine kleine Starthilfe:

Zuerst sehe Dir mal die folgenden Links an zum Ueberblick:

http://pdfserv.maxim-ic.com/en/an/AN3300.pdf (C-Beispiel)
http://www.maxim-ic.com/quick_view2.cfm?qv_pk=2688&t=do#Application%20Notes

Druck Dir das Datenblatt des DS1307 aus.

Studiere die KEIL Handbuecher nach I2C Support. Viele Compiler haben I2C 
Support, Suche nach Funktionen wie:

i2c_start()
i2c_write(data)
i2c_read(ACK oder NOACK)
i2c_stop

In dieser Reihenfolge werden alle I2C Communications erledigt. Je nach 
Application, koennen mehr wie eine i2c_read() in einer Loop vorkommen. 
Sehe Dir AN3300 an. Da gibt es ein ausfuehrliches Beispiel.

Jeder I2C Sklave muss mit seiner Addresse die im Datenblatt zu finden 
ist, angesprochen werden. Das LSB Bit bestimmt ob man schreiben oder 
lesen will. Wenn das LSB bit z.B. 0xd0 ist, dann wird ein Datenwort in 
den Adressienten hineingeschrieben. Wenn es 0xd1 ist, dann kommt ein 
Lesevorgang.

Ganz wichtig ist es, wenn mehrere i2C_read() ausgefuehrt werden, dass 
die Letzte i2c_read mit NOACK gesendet wird.

Z.B.
. . .
I²C_start();
I²C_write(ADDRTC); /* write slave address + write */
I²C_write(0x00); /* write register address, 1st clock register */
I²C_start();
I²C_write(ADDRTC | 1); /* write slave address + read */
Sec = I²C_read(ACK); /* starts w/last address stored in register pointer 
*/
Min = I²C_read(ACK);
Hrs = I²C_read(ACK);
Day = I²C_read(ACK);
Day = I²C_read(ACK);
Dte = I²C_read(ACK);
Mon = I²C_read(ACK);
Yr = I²C_read(NACK);
I²C_stop();
. . .

Am Besten studiere die AN3300 bis Du jede Programmzeile verstehst. Es 
ist sehr wichtig, dass man die Programme anderer Leute auch versteht. 
Also nicht aufgeben.

I2C ist sobald man ueber diese erste Huerden springt, mittels der 
bereitgestellten I2C Funktionen meisten ganz leicht zu beherrschen.

Es ist wichtig, dass die SDA und SCL Anschluesse mittels 2.7-4.7KOHM 
Widerstande nach Plus (VDD) geschaltet sind. Sonst funktioniert gar 
nichts.
Viele Mikrocontroller haben Hardware I2C Peripherie. (Aufpassen bei der 
Konfiguration. Compilerunterlagen genau durchlesen und verstehen, 
Compilerbeispiele suchen und dann aud Deine eigene Anwendung anpassen. 
Diese Compilerbeispiele helfen oft bei der Chipconfiguration gewaltig))

Hoffe dass Dir das ein bischen weiterhilft.

MFG,
Gerhard

von Sascha K. (quad2000)


Lesenswert?

Hallo Stephan, Carlos und Gerhard,

danke für eure Antworten.
Da hab ich jetzt einiges vor mir. Hoffe, das ich nicht all zu lange 
dafür brauche. Bin etwas im Zeitdruck... (wer nicht ;)  )

Vorallem danke an Gerhard, Ihre Infos haben mir sehr weiter geholfen. 
Die pdf´s werd ich genau studieren.

@Carlos
Ich bin nicht an ein Baustein gebunde. Ich bin für alles offen.

Schönes Wochenende an alle!!!

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.