Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

PCF8593T - wyświetla tylko 165165, a nie czas

tksk2 13 Sie 2009 20:20 1215 9
  • #1 13 Sie 2009 20:20
    tksk2
    Poziom 10  

    Witam mam problem z tym zegarem mianowicie taki że na wyświetlaczu
    mam tylko 165165 a nie czas, po zastąpieniu zegarem PCF8583 nie ma żadnego problemu wszystko działa normalnie. Po dołożeniu diody led do PCF8593T generuje impulsy prawidłowo, może problem tkwi w programie. gdyby ktoś mógł zerknąć i sprawdzić .


    'Pokazuje czas
    Do
    I2cstart
    I2cwbyte &HA0
    I2cwbyte 2
    I2cstart
    I2cwbyte &HA1 ' włącza maskowanie roku i dnia tygodnia

    I2crbyte S , Ack 'Odczytuje sekundy
    I2crbyte M , Ack 'Odczytuje minuty
    I2crbyte H , Ack 'Odczytuje godziny
    I2crbyte Day , Ack 'Odczytuje dni
    I2crbyte Month , Nack 'Odczutuje miesiąc
    I2cstop 'koniec transmisji I2C
    'koniec transmisji I2C

    S = Makedec(s)
    M = Makedec(m)
    H = Makedec(h)
    Day = Makedec(day)
    Month = Makedec(month)

    Locate 1 , 1
    Lcd H ; ":" ; M ; ":" ; S
    loop




    Sub Wyslij 'Podprogram do wysyłania danych do pcf-a

    S = Makebcd(s)
    M = Makebcd(m)
    H = Makebcd(h) 'Zamiana wartości dziesiętnych na kod BCD
    Day = Makebcd(day)
    Month = Makebcd(month)

    I2cstart 'Uruchomienie I2C
    I2cwbyte &HA0 'Wybór urządzenia do zapisu
    I2cwbyte 0
    I2cwbyte 8
    I2cstop
    I2cstart
    I2cwbyte &HA0
    I2cwbyte 2
    'Wybór 2 rejestru do zapisu (sekundy)
    I2cwbyte S 'Zapisuje sekundy
    I2cwbyte M 'Zapisuje minuty
    I2cwbyte H 'Zapisuje godziny
    I2cwbyte Day 'Zapisuje dni
    I2cwbyte Month 'Zapisuje miesiąc
    I2cstop


    'Koniec zapisu

    End Sub

    0 9
  • #2 13 Sie 2009 20:32
    Mat_91
    Poziom 25  

    Pierwsze co rzuciło mi się w oczy po spojrzeniu do datasheet do adresy do zapisu/odczytu. W kodzie masz odczyt-A1, i zapis- A0. PCF8593T korzysta z adresów: odczyt-A3, zapis A2.

    0
  • #3 13 Sie 2009 20:54
    tksk2
    Poziom 10  

    Dzięki.
    Pozmieniałem ale nadal nie mam odczytu tylko 165165.
    Mógłbyś na to zerknąć?


    Code:
    $regfile = "m168def.dat"                                   
    
    $crystal = 4000000                                         

    'Deklaracja portów od wyświetlacza LCD
    Config Lcd = 20 * 4                                         'konfiguracja typu wyťwietlacza
          'LCD
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2       'konfiguracja linii
          'mikrokontrolera, do ktˇrych
          'do-¦czono wyťwietlacz


    Cursor Off

    Dim Adres As Byte                                           'zmienna adres

    Config Scl = Portc.5
    Config Sda = Portc.4
    Config I2cdelay = 100
     Dim S As Byte                                              'deklaracja sekund
    Dim M As Byte                                               'deklaracja minut
    Dim H As Byte                                               'deklaracja godzin
    Dim Day As Byte                                             'deklaracja dni
    Dim Month As Byte                                           'deklaracja miesiecy
    Dim Rok As Byte                                             'deklaracja roku

    Dim Poprzedni_miesiac As Byte

    Cls     'Pokazuje czas
    Do
    I2cstart
    I2cwbyte &HA3
    I2cwbyte 2
    I2cstart
    I2cwbyte &HA2                                               

    I2crbyte S , Ack 'Odczytuje sekundy
    I2crbyte M , Ack 'Odczytuje minuty
    I2crbyte H , Ack 'Odczytuje godziny
    I2crbyte Day , Ack 'Odczytuje dni
    I2crbyte Month , Nack 'Odczutuje miesiąc
    I2cstop 'koniec transmisji I2C
    'koniec transmisji I2C

    S = Makedec(s)
    M = Makedec(m)
    H = Makedec(h)
    Day = Makedec(day)
    Month = Makedec(month)

    Locate 1 , 1
    Lcd H ; ":" ; M ; ":" ; S
    loop

    0
  • #4 14 Sie 2009 10:04
    Wojtek75
    Poziom 23  

    Zanim zaczniesz coś odczytywać z tego układu to najpierw proponuje spróbować ustawić rejestr Control/Status datasheet http://www.datasheetcatalog.org/datasheet/philips/PCF8593P.pdf str.6
    Ten fragment kodu:

    Code:
    I2cstart 
    
    I2cwbyte &HA3
    I2cwbyte 2
    I2cstart
    I2cwbyte &HA2

    zapisałbym raczej tak:
    Code:
    I2cstart 
    
    I2cwbyte &HA2
    I2cwbyte 2
    I2cstart
    I2cwbyte &HA3

    0
  • #5 14 Sie 2009 10:17
    Mat_91
    Poziom 25  

    tksk2 napisał:

    I2cwbyte &HA2

    I2crbyte S , Ack 'Odczytuje sekundy
    I2crbyte M , Ack 'Odczytuje minuty
    I2crbyte H , Ack 'Odczytuje godziny
    I2crbyte Day , Ack 'Odczytuje dni
    I2crbyte Month , Nack 'Odczutuje miesiąc
    I2cstop 'koniec transmisji I2C
    'koniec transmisji I2C


    Ehh przecież podałem Ci wyżej adresy do zapisu/odczytu:/ To jest w ogóle twój kod i wiesz jak on działa czy skopiowałeś go z jakiegoś przykładu? Podajesz adres do zapisu a chcesz odczytywać...:| Popraw kod tak jak kolega wyżej Ci napisał.

    0
  • #6 14 Sie 2009 10:43
    tksk2
    Poziom 10  

    Na elektrodzie jest prosty program do szukania adresu ale nic mi nie znajdujue być może jest uszkodzony pcf? , mam 2 tego typu zegary i oba zachowują sie identycznie. Faktycznie częsc kodu skopiowałem z przykładu ale zmiany i tak nie dały żadnego rezultatu.

    0
  • #7 14 Sie 2009 11:34
    Mat_91
    Poziom 25  

    No to wychodzi na błąd w sprzęcie. Sprawdź wszystkie połączenia (szczególnie linie SDA i SCL), sprawdź czy nie ma zimnych lutów itp.

    A i czy przy zegarze PCF8583 ten program do szukania adresu działa poprawnie?

    0
  • #8 14 Sie 2009 12:52
    tksk2
    Poziom 10  

    Na PCF8583 działa normalnie i znajduje adresy a kod jest taki.

    $regfile = "m168def.dat"
    $crystal = 8000000

    'Deklaracja portów od wyświetlacza LCD
    Config Lcd = 20 * 4 'konfiguracja typu wyťwietlacza
    'LCD
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2 'konfiguracja linii
    'mikrokontrolera, do ktˇrych
    'do-¦czono wyťwietlacz


    Cursor Off

    Dim Adres As Byte 'zmienna adres

    Config Scl = Portc.5
    Config Sda = Portc.4
    Cursor Off

    Cls
    For Adres = 0 To 200
    I2cstart 'start magistrali
    I2cwbyte Adres 'wysyła 1 bajt, (zapytanie o odpowiedź)
    I2cstop 'koniec transmisji

    If Err = 0 Then 'jeśli odpowiedziało to
    Cls
    Lcd "Uklad pod:" ; Adres ; " "
    Wait 2
    End If

    Next Adres

    Cls
    Lcd "Koniec szukania"
    End

    0
  • #9 14 Sie 2009 13:15
    Mat_91
    Poziom 25  

    Tak przeglądając sobie datasheet do obydwu układów zauważyłem ze pcf8583 nie ma wejścia reset tylko adres. Natomiast PCF8593 posiada wejście reset i wymaga podciągania tej lini do Vcc. Masz podciągniętą tą linie? Może układ w ogóle nie startuje?

    0
  • #10 14 Sie 2009 13:56
    tksk2
    Poziom 10  

    Faktycznie miałeś rację nie miałem podciągniętego do VCC teraz po podłączeniu pokazała się godzina 0:0:0 lecz zegar nie zmienia minut ani sekund. Adres też nie odpowiada.

    0
  Szukaj w 5mln produktów