mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ansteuerung eines RTC über den 3-wire-bus


Autor: Hölscher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum Freunde,
mein Problem liegt in der Ansteuerung eines DS1302(RTC) über den
3-wire-bus.

Problem 1: wie programmiert man den in C
Problem 2: wo schließe ich mein Bauteil an (AT89S8252)

Mit freundlichen Grüßen
Christian

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Schau erstmal hier rein.

http://www.mikrocontroller.net/forum/read-1-3921.html#3946

Ist die Grundlegende Ansteuerung doch mal sehr schön erklärt. Ist zwar
ASM, aber die Grundlagen stimmen.

Problem 1: Der wird nicht groß "programmiert". Man sendet eine
Adresse und ob man lesen oder schreiben möchte und muß dann 8 Bits
senden oder empfangen.

Problem 2: Anschliessen kannst du den an jeden PIN den du frei hast,
ist halt nachher nur eine Software Frage.

Ich habe aber das Gefühl, das du Anfänger bist. Daher ist das nicht
ohne, aber auf jeden Fall machbar. Kompletten Code wirst du
wahrscheinlich nicht bekommen. Wenn man aber sieht, das du dir wirklich
Gedanken machst und trotzdem nicht weiter kommst, wird du bestimmt auch
Hilfe bekommen.

Lernen kannst du daraus eine Menge, also auf gehts und nicht unter
kriegen lassen.

MFG
Dieter

PS: Diese Seite könnte Dir sehr hilfreich sein, falls kein OZI
vorhanden ist.

http://www.xs4all.nl/~jwasys/old/diy2.html

Autor: Hölscher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dieter, vielen Dank für die gute Information.
Du hast recht ich bin ein Anfänger auf diesem Gebiet.

Ich habe die Aufgabe bekommen eine Steurung aufzubauen die aus einem
LCD-Display, DS1302, Seriellen-Schnittstelle zum Leitstand,
Temperatursensor und einem AT89S8252 Mikrocontroller besteht.

So jetzt stehe ich da...
LCD-Display ist kein Problem mehr, jetzt ist der DS1302 dran.

Vielen Dank für deine Mühen, wenn du weitere Infos für mich hast währe
ich dir sehr dankbar.

Mit freundlichen Grüßen
Christian

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo hapert es den jetzt genau ?

MFG

Dieter

Autor: Hölscher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benötige.

- eine Funktion zur initialisierung des DS1302
- eine Funktion die die Daten in den DS1302 schreibt
- eine Funktion die die Daten in den DS1302 list.

Angeschlossen habe ich ihn jetzt einfach an den Port1

#define IO     P1_0  // Serial Imput Output
#define SCLK  P1_1  // Serial Clock
#define RSTB  P1_2  // Reset Eingang

Ich glaube wenn ich diese drei Funktionen in C habe kann ich doch Daten
an den DS1302 senden z.B Sekunden einstellen und nach belieben
über die Funktion z.B DS_lesen(void) die Sekunden einlesen.

Mit freundlichen Grüßen
Christian

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Der Gedanke mit den Funktionen ist schonmal gut.

z.B.
read_byte

Übergeben wird die Adresse die du lesen willst, zurück bekommst du den
Wert der Speicherstellen.

Wie kriegst du jetzt das Byte auf den Pin?

Variable "adresse" enthält jetzt zum Beispiel 129= &B1000 0001. Damit
wirst du die erste Speicherstelle im RTC, in diesem Fall die Sekunden
auslesen.

Wie du auf Seite 9 im Datenblatt siehst, wird das LSB zuerst ausgegeb
en.

Du mußt jetzt eine Schleife programmieren, um alle 8 Bit der Variablen
"adresse" auszugeben. Bei jedem Durchlauf prüfst du jetzt, ungefähr
so

read_byte(bla bla )

set clk low
set RST low

wait 1 ms
set RST high

Schleifenanfang
set IO high
Jetzt prüfen, ob lsb von adresse low
      wenn ja, dann set IO low
wait 1 ms
set CLK high
wait 1 ms
set CLK lowob, ob das LSB in "Adresse" gesetzt ist oder nicht und
setzt entsprechenden deinen PIN IO high oder low.



jetzt Adresse eine Stelle nach rechts schieben, damit das nächste Bit
nach LSB rutscht

Und das ganze 8 Mal für 8 Bits.


Die Zeiten habe ich einfach mal so angenommen. Und dann mußt du ja noch
die 8 Bits vom RTC einlesen. Läuft genauso, du mußt halt nur den IO auf
Eingang schalten und nach dem CLK Low prüfen ob IO LOW oder High. Und
die die BITs natürlich in eine Variable schieben.

Nach den 8 Bits einlesen RSTB wieder auf LOW und fertig.

Schau doch mal in der Codesammlung nach I2C Routinen in C. Schau Dir da
mal genau an, wie die die Routinen write_byte oder Read_byte
geschrieben haben. Da kann man viel lernen und sogar entsprechenden
anpassen.

MFG Dieter

Autor: Hölscher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super vielen Dank für diese Ausführliche Antwort.
Jetzt habe ich doch schon mal einen sehr guten Ansatz.
Wenn wir Kollegen währen hättest du auf jeden Fall schon mal ein Essen
gut.

Ich wünsche dir ein schönes Wochenende und hoffe das ich dich noch
öffters hier im Forum treffe. Da ich ja noch einiges vor mir habe.

1) LCD Display                           erledigt
2) Serielle Schnittstelle                erledigt
3) DS1302                                in Arbeit
4) A/W Wandler Termofühler               offen
5) einzelne Komponeten zusammenführen    offen

Mif freundlichen Grüßen
Christian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.