logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

PCF8593T - wyświetla tylko 165165, a nie czas

tksk2 13 Sie 2009 20:20 1395 9
REKLAMA
  • #1 6890058
    tksk2
    Poziom 11  
    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
  • REKLAMA
  • #2 6890106
    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.
  • REKLAMA
  • #3 6890199
    tksk2
    Poziom 11  
    Dzięki.
    Pozmieniałem ale nadal nie mam odczytu tylko 165165.
    Mógłbyś na to zerknąć?


    $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
  • #4 6891969
    Wojtek75
    Poziom 24  
    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:
    I2cstart 
    I2cwbyte &HA3 
    I2cwbyte 2 
    I2cstart 
    I2cwbyte &HA2

    zapisałbym raczej tak:
    I2cstart 
    I2cwbyte &HA2 
    I2cwbyte 2 
    I2cstart 
    I2cwbyte &HA3
    
  • #5 6892010
    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ł.
  • #6 6892114
    tksk2
    Poziom 11  
    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.
  • REKLAMA
  • #7 6892279
    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?
  • #8 6892464
    tksk2
    Poziom 11  
    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
  • REKLAMA
  • #9 6892537
    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?
  • #10 6892644
    tksk2
    Poziom 11  
    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.
REKLAMA