PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Attiny2313 <--> Ds1307 Kommunikation schlägt fehl



D35troy3r
07.10.2012, 12:02
Hallo,

ich habe eine kleine Binäruhr mit einem Attiny2313 und einer RTC (Ds1307) aufgebaut.
Programmiert wird das ganze derzeitig mit Bascom. Nun hab ich gelesen das für eine I2C Verbindung am Attiny eine extra Bibliothek eingebunden werden muss da das ganze über USI läuft.
Wenn ich mir die Uhrzeit anzeigen lassen will kommt nur quatsch raus, falsche zahlen und die Uhr läuft nicht weiter.
SQW Ausgang habe ich auch schon probiert zu setzen, allerdings schaltet der Pin trotzdem nicht im 1Hz Takt.
Uhrenquarz wurde ausgetauscht falls dieser defekt gewesen sein sollte. Fehlt noch was Softwareseitig?

$regfile = "attiny2313.dat"
$crystal = 1000000
$hwstack = 20
$swstack = 30
$framesize = 20
$noramclear

$lib "i2c_usi.lbx"

Config Sda = Portb.5 ' I2C Bus konfigurieren
Config Scl = Portb.7
Const Ds1307w = &HD0 ' Addresse der Ds1307 Uhr
Const Ds1307r = &HD1

Config Clock = User

I2cinit

Time$ = "00:17:00"

Do
'Hauptprogramm
Loop
End

Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
Return

Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return

Gruß
D35troy3r

D35troy3r
13.10.2012, 09:26
Weiß denn wirklich niemand eine Lösung des Problems? :(

Kampi
13.10.2012, 10:42
Mit dem Tiny habe ich etwas leider noch nie gemacht. Aber ich kann dir nachher einen Code für einen Mega32 und eine DS1307 geben.
Dann weißt du zumindest ob der Code für den I²C richtig ist. Dann kann der Fehler nur noch bei der Libary liegen.

D35troy3r
13.10.2012, 19:00
Hey,
einen code für einen Atmega32 und dem DS1307 hatte ich auch schon einmal programmiert, er funktionierte auch und sieht im großen und ganzen genau so aus wie mein geposteter, bloß ohne Libary.
Ist deiner eventuell etwas anders?
Mh wie bring ich es aber dann zum laufen ohne Libary? :(

oderlachs
13.10.2012, 20:26
schau mal HIER (http://www.mikrocontroller.net/topic/210558) nach, vielleicht findest Du da was... ich programmiere schon lange nicht mehr in Bascom..weiss auch nicht weiter.

Gruss
OL

Kampi
13.10.2012, 20:35
Hey,
einen code für einen Atmega32 und dem DS1307 hatte ich auch schon einmal programmiert, er funktionierte auch und sieht im großen und ganzen genau so aus wie mein geposteter, bloß ohne Libary.
Ist deiner eventuell etwas anders?
Mh wie bring ich es aber dann zum laufen ohne Libary? :(

Ne meiner sieht genau so aus.
Sicher das du bei der Libary nichts vergessen hast?

Btw....was mir gerade einfällt.....lösch mal das "Config Clock = User".
Das hatte ich auch mal in meinem Nixieuhrprogramm und sie hat nur Bullshit gemacht.
Und dann musst du halt noch die Sprungmarken ins Programm setzen, sonst läuft eine leere Endlosschleife durch ;)
Ach und die Variablen (das macht ja atm Config Clock) definieren.
Laut Bascomhilfe für Config Clock:

Configures the timer to be used for the TIME$ and DATE$ variables.

Ich denke mal das funkt dir dazwischen.