mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ds1307 uhrenwert und zählerwert zwischenspeichern mit bascom


Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte mit einem at mega 168 und einem ds1307 clock modul die 
uhrzeit laufen lassen. weiterhin möchte ich das die uhrzeit immer im 
ds1307 zwischengespeichert wird, damit im falle eines spannungsabfalles 
alles gesichert ist. außerdem möchte ich noch einen Zählerwert 
zwischenspeichern.
der ds ist mit einer 3v pufferbatterie ausgestattet.
hier schonmal mein bascom programm, läuft soweit aber ich kriegs nicht 
hin, den wert zu speichern.
habt ihr vielleicht irgendwelche tipps
danke gruß andi

$regfile = "m168def.dat"       'es ist ein AtMega 168 Mikroprozessor
$crystal = 8000000       'Taktgeschwindigkeit des internen Oszillators 
beträgt  8Mhz
$baud = 19200       'Baudrate beträgt 19200

Config Sda = Portc.4       'Adresse I2C bus festlegen
Config Scl = Portc.5

Dim _weekday As Byte       'Wochentag als Byte definieren
Dim _day As Byte       'Tag als Byte definieren
Dim _month As Byte       'Monat als Byte definieren
Dim _year As Byte       'Jahr als Byte definieren
Dim _sec As Byte       'Sekunden als Byte definieren
Dim _min As Byte       'Minuten als Byte definieren
Dim _hour As Byte       'Stunden als Byte definieren


Dim Ds1307w As Byte       'Schreibadresse als Byte festlegen
Dim Ds1307r As Byte       'Leseadresse als Byte festlegen

Ds1307w = &B11010000       'Adressbyte zum schreiben definieren
Ds1307r = &B11010001       'Adressbyte zum lesen definieren

_day = 25 'Die Tagesvariable wird mit Zahlenwerten festgelegt
_month = 10       'Die Monatsvariable wird mit Zahlenwerten festgelegt
_year = 10       'Die Jahresvariable wird mit Zahlenwerten festgelegt
_sec = 00 'Die Sekundenvariable wird mit Zahlenwerten festgelegt
_min = 03 'Die Minutenvariable wird mit Zahlenwerten festgelegt
_hour = 11       'Die Stundenvariable wird mit Zahlenwerten festgelegt


_sec = Makebcd(_sec)       'Dezimalzahl in BCD Format konvertieren
_min = Makebcd(_min)
_hour = Makebcd(_hour)

I2cstart
I2cwbyte Ds1307w
I2cwbyte 0       'Uhr auf Null stellen!
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop


_day = Makebcd(_day)
_month = Makebcd(_month)
_year = Makebcd(_year)

I2cstart
I2cwbyte Ds1307w
I2cwbyte 3
I2cwbyte _weekday
I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop

Do

Rem Datum und Zeit holen
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstop

I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte _weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop

_day = Makedec(_day)
_month = Makedec(_month)
_year = Makedec(_year)

_sec = Makedec(_sec)
_min = Makedec(_min)
_hour = Makedec(_hour)

Print _day ; "/" ; _month ; "/" ; _year

Print _hour ; "/" ; _min ; "/" ; _sec

Print "-----------------------------------------"

Waitms 1000
Loop

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 1307 fängt nicht immer bei internem Pointer=0 an zu schreiben. Das 
erste geschriebene Byte ist die Position des Pointers. Also zuerst eine 
0 schreiben, dann die Sekunden, dann die Minuten usw.

So kann man z.B. nur den DayOfWeek mit Hilfe der richtigen 
Pointer-Adresse ändern ohne Uhrzeit, Datum, Monat und Jahr zu verändern.

Müsste also soweit bei dir gehen...

Was machst du mit dem 12h/24h-Bit in den Stunden?

andi schrieb:
> I2cstart
> I2cwbyte Ds1307w
> I2cwbyte 0
> I2cstop <==diesen stop mal raus werfen, damits ein repeated Start ist
>
> I2cstart
> I2cwbyte Ds1307r

mfg mf

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.