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.

[Bascom] ATMEGA8 - PCF8583 nie wyświetla czasu

wojac33 30 Lip 2012 01:17 1673 5
  • #1 30 Lip 2012 01:17
    wojac33
    Poziom 12  

    Witam, chciałem zrobić sobie zegarek na układzie RTC PCF8583 i uC Atmega8, po 1,5 tyg przeszukiwanie elektrody i testów różnych programów postanowiłem się poradzić. Na LCD pokazują się liczby trzycyfrowe. Ostatni program który testowałem:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Wyswietlacz pokazuje "FF:FF:FF FF-FF"
    Czy przyczyną może być niesprawny układ RTC ? Nie chcę go kupować na marne, jeśli błąd jest gdzieś w programie, bo jednak PCF troche kosztuje :)
    uC jest taktowany zewnętrznym rezonatorem kwarcowym 12MHz do lini SCL i SDA są podciągnięte oporniki 4,7k od vcc.
    Z góry dziękuje za pomoc.
    Pozdrawiam.

    0 5
  • #2 30 Lip 2012 01:30
    bobeer
    Poziom 28  

    Ten zegarek ma wyprowadzenie adresowe musi mieć na nim masę dla adresu &HA0 VCC dla &HA2. A w programie to nie jestem pewien czy z tymi adresami coś nie jest też pomieszane.
    Najprościej podłącz zamiast zegarka eeprom o takim samym adresie i się dowiesz czy masz zegarek sprawny. Na początek możesz zmasować wyprowadzenie SDA i zobacz czy program wyświetli zera jeśli z i2c jest ok.

    0
  • #3 30 Lip 2012 02:02
    wojac33
    Poziom 12  

    Po zmasowaniu SDA na LCD pokazują się zera :)
    eepromu żadnego niestety nie mam na stanie

    0
  • #4 30 Lip 2012 02:18
    bobeer
    Poziom 28  

    Dla odbioru danych z tego pcfa potrzebny jest nieco inny algorytm niż przy zapisie.
    Nigdy nie używałem i2creceive, zamiast tego:
    (fragment jakiegos programu w bascomie)
    "
    I2cstart 'generate start
    I2cwbyte 160 'write addres of PCF8583
    I2cwbyte 2 'select register
    I2cstart 'generate repeated start
    I2cwbyte 161 'write address for reading info
    I2crbyte Timedata(1) , Ack 'sekundy
    I2crbyte Timedata(2) , Ack 'minuty
    I2crbyte Timedata(3) , Ack 'godzina
    I2crbyte Timedata(4) , Ack 'nieuzyte
    I2crbyte Timedata(4) , Nack 'uzytydzientygodnia - I2cstop
    "
    Jak widać po drugim starcie wysyłasz adres i2c dla odbioru o jeden większy i po tym odbierasz dane.
    Prawdopodobnie i2creceive pomija fragment wskazujący nr rejestru od którego będzie czytany pcf 8583, Albo adres który tam podajesz trzeba zmienić.
    " I2cstart 'generate start
    I2cwbyte 160 'write addres of PCF8583
    I2cwbyte 2 'select register
    "

    0
  • #5 30 Lip 2012 12:01
    wojac33
    Poziom 12  

    ok udało mi się odpalić zegar :)
    mam jeszcze pytanie, śpieszy się o jakąś 1s na 10min, czy wystarczy pokombinować z kondensatorem, który jest przy kwarcu ??

    0