NKC Forum
Registrieren | FAQ | Suche | Wer ist online? | Mitgliederliste | Heutige Beiträge | Kalender | Einloggen



Autor Thema: UHR3 r2 von Jens
MHofmann1965
Ist öfters hier
**
ID # 16


  Erstellt am 05. März 2008 12:38 (#1)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hi Leute,
ich habe gerade die UHR3 r2 von Jens Mewes geätzt und aufgebaut. Ich habe nun das Problem, daß bei dem nagelneuen DALLAS-Uhrenchip der Oszillator abgeschaltet ist, um Batteriestrom zu sparen. Ich weiß zwar, daß ich die Adresse $20 auf die $0A schreiben muß, um den Oszillator zu starten, aber ich bekomme das irgendwie nicht hin. Ich kenne mich zwar super aus mit der Hardware (Platinen-Ätzen und löten), aber bei der Software muß ich noch viel lernen ! Ich benutze den 68008-Prozessor und das 7.01-Grundprogramm. Die Uhr kann ich stellen, aber sie läuft nicht los, da der Oszillator abgeschaltet ist. Wie bekomme ich den am besten zum Laufen ?
Danke für Eure Hilfe !
Gruß
Michael :)

Beiträge: 27 | Mitglied seit: September 2004 | IP-Adresse: gespeichert
DerInder
Fast schon Admin
Seitenadmins
***
ID # 2


  Erstellt am 05. März 2008 12:59 (#2)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hallo Michael,

ich glaub ich hab das aktivieren des Uhrenchips in der Doku zur Uhr3 etwas missverständlich beschrieben :(

Du musst zuerst $0a auf die Portadresse $fffffffa schreiben (Adresse des Uhren-Registers) und dann $20 auf die Portadresse $fffffffb schreiben. So sollte es eigentlich klappen ;)

-----------------------
Gruß
-=jens=-

Beiträge: 912 | Mitglied seit: Juni 2004 | IP-Adresse: gespeichert
MHofmann1965
Ist öfters hier
**
ID # 16


  Erstellt am 07. März 2008 10:20 (#3)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Hallo Jens,
vielen Dank für Deine schnelle Hilfe. Es hat funktioniert !
Die Uhr tickt.
Ein Hinweis noch: Wenn das Layout mal überarbeitet werden sollte, dann könnte man die Leiterbahnen etwas dicker machen. Dann ist es etwas leichter zu ätzen. Bei mir ging es ganz gut, da ich mit einer Schaum-Ätzanlage geätzt hatte. Sowas hat nur nicht jeder und in einer Schale mit Ätzmittel sind die feinen Bahnen schnell unterätzt.
Gruß
Michael

Beiträge: 27 | Mitglied seit: September 2004 | IP-Adresse: gespeichert
m.haardt
Voll in Gange
***
ID # 93


  Erstellt am 14. März 2020 23:33 (#4)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Manche Dinge dauern etwas länger. Ich habe heute nachmittag endlich die UHR3 fertig bestückt. Den Chip hatte ich schon länger herumliegen und auch auf externe Batterie umgebaut, aber dann war nie Zeit.

Erkenntnisse: Ohne Batterie hat der Chip keine Lust, was Sinnvolles zu tun. Mit Batterie und einem Start tickte er, aber hat nur Blödsinn gemacht, z.B. lief er in binär, obwohl der Modus angeblich BCD war. Das Datenblatt beschreibt das etwas unglücklich, d.h. es ist eher ein Test: Hat man es verstanden, ergibt es einen Sinn. ;-)

Der Arduino war mal wieder hilfreich. So geht's:

void ds12887_init()
{
unsigned char reg;

// No square wave, BCD mode, 24h mode, no daylight saving
ds12887_write(0x0b, 0x02);
// start clock
ds12887_write(0x0a, 0x20);

// Stop counting
reg = ds12887_read(0xb);
reg |= 0x80;
ds12887_write(0xb, reg);

// Fix up century
reg = ds12887_read(0x32);
if (reg == 0xff) ds12887_write(0x32, 0x20);

// Fix up month
reg = ds12887_read(0x08);
if (reg == 0) ds12887_write(0x08, 1);

// Fix up day of month
reg = ds12887_read(0x07);
if (reg == 0) ds12887_write(0x07, 1);

// Enable counting
reg = ds12887_read(0x0b);
reg &= ~0x80;
ds12887_write(0x0b, reg);
}

Michael

Beiträge: 501 | Mitglied seit: April 2008 | IP-Adresse: nicht gespeichert
m.haardt
Voll in Gange
***
ID # 93


  Erstellt am 16. März 2020 16:57 (#5)  |  Zitat Zitat   PN PN   E-Mail E-Mail
Jens: Der Interrupt der Uhr funktioniert auch. 2 Hz eingestellt und der Arduino bestätigt, dass die Interrupts mit ca. 500 ms kommen.

Sinnvollerweise löscht man die Interrupts in der Initialisierung:

// No interrupts, square wave, BCD mode, 24h mode, no daylight saving
ds12887_write(0x0b, 0x02);
// Clear interrupts
ds12887_read(0x0c);
// start clock
ds12887_write(0x0a, 0x20);

// Stop counting
reg = ds12887_read(0xb);
reg |= 0x80;
ds12887_write(0xb, reg);

// Fix up century
reg = ds12887_read(0x32);
if (reg == 0xff) ds12887_write(0x32, 0x20);

// Fix up month
reg = ds12887_read(0x08);
if (reg == 0) ds12887_write(0x08, 1);

// Fix up day of month
reg = ds12887_read(0x07);
if (reg == 0) ds12887_write(0x07, 1);

// Enable counting
reg = ds12887_read(0x0b);
reg &= ~0x80;
ds12887_write(0x0b, reg);

Das ist echt ein schöner Chip: Es gibt ein Bit zum schnellen Test im Interrupthandler und Bits für die einzelnen Ereignisse. Die Frequenz kann sehr fein eingestellt werden und man muss den Interrupt bestätigen, bevor ein neuer Interrupt kommt.

Es empfiehlt sich nur, den INT-Jumper zu stecken. :-)

Michael

Beiträge: 501 | Mitglied seit: April 2008 | IP-Adresse: nicht gespeichert



| https://hschuetz.selfhost.eu | Boardregeln | Datenschutzerklärung


Tritanium Bulletin Board 1.8
© 2010–2021 Tritanium Scripts


Seite in 0,019120 Sekunden erstellt
18 Dateien verarbeitet
gzip Komprimierung eingeschaltet
1090,88 KiB Speichernutzung