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.

[Atmega8][Bascom] Nie działa zegarek RTC PCF8583

MICHAŁ6201 14 Sie 2013 20:08 5670 20
  • #1 14 Sie 2013 20:08
    MICHAŁ6201
    Poziom 16  

    Witam Wszystkich

    Jestem początkujący jeśli chodzi o pisanie programów pod avr.
    Uczę się Bascoma. Mam płytkę testową własnej produkcji. Postanowiłem zgłębić zasadę działania I2C, a dokładnie to spróbować zrobić zegarek na atmega 8 i PCF8583. Niestety nic nie wyświetla się na lcd. Ładowałem też gotowe wsady znalezione na necie i też nic. Komunikacja procka z lcd jest ok, ponieważ pisząc jakiś prosty programik, wyświetla się na lcd to co chcę. Na wyjściu PCF-a INT pojawiają się cały czas impulsy z częstotliwością co 1 sekundę, więc pcf jest ok.

    Moje pytanie - jak sprawdzić czy szyna I2C działa poprawnie?

    Dodam że jeśli chodzi o połączenie PCF z prockiem, to jest wszystko ok.

    Z góry dziękuję za pomoc.

    0 20
  • #2 14 Sie 2013 20:53
    laki_17
    Poziom 17  

    Szynę I2C najprościej sprawdzić analizatorem stanów logicznych. Może podeprzesz się jednym programem i podeślesz na forum go to na pewno ktoś znający BASCOM pomoże z tym problemem. Wiem, że ustawia się coś w programie BascomAVR aby wszystko dobrze pracowało. Ale nie pamiętam co dokładnie.

    0
  • #4 15 Sie 2013 12:18
    MICHAŁ6201
    Poziom 16  

    Kod do testu wziąłem z internetu. Nie chodziło o w pełni działający zegarek z możliwościami ustawiania godziny itd, tylko sam fakt czy działa.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Autor tego kodu twierdzi, że u niego działa. U mnie nic nie wyświetla się na lcd.

    A tutaj poglądowy schemat. Chodzi tylko o pokazanie szyny I2C by nie było wątpliwości, że zrobiłem błąd podczas projektowania.
    Taktowanie procka wewnętrzne 1MHz.
    [Atmega8][Bascom] Nie działa zegarek RTC PCF8583

    0
  • #5 15 Sie 2013 13:27
    rekinisko
    Poziom 22  

    Pierwsze co to poszukaj "skanera i2c", są tutaj na elektrodzie takie programy. Program wyświetli Ci wszystkie adresy pod którymi są układy na i2c. Będziesz wtedy wiedział czy komunikacja jest poprawna. Dałeś rezystory podciągające do plusa na liniach szyny i2c?

    0
  • #7 15 Sie 2013 16:24
    MICHAŁ6201
    Poziom 16  

    Obydwie linie I2C są podciągnięte opornikami 4k7 do plusa.
    Przy tym programie nic się nie wyświetla. Wyświetlacz jest czysty.
    A wiem że wyświetlacz poprawnie działa, bo napisałem malutki programik wyświetlający jakieś słowa na lcd i działa, więc z tym jest ok.

    A czy w tym programiku, który wkleiłem powyżej, to powinien wyświetlać się jakiś czas na lcd?

    0
  • #9 17 Sie 2013 11:25
    MICHAŁ6201
    Poziom 16  

    To jakie macie pomysły na sprawdzenie, co jest problemem? Nie mam oscyloskopu, wiec nie sprawdzę linii I2C.

    A może procek musi być taktowany zewnętrznym kwarcem, a ja mam tylko wewnętrzne taktowanie.

    A może adresy PCF-a są złe? Proszę o sprawdzenie.

    0
  • #11 17 Sie 2013 12:51
    MICHAŁ6201
    Poziom 16  

    Już chyba znalazłem problem.
    W kodzie nie skonfigurowałem portów lcd:
    Config Lcdpin = Pin , E = Portb.0 , Rs = Portb.1 , Db7 = Portb.2 , Db6 = Portb.3 , Db5 = Portb.4 , Db4 = Portb.5
    Config Lcd = 16 * 2

    Myślałem, że wystarczy jak ustawie to w opcjach kompilator -> LCD

    A0 nie robi różnicy czy to podpięty do masy, vcc, a czy w ogóle wisi nie podpięty nigdzie.

    0
  • #13 17 Sie 2013 13:17
    MICHAŁ6201
    Poziom 16  

    Masz rację.
    Wyskakiwały co jakiś czas na dziwne cyfry zamiast godziny i daty.
    Znalazłem w internecie, że adresy dla pcf-a:

    A0 podciągnięty do GND => zapis 160 DEC, odczyt 161 DEC
    A0 podciągnięty do VCC => zapis 162 DEC, odczyt 163 DEC

    Zapisałem adresy dla A0 podciągnięte do masy i A0 tym samym podłączyłem do masy i problem z dziwnymi cyframi zniknął.

    Teraz przynajmniej wiem, że działa komunikacja z pcf-em przez I2C i mogę dalej uczyć się.

    0
  • #15 17 Sie 2013 13:25
    MICHAŁ6201
    Poziom 16  

    Wiem, ale u mnie z angielskim cieniutko, więc szukam w necie odpowiedzi na moje pytania. Datascheety mam, ale nic mi nie mówią niestety.

    0
  • #17 17 Sie 2013 16:18
    MICHAŁ6201
    Poziom 16  

    Próbuję zgłębić ten zegarek i przy kodzie jaki wklejałem powyżej, cały czas migał wyświetlacz. Wyczytałem, że trzeba zastosować polecenie LOCATE.
    Zastosowałem to polecenie, ale teraz pochrzanił się zegarek i nie liczy równo sekun tylko np: 1,2,3...19,29,39,49,59,69,79,89,99.... i znów od 1 zaczyna.

    Dlaczego tak się dzieje?

    Oto kod:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Może jednak źle zrobiłem to polecenie LOCATE.

    I drugie pytanie - dlaczego pojedyncze godziny wyświetla jako: 2:34:37, a ja chciałbym żeby wyświetlał: 02:34:37

    0
  • #18 17 Sie 2013 17:27
    rekinisko
    Poziom 22  

    No to trzeba sobie dopisać coś w stylu:

    Code:
    if godzina > 10 then
    
    locate 1,1
    lcd "0"
    locate 1,2
    lcd godzina
    locate 1,3
    lcd ":"
    ...
    else
    locate 1:1
    lcd godzina
    ...

    Z tym locate to sam coś naknociłeś.

    0
  • #20 22 Sie 2013 22:39
    MICHAŁ6201
    Poziom 16  

    Opierając się na jakimś kodzie znalezionym w googlach udało mi się wyświetlać czas w formacie HH:MM:SS i ładnie wyświetla, ale niestety nie potrafię zrobić ustawienia godziny za pomocą przycisków. To co jest napisane w tym kodzie i niby ma ustawiać czas, to nie działa w ogóle.
    Możecie mi wytłumaczyć jak takie ustawianie godziny ma wyglądać i jak to działa?
    Szkoda że w żadnych ksiązkach nie znalazłem opisu jak takie ustawianie czasu zrobić od podstaw i wytłumaczone zrozumiałym językiem dla laika.

    Poniżej wkleiłem ten mój kod.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Poza tym co ma się w takim kodzie znajdować w pętli DO ..... LOOOP END, a co poza nią. I jak zrobić ustawianie takiej godzi z wykorzystaniem menu?

    Załóżmy, że mam do dyspozycji 4 przyciski. W procku piny od przycisków są ustawione jako wejścia (naciśnięcie przycisku powoduje podpięcie pinu procka do masy.

    Czy to trzeba tak zrobić, że jakaś część programu odpowiada za menu, a osobna część programu odpowiada za ustawianie czasu?

    Czy te części (menu i ustawianie godziny) ma się znajdować w pętli DO....LOOP?

    Jak widzicie, w literaturze wydawnictwa BTC nie ma wyjaśnionych takich podstaw. Ja jako laik i nie inżynier ani programista, chcąc nauczyć się czegoś nowego, nie mam skąd zaczerpnąć podstaw. Na elektrodzie znalazłem kilka jakichś rozwiązań, ale każde inne i żadnego z nich nie rozumiem...

    0
  • #21 08 Wrz 2013 19:18
    Daniel_GSM
    Poziom 25  

    A ja mam problem innego rodzaju...
    U mnie ładnie wyświetla godzinę i datę, ale zegar stoi...
    Godzinę mam taką: 01:01:00 i nic się więcej nie dzieje.
    Po każdym resecie rośnie o jeden liczba minut tzn 01:01:00; 01:02:00; 01:03:00 itd

    Co może być nie tak?


    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0