Forum: Mikrocontroller und Digitale Elektronik DS128x7


von Andreas Huck (Gast)


Lesenswert?

Hallo,

Ich will/wollte versuchen die DS1287 an einen uC zu koppeln. Nur leider
sagt mir dieser nichts.

Wie ich das in dem Datenblatt verstanden habe, muss man im ersten
Schritt die Adresse auf den Bus legen und dann das Signal AS mit einer
fallende Flanke versehen. Dannach, wenn man schreiben will, legt man
den Wert des Entsprechenden Registers auf den Bus und gibt DS eine
fallende FLanke. Beim lesen ist der Erste schritt gleich, nur dann im
zweiten muss man Die PORTPINS auf Eingan legen und das Signal DS
abwarten.
Ich verwende MOT auf High - Motorola Bus Timing, ist aber egal, wie
auch der verwendete uC egal ist.

Nur leider habe ich nichts über Timing gelesen.

Hat sich jemand damit beschäftigt oder kennt jemand einen Link, der
sich mit diesem Problem der Ansteuerung beschäftigt ????

Danke,
andreas

von Sven Lübke (Gast)


Lesenswert?

Hallöle!

Ich habe hier C-Code fertig (nur sehr rudimentär implementiert), aber
er läuft. Ich habe allerdings sowohl auf einem 8051, als auch auf einem
AVR das Intel-Timing benutzt. Bei dem 8051 kannst Du den DS12887 ganz
normal wie ein ROM oder RAM anschließen, das Bustiming des AVRs ist
leider zu schnell dafür, also musst Du es "per Hand" machen. Wenn Du
irgendwas wissen willst, dann frag...

Tschö,

Sven

von Andreas Huck (Gast)


Lesenswert?

Hi Sven,

Na da hab ich doch gleich mal ne Frage : Ist das Intel-Timing einfacher
zu Handhaben ? (im Datenblatt klinkt das fast so).
Kannst du bitte mal kurz erklären, in welchen Schritten du dabei
vorgegangen bist und mit welchen Zeiten du arbeitest ("Per Hand") ??

Dankeschön

von Sven Lübke (Gast)


Lesenswert?

Hallo Andreas!

Ob das Intel-Timing einfacher ist, kann ich leider nicht beurteilen,
weil ich das Intel-Timing (durch den 8051) kenne und mich deshalb dafür
entschieden habe. Das Motorola-Timing habe ich mir dadurch erst gar
nicht angeguckt, weil es auch ansonsten keine Vorteile bietet (gleiche
Anzahl von Steuerpins etc.).

Zum Ansteuern rechnest Du Dir am besten erstmal die minimale
Befehlszyklus-Zeit Deines Systems aus (meist 1/Clk_Freq). Dann
schnappst Du Dir das Datenblatt des 12C887, suchst das Bus-Timing und
steuerst Deine Control-Leitungen entsprechend an. Wenn Du sowas noch
nie gemacht hast, dann kannst Du Dir ein Lineal nehmen und dieses
vertikal auf den Anfang des Bus-Timings legen. Nun ziehst Du das Lineal
schrittweise von links nach rechts und achtest auf Pegel-Änderungen
(also auf "Striche", die von high auf low oder von low auf high
gehen). Sobald eine Änderung stattgefunden hat, realisierst Du diese in
Deinem Code (ziehst also die Control- und Daten-Leitungen auf low oder
high). Wenn Du am Ende angekommen bist, dann mußt Du nun kontrollieren,
ob Du irgendwelche Zeiten unter- oder überschreitest. Dafür guckst Du
in die Tabelle "AC ELECTRICAL CHARACTERISTICS" und vergleichst die
Zeiten mit Deiner Befehlszyklus-Zeit. Über- oder unterschreitest Du
irgendwelche Zeiten, dann mußt Du mittels schnellerer Programmierung
bzw. delays dafür sorgen, daß das nicht mehr passiert.

Wenn Du alles eingehalten hast, dann solltest Du ohne Probleme eine
Adresse (z.B. die Zeit) auslesen können. Du mußt Dir für das
Intel-Timing zwei versch. Funktionen schreiben: Eine Funktion, die eine
Adresse beschreibt und eine, die eine Adresse liest.

Zum Testen empfielt es sich, daß Du erstmal nur eine Adresse des
General Purpose NV-RAM beschreibst und dann den gleichen Wert ausliest.
Ist der geschriebene Wert nicht identisch mit dem gelesesem Wert, dann
hast Du einen Fehler in der Lese- oder Schreibroutine. Sind beide Werte
identisch, dann kannst Du sicher sein, daß beide Routinen einwandfrei
funktionieren! Soviel zur Lowlevel-Programmierung des 12C887! Wenn Du
damit fertig bist, kannst Du mit den beiden Funktionen neue Funktionen
schreiben, die z.B. die Uhrzeit stellen oder Abfragen.

Prüfe beim Initialisieren der RTC unbedingt das VRT-Bit im Register D,
damit Du sicherstellen kannst, daß der Chip einwandfrei funktioniert...

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.