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.

[ATmega32] - [Basom] odczytywanie po I2C czasu z PCF8583

BartekWB 14 Lis 2012 22:08 1770 20
  • #1 14 Lis 2012 22:08
    BartekWB
    Poziom 27  

    Witajcie, chciałbym odczytać po I2C czas z PCF8583, jednak dzieje się coś dziwnego. Po wpaleniu tego programu:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Dostaje na ekranie takie wyniki:

    23:55:55
    23:54:1
    23:54:4
    23:54:5
    23:54:15
    23:54:10
    itp.

    Po minucie porównując z zegarkiem analogowym minuty wzrastają o jeden.

    Co robię źle, czyżby układ był uszkodzony?

    0 20
  • Pomocny post
    #2 14 Lis 2012 23:52
    30402
    Użytkownik usunął konto  
  • #3 15 Lis 2012 09:56
    Procesor32
    Poziom 12  

    Zasadniczy błąd, jeśli chodzi o przerwania.
    RTC PCF8583 posiada sprzętowe wyjście przerwania.
    Co sekundę podaje na nie sygnał.
    Zatem podłączamy je do jednego z pinów obsługujących przerwanie sprzętowe w procku i to on się martwi co ma zrobić i kiedy.
    Nie ma potrzeby wykorzystywania Timera procka.

    PORADA
    Nigdy nie wykorzystujemy dowolnych pinów procka jako zewnętrzny sygnał przerwania.
    Większość procków ma dedykowane piny jako sprzętowe wejścia przerwań.

    0
  • #4 15 Lis 2012 12:28
    BartekWB
    Poziom 27  

    Dobrze więc, zrobiłem jak radzicie
    Przerwania po int0, dla pewności jeszcze po wejściu do przerwania odłączam je. Nadal jest to samo, czas wariuje jak poprzednio.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #5 15 Lis 2012 13:20
    Procesor32
    Poziom 12  

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Pomoc
    Link

    0
  • #6 15 Lis 2012 17:46
    BartekWB
    Poziom 27  

    Zmiana na portc.0 i portc.1 nic nie pomogła, nadal jest to samo.

    PS. Czy jest jakaś lepsza alternatywa dla tego układu w tej samej klasie cenowej?

    0
  • #7 15 Lis 2012 18:23
    Procesor32
    Poziom 12  

    Procesor32 napisał:
    Zmiana na portc.0 i portc.1 nic nie pomogła, nadal jest to samo.

    Przecież Mega32 właśnie na tych pinach ma SCL i SDA, a nie na porcie B
    A taki procek jest w kodzie.
    A czy nie powinno być raczej ?
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Jest alternatywa i nazywa się PCF8563.
    Na znanym serwisie aukcyjnym do kupienia już od 1,99 zł.
    Jest lepszy od PCF8583, ma obsługę roku

    0
  • #8 15 Lis 2012 18:31
    BartekWB
    Poziom 27  

    Procesor32 napisał:

    Przecież Mega32 właśnie na tych pinach ma SCL i SDA, a nie na porcie B
    A taki procek jest w kodzie.
    A czy nie powinno być raczej ?


    Napisałem ,że zmieniłem na takie piny jak są w datascheecie i nic nie pomogło. Przy low level układ w ogóle nie działa.

    0
  • #9 15 Lis 2012 18:54
    Procesor32
    Poziom 12  

    Ten PCF nie może poprawnie działać.
    Jest
    &B10100000 = 160 - adres PCF8583 dla zapisu
    &B10100001 = 161 - adres PCF8583 dla odczytu danych

    Powinno być odpowiednio
    &B10100010 lub 162 -adres PCF8583 dla zapisu
    &B10100011 lub 163 - adres PCF8583 dla odczytu danych

    0
  • #10 15 Lis 2012 18:57
    BartekWB
    Poziom 27  

    To zależy jak podepnie się A0, w moim wypadku było do masy, więc adres był poprawny.
    Po przyjęciu Twojej wersji, A0 do Vcc, adresy tak jak podałeś dalej jest dokładnie to samo.

    0
  • #11 15 Lis 2012 19:38
    Procesor32
    Poziom 12  

    W drugim listingu jest

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Powinno być
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Dodano po 6 [minuty]:

    BartekWB napisał:
    Po przyjęciu Twojej wersji, A0 do Vcc, adresy tak jak podałeś dalej jest dokładnie to samo.

    Nie chodzi o moją wersję.
    Pracujesz na sprzętowym I2C, więc nie możesz wybierać pinów do podłączenia PCF.

    0
  • #12 15 Lis 2012 19:38
    BartekWB
    Poziom 27  

    Z uwzględnieniem Twoich wszystkich rad kod wygląda następująco:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Efekt jest taki: wszystko się zatrzymało na ekraniku widzę:

    0:2:0
    Dzien:3 mies: 0

    0
  • #13 15 Lis 2012 19:49
    Procesor32
    Poziom 12  

    W drugim listingu brakuje

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #14 15 Lis 2012 19:51
    BartekWB
    Poziom 27  

    Po dodaniu i2cinit pokazuje się bez zmian:

    0:0:0
    Dzien:0 mies:0

    0
  • #15 15 Lis 2012 20:38
    Procesor32
    Poziom 12  

    Oj Panocku.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Disable Interrupts błąd
    Skąd procek ma wiedzieć czy nastąpiło przerwanie ?

    0
  • #16 15 Lis 2012 20:48
    BartekWB
    Poziom 27  

    Niestety, zegar stoi na zerach po połączeniu Twojego kodu z moim.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #18 15 Lis 2012 21:01
    BartekWB
    Poziom 27  

    Wszystko jest połączone zgodnie z datascheetem.

    0
  • Pomocny post
    #19 15 Lis 2012 21:21
    Procesor32
    Poziom 12  

    Ja już nie wiem, co jest nie tak.
    Sprawdź kod z tej strony Link
    I jeszcze tutaj Link
    Kurcze a PCF ma włączone zasilanie ?

    0
  • #20 15 Lis 2012 21:26
    BartekWB
    Poziom 27  

    Sprawdzałem wczoraj już oba ;). Powoli podejrzewam uszkodzenie kostki, jak się jutro wyrobie to kupię nową i zdam relacje, jak na razie dzięki wielkie za pomoc i zaangażowanie.
    PCF na pewno tyka, jak podłącze sygnał przerwania do buzzera to słuchać cyknięcie co 0,5s.

    0
  • #21 15 Lis 2012 22:55
    30402
    Użytkownik usunął konto