ds1307 - kłopot z komunikacją


nabazgrałem a raczej posklejałem jakiś tam programik do odczytu godziny z zegara DS1307, ale nie chce działać. jedyne co się wyświetla na wyświetlaczu to:

05:05:05

sam program wygląda tak:

macie jakieś sugestie?

$PROG &HFF , &HA4 , &HD9 , &H00
 
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 19200
'$lib "mcsbyte.lbx"
$lib "ds1307clock.lib"
$eepleave
$hwstack = 40
$swstack = 16
$framesize = 40
 
'=======================================================
'=== zdeifiniowanie znaku [] i [+] dla malego bajeru ===
'=======================================================
 
Deflcdchar 0 , 27 , 17 , 17 , 17 , 17 , 17 , 17 , 27       ' []
Deflcdchar 1 , 27 , 17 , 21 , 31 , 31 , 21 , 17 , 27       ' [+]
 
config LCD = 16 * 2
CONFIG LCDPIN = PIN , DB4 = pind.4 , DB5 = pind.5 , DB6 = pind.6 , DB7 = pind.7 , E = pind.3 , RS = pind.2
config pinb.6 = input
config sda = portc.3
config scl = portc.4
i2cinit
 
ft alias pinb.6
 
const ds1307w = 208
const ds1307r = 209
 
dim a as byte
dim wartosc as byte
dim sekundy as byte
dim minuty as byte
dim godziny as byte
 
sekundy = 0
minuty = 0
godziny = 0
 
 
sekundy = makebcd(sekundy)
minuty = makebcd(minuty)
godziny = makebcd(godziny)
cursor off
cls
'==========================================================================================
'=== tu maly bajer w postaci zapalania sie postepujacego paska pseudoladowania programu ===
'==========================================================================================
 
home
locate 1 , 5
lcd "loading"
locate 2 , 1
lcd chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ; chr(0) ;
locate 2 , 1
for a = 1 to 16
waitms 500
lcd chr(1)
next a
 
gosub zapis_do_zegara
 
do
home
 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)
 
 waitms 500
 
 cls
 wartosc = makebcd(godziny)
  lcd bcd(wartosc) ; ":"
 wartosc = makebcd(minuty)
  lcd bcd(wartosc) ; ":"
 wartosc = makebcd(sekundy)
  lcd bcd(wartosc)
 
'=======================================================================================
'=== tu specjalnie spowolnilem zeby sprawdzic jakie stany wystawiaja linie SDA i SCL ===
'=======================================================================================
 
  lowerline
lcd "PC.3=" ; pinc.3 ; " "
lcd "PC.4=" ; pinc.4 ; " "
locate 1 , 10
lcd "FT=" ; ft
wait 1
cls
 
loop
end
 
zapis_do_zegara:
 i2cstart
 i2cwbyte ds1307w
 i2cwbyte 0
 i2cwbyte sekundy
 i2cwbyte minuty
 i2cwbyte godziny
 i2cstop
return

mały EDIT:
okazuje się że jednak działa tylko nie wiem czemu na początku pokazywało to co pokazywało. przez kilka godzin zegar chodził na baterii bez zasilania głównego i teraz pokazuje godzinę jak trzeba.

wiecie coś na ten temat?




Portret użytkownika mirley

Re: Ds1307

A czy zasilanie główne spełnia wymagania układu Ds..... Może jest źle stabilizowane. Popatrz czy twoj schemat składa się z tych samych elementów co w karcie katalogowej

-

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 matrix

Re: Ds1307

myślę że firma PROPOX nie puściła bubla i wszystko zrobiła jak trzeba. kwarc dla układu ds jest od razu przy nim. może za duże napięcie zasilania baterii jest dla tegoż układu?

stabilizacja całości wydaję się być ok. można nawet regulować napięcie na wyjściu stabilizatorka.

jak w pełni naładuję bateryjkę umieszczoną na płytce to wtedy fiksuje, natomiast jak tylko trochę bateria się rozładuje to wszystko wydaje się być ok. czy może być to wina właśnie tej baterii? niestety nie mam w tej chwili miernika żadnego pod ręką i nie mogę stwierdzić jakie panuje napięcie na wejściu Vbat.

na przykład w tej chwili (22.07.2010 godz. 15:40) wszystko działa poprawnie.

Portret użytkownika mirley

Re: DS1307

Zasilanie powinno być tak jak dla mikrokontrolera 4.5-5.5V a na baterii może być max 3.5V, typowo 3V ze standardowej baterii litowej CR2032

-

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 matrix

Re: DS1307

tam siedzi jakiś mały pakiecik złożony z 3 sztuk NiMH. razem dają 3,5V. w każdym razie w tej chwili po odłączeniu baterii podtrzymującej działa jak złoto.
cos musi byc nie tak w obwodzie tej bateryjki. tu musi leżeć gdzieś problem.