DS1307


$regfile = "m8def.dat"
$crystal = 16000000
$lib "mcsbyte.lbx"
$lib "ds1307clock.lib"
 
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
 
Cls
Cursor Off
 
Config Sda = Portb.1
Config Scl = Portb.2
 
Const Ds1307w = &HD0
Const Ds1307r = &HD1
 
Config Pind.1 = Input
Config Pind.2 = Input
Config Pind.3 = Input
 
Dim Sekundy As Byte
Dim Minuty As Byte
Dim Godziny As Byte
 
Dim A As Byte
 
Config Debounce = 30
 
'---------------------------------------------------
Locate 1 , 5
Lcd "Zegar z"
Locate 2 , 3
Lcd "termometrem"
 
Waitms 2000
 
For A = 1 To 20
Shiftlcd Left
Waitms 400
Next
Cls
 
'---------------------------------------------------
Main:
Do
   Gosub Ds1307
   Gosub Ustawienia
   Gosub Wyswietl
Loop
 
'---------------------------------------------------
Ds1307:
   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 0
   I2cstart
   I2cwbyte Ds1307r
   I2crbyte Sekundy , Ack
   I2crbyte Minuty , Ack
   I2crbyte Godziny , Nack
   I2cstop
 
   Sekundy = Makedec(sekundy)
   Minuty = Makedec(minuty)
   Godziny = Makedec(godziny)
 
   If Sekundy > 59 Then Sekundy = 0
   If Minuty > 59 Then Minuty = 0
   If Godziny > 23 Then Godziny = 0
   Gosub Sekundy
Return
 
'----------------------------------------------------
Ustawienia:
   Debounce Pind.1 , 0 , Sekundy , Sub
   Debounce Pind.2 , 0 , Minuty , Sub
   Debounce Pind.3 , 0 , Godziny , Sub
Return
 
'----------------------------------------------------
Sekundy:
   Incr Sekundy
   If Sekundy > 59 Then Sekundy = 0
   Sekundy = Makebcd(sekundy)
   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 0
   I2cwbyte Sekundy
   I2cstop
Return
 
'----------------------------------------------------
Minuty:
   Incr Minuty
   If Minuty > 59 Then Minuty = 0
   Minuty = Makebcd(minuty)
   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 1
   I2cwbyte Minuty
   I2cstop
Return
 
'-----------------------------------------------------
Godziny:
   Incr Godziny
   If Godziny > 23 Then Godziny = 0
   Godziny = Makebcd(godziny)
   I2cstart
   I2cwbyte Ds1307w
   I2cwbyte 1
   I2cwbyte Godziny
   I2cstop
Return
 
'----------------------------------------------------
Wyswietl:
   Locate 1 , 2
   Lcd "Czas: " ;
 
   If Godziny < 10 Then
   Lcd "0" ; Godziny ; ":";
   Else
   Lcd Godziny ; ":";
   End If
 
   If Minuty < 10 Then
   Lcd "0" ; Minuty ; ":";
   Else
   Lcd Minuty ; ":";
   End If
 
   If Sekundy < 10 Then
   Lcd "0" ; Sekundy
   Else
   Lcd Sekundy
   End If
Return

Witam. Znalazłem na necie kod do obsługi DS1307, trochę go zmodyfikowałem, ale niestety ani ten pierwotny(http://www.avrprojects.info/avr-projects/ds1307-based-clock/) ani ten mój nie chcą działać. W tym moim na LCD pokaże się tylko Czas: 00:00:01 i nic dalej nie rusza. Nie wiem czy to jest jakiś błąd w programie czy coś źle połączyłem. Korzystałem ze schematu dostępnego pod tym samym linkiem co pierwotny kod. Tylko dodatkowo mam do atmegi podłączony kwarc 16Mhz nie wiem czy to coś przeszkadza czy nie. Przy ds mam kwarc 32768. Ktoś wie dlaczego ten zegar nie chce ruszyć?




Portret użytkownika mirley

Re: DS1307

A rezystory podciągające na magistrali masz podłaczone?

poza tym za szybko to czytasz.... wstaw w pętlę główną waitms 500 albo coś podobnego

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Vincer0

Wszystko mam podłączone

Wszystko mam podłączone zgodnie ze schematem dostępnym tutaj: http://www.avrprojects.info/avr-projects/ds1307-based-clock/
Wstawiłem te opóźnienie ale nic nie pomaga. Wydaje mi się, że albo jest jeszcze jakiś błąd w programie, albo jest coś nie tak z DS1307. Czytałem coś na innym forum, że aby ruszył trzeba do niego podłączyć baterię, bo na samym "głównym" zasilaniu nie chce działać. Jutro jak dam radę to wybiorę się do elektronicznego, kupię tą baterię, podłączę i zobaczę co się będzie działo. A może masz jakiś kod do obsługi DS1307 ale taki działający na 100%, bo jak dotąd wszystkie jakie brałem z neta nie działały, z resztą inni też pisali że mieli z nimi jakieś problemy.

Z góry dzięki za pomoc

Portret użytkownika mirley

Re: DS1307

Na razie podłącz tą baterię... potem zobaczy się co z tym zrobić. Niestety nie mam kodu do ds1307 bo używam przeważnie PCF'a

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.