Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Zegar DS1629

Swat 07 Dec 2005 00:34 2532 21
  • #1
    Swat
    Level 14  
    Witam.
    Czy robił ktoś kiedys zegar z wykorzystaniem układu Dallasa DS1629?
    Potrzebuje pomocy w napisaniu programu w Bascom AVR, który umożliwił by odczyt i ustawienie czasu, daty i alarmu z tego układu.
    Konkretnie chce zbudować Zegar z datą, budzikiem i dwupunktowym termometrem, z programem do termometru nie będzie problemu, tylko chodzi mi o ten DS1629, nie wiem jak sie za to zabrać bo nigdy wcześniej nie robiłem zegarów. Zapewne niektórzy doradzą mi zegar PCF8583, ale ze względu na to że mam kilka kostek DS1629 chciałbym je wykorzystać.
    W zależności od wielkości programu chcę użyć procesora AT90S2313 lub AT90S8515 i wykorzystać wyświetlacz LCD 4x20.
    Bardzo prosze o pomoc.
    Pozdrawiam.
  • #2
    Jarema
    User under supervision
    Witam,
    Ja swego czasu używałem tych układów z tym, że pisałem obsługę w asm dla PIc'ów.
    Nie wiem w czym masz problem - nie dość, że bascom (czyli gotowiec) to na dodatek masz dostępną dokumentację na stronie www.maxim-ic.com.
    Nic tylko siąść i pisać :D.
  • #3
    bartek_zet
    Level 17  
    Jarema wrote:
    ...na dodatek masz dostępną dokumentację na stronie www.maxim-ic.com.
    Nic tylko siąść i pisać :D.


    Dokładnie. Dokumentacja rozwieje wszystkie wątpliwości. Ja napisałem program do zegarka z termometrem (jedno i drugie dallasa) tylko na podstawie pdf'ów (nie licząc obsługi LCD czy 1-wire). Nie jestem pewien teraz czy to był ten sam numer kostki ale obsługa zegarka była banalnie prosta - po prostu wpisujesz mu do pamięci ustawienia daty i godziny, odpalasz generator i czytasz cyklicznie te komórki pamięci gdzie są zapisane wartości sekund, minut itd.
  • #4
    Swat
    Level 14  
    a jak zrobić ustawianie zegara i daty za pomocą przycisków?
  • #5
    elektryk
    Level 42  
    Swat wrote:
    a jak zrobić ustawianie zegara i daty za pomocą przycisków?
    Czekasz na naciśniecie przycisku i wysyłasz rozkaz wpisania nowej daty/godziny.
  • #6
    Swat
    Level 14  
    Ok spróbuje napisać program i wkleje go do następnego postu, tylko musze poczekac pare dni zą gość z allegro przyśle mi wyświetlacz, bo nie bede miał na czym sprawdzić czy programik działa.
  • #7
    Swat
    Level 14  
    Witam.

    Zmontowałem juz cały układ ale nie mam pojecia jak napisac program do odczytu i ustawienia czasu i daty :(
    W sobote święta a ten zegar chciałem dac bratu na prezent, ale sam nie napisze tego programu.

    Prosze pomóżcie.
  • #8
    Swat
    Level 14  
    witam
    siedze nad tym programem od kilku dni i nie moge uruchomić tego zegara. Jedynie co udało mi sie wymyslec to taki oto programik w którym chciałem odczytać godzine i date ale wyswietlaja mi sie same "?????":

    $crystal = 4000000
    Config Lcd = 20 * 4
    Config Sda = Portb.0
    Config Scl = Portb.1

    Dim S As Byte
    Dim M As Byte
    Dim H As Byte
    Dim D As Byte
    Dim Mi As Byte
    Dim Dd As Byte
    Dim Y As Byte

    I2cstart
    I2cwbyte &HC0
    I2cwbyte &H9E
    I2cwbyte &H12
    I2cwbyte &H00
    I2cstart
    I2crbyte S , Ack
    I2crbyte M , Ack
    I2crbyte H , Ack
    I2crbyte D , Ack
    I2crbyte Dd , Ack
    I2crbyte Y , Ack
    I2crbyte Mi , Nack
    I2cstop

    Locate 1 , 1
    Lcd " " ; Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)
    Locate 2 , 1
    Lcd "data: " ; Bcd(dd) ; "." ; Bcd(mi) ; "." ; Bcd(y)


    Loop

    Gdzie jest błąd?
  • #9
    jony15
    Level 23  
    na dzien dobry nie prawidłowo odczytujesz z i2c ( tak mnie sie wydaje ) robisz tak 12c start, cos zapisujesz, znowu start, i zaraz za tym odczytujesz wg mnie po drugim starcie powinienes wysłać adres ukladu do odczytu np na eepromie to wyglada tak ( adres 160<<W>>, 161<<R>> )

    i2c start
    i2cwbyte 160 ;adres do zapisu
    i2cwbyte 0 ;zaczynamy od zerowej komorki
    i2c start ; znow start
    i2cwbyte 161
    i2cread zmienna
    ...
    ...
    ...
    i2cstop
    to tyle na poczatek jek nie wystartuje to bedziemy dalej myslec. pozdrawiam
    p.s. wesołych swiat, wszystkiego co najlepsze, zdrowia, dużo up, rezonatorow, wyswietlaczy :-)
  • #10
    Swat
    Level 14  
    witam
    niestety dalej wyświetlają mi sie same znaki zapytania :-(

    p.s równiez zycze wesołych pogodnych świąt
  • #11
    Jacu$
    Level 27  
    :arrow: Swat
    Na wstępie chciałem uprzedzić, że nie mam zielonego pojęcia o programowaniu w Bascomie ale spróbuję Ci pomóc.
    1. Ściągnij sobie datasheet DS1629 z tego miejsca: http://pdfserv.maxim-ic.com/en/ds/DS1629.pdf
    2. Dokładnie przeczytaj całość.
    3. Popatrz na stronę 18. Jest tam przykład jak kolejno wysyłać komendy do DS1629 jeśli chcemy ustawić zegar.

    W Twoim programie jest błąd w komunikacji z układem. Na szynę i2c należy najpierw wysłać tzw. control byte czyli w Twoim przypadku wartość 9E (dla zapisu). Jeśli chcesz odczytać coś z układu to pierwszym wysłanym bajtem musi być 9F. Jeśli tego nie rozumiesz to dalej sobie nie poradzisz. To są absolutne podstawy działania magistrali i2c. To wszystko jest szczegółowo opisane w datasheet DS1629. Nawet jeśli nie rozumiesz po angielsku to nie załamuj się - tam jest to wszystko narysowane jako przebiegi zero-jedynkowe.
    Po wysłaniu control byte (adres układu plus bit zapis/odczyt) dalej wysyłasz komendę (np. C0 - żądanie dostępu do rejestru zegara/kalendarza). I tak dalej zgodnie z datasheet układu.

    Nie jest moim zadaniem pisanie tutoriala do obsługi w/w układu więc pozwolę sobie na tym zakończyć. Jeśli posłuchasz mojej rady to pewnie Ci się uda.

    Życzę wesołych Świąt Bożego Narodzenia i powodzenia w zabawach z elektroniką.
  • #12
    Swat
    Level 14  
    Witam.
    Na stronie 18 datasheet'u jest przyklad odczytu i zapisu danych. W tym przykładzie jest ustawiony zegar na 11:30, napisałem programik krok po kroku jak w przykładzie:

    $crystal = 4000000
    Config Lcd = 20 * 4
    Config Sda = Portb.0
    Config Scl = Portb.1

    Dim S As Byte
    Dim M As Byte
    Dim H As Byte
    Dim D As Byte
    Dim Mi As Byte
    Dim Dd As Byte
    Dim Y As Byte
    Dim Mbs As Byte
    Dim Lsb As Byte


    Do
    I2cstart
    I2cwbyte &H9E
    I2cwbyte &HAC
    I2cwbyte &H11
    I2cstart
    I2cwbyte &H9E
    I2cwbyte &HC0
    I2cwbyte &H00
    I2cwbyte &H00
    I2cwbyte &H30
    I2cwbyte &H51
    I2cwbyte &H05
    I2cwbyte &H01
    I2cwbyte &H01
    I2cwbyte &H98
    I2cstart
    I2cwbyte &H9E
    I2cwbyte &HA1
    I2cwbyte &H32
    I2cwbyte &H00
    I2cstop


    I2cstart
    I2cwbyte &H9E
    I2cwbyte &HAA
    I2cstart
    I2cwbyte &H9F
    I2crbyte Mbs , Ack
    I2crbyte Lsb , Nack



    I2cstart
    I2cwbyte &H9E
    I2cwbyte &HCO
    I2cwbyte &H01
    I2cstart
    I2cwbyte &H9F


    I2crbyte S , Ack
    I2crbyte M , Ack
    I2crbyte H , Ack
    I2crbyte D , Ack
    I2crbyte Dd , Ack
    I2crbyte Y , Ack
    I2crbyte Mi , Nack


    I2cstart
    I2cwbyte &H9E
    I2cwbyte &HAC
    I2cwbyte &H9F
    I2crbyte Mbs , Ack
    I2crbyte Lsb , Nack
    I2cstop


    Locate 1 , 1
    Lcd " " ; Bcd(h) ; ":" ; Bcd(m) ; ":" ; Bcd(s)
    Locate 2 , 1
    Lcd "data: " ; Bcd(dd) ; "." ; Bcd(mi) ; "." ; Bcd(y)

    Loop
    End

    ...i sie załamałem bo dalej nic mi nie wyświetla na wyswietlaczu oprócz znaków zapytania :/
    gdzie błąd ? :-(

    chciałbym przynajmniej żeby wyswietliła mi sie jakakolwiek godzina ....
  • #13
    Jarema
    User under supervision
    Witam,
    Zacznij od sprawdzenia funkcji konwersji BCD() poprzez przypisanie na sztywno zmiennych h,m,s tuż przez procedurą wyświetlania - w czasach gdy pisałem w bascomie również miałem problemy z tą procedurą (BCD()) - jeśli okaże się, że nadal żadnej poprawy nie będzie to znaczy że bascom wyleciał w powietrze ;(.
  • #14
    Jacu$
    Level 27  
    Swat,
    1 - pisz komentarze przy każdej linijce programu!
    2 -nadal nie rozumiesz jak działa magistrala i2c więc nic nie odczytujesz z układu

    Nie możesz po zaadresowaniu urządzenia oczekiwać, że zacznie Ci ono przesyłać dane, których oczekujesz. DS1629 jest zegarkiem/termometrem a nie jasnowidzem.
  • #15
    Swat
    Level 14  
    Czyli rozumie że nawet jak nie będe uzywał termometru w tym układzie tylko zegar i date to i tak musze po kolei skonfigurowac termometr zegar i date a potem wyświetlac na wyświetlaczu tylko to co chce?

    jarema napisał:
    Zacznij od sprawdzenia funkcji konwersji BCD()...

    Bcd działa sprawdzałem go w taki sposób:

    S = 59
    S = Makebcd(s)
    Home
    Lcd Bcd(s)
  • #16
    Jacu$
    Level 27  
    Swat, nadal nic nie rozumiesz :-(
    Oto krótki fragment Twojego programu:
    
    I2cstart
    I2cwbyte &H9F
    I2crbyte Mbs , Ack
    I2crbyte Lsb , Nack
    

    Wyobraź sobie, że Ty jesteś układem DS1629 i odpoczywasz po ciężkiej nocy.
    Nagle słyszysz, że dzwoni Twoja komórka :arrow: i2cstart, i2cwbyte &H9F
    Odbierasz połączenie i mówisz do telefonu "słucham" :arrow: ACK
    Czekasz ze słuchawką przy uchu a tam słychać rozmówcę mówiącego "no gadaj!" :arrow: i2crbyte Mbs, Ack
    Skąd masz wiedzieć, co mu gadać, skoro o nic Cię nie spytał?

    Rozumiesz już?
  • #17
    Swat
    Level 14  
    Już odpaliłem zegarek teraz musze jakos wymyslec jak ustawić daną godzine :)
  • #18
    Jarema
    User under supervision
    Jacu$ wrote:
    Swat, nadal nic nie rozumiesz :-(
    Oto krótki fragment Twojego programu:
    
    I2cstart
    I2cwbyte &H9F
    I2crbyte Mbs , Ack
    I2crbyte Lsb , Nack
    

    Wyobraź sobie, że Ty jesteś układem DS1629 i odpoczywasz po ciężkiej nocy.
    Nagle słyszysz, że dzwoni Twoja komórka :arrow: i2cstart, i2cwbyte &H9F
    Odbierasz połączenie i mówisz do telefonu "słucham" :arrow: ACK
    Czekasz ze słuchawką przy uchu a tam słychać rozmówcę mówiącego "no gadaj!" :arrow: i2crbyte Mbs, Ack
    Skąd masz wiedzieć, co mu gadać, skoro o nic Cię nie spytał?

    Rozumiesz już?


    Witam,
    Trochę (a może nawet bardzo) offtopic:
    Jacu$ jesteś może nauczycielem z zawodu ?
    Szkoda, że w szkole tak nie tłumaczą :D
  • #19
    Jacu$
    Level 27  
    Oj, Jarema, zdziwiłbyś się bardzo gdybyś wiedział kim jestem z zawodu :twisted:
  • #20
    Swat
    Level 14  
    Juz wszystko mi działa tak jak chciałem :)
  • #21
    Jarema
    User under supervision
    Toteż wypada temat zamknąć :D
  • #22
    Swat
    Level 14  
    Temat uważam za zamknięty :)
    Pozdrawiam