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

Atmega 32 Bascom ustawienie miesiąca i roku.

inspector_electro 20 Sty 2013 17:30 5535 30
  • #1 20 Sty 2013 17:30
    inspector_electro
    Poziom 22  

    Witam
    Mógłby ktoś zerknąć na ten kod? Za pioruna nie mogę w rejestrze ustawić zapisu miesiąca i roku.Na latach mi cofa o rok ,a na miesiącach o jeden miesiąc.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0 29
  • Relpol
  • #2 20 Sty 2013 23:19
    Mundi1970
    Poziom 24  

    W procedurze zapisu zmienną rok masz jako word, zamieniasz później na liczbę BCD. Makebcd działa poprawnie na zmiennych byte. Zrób sobie mały test:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #3 21 Sty 2013 09:50
    inspector_electro
    Poziom 22  

    Dopiero raczkuję.Nawet nie wiem jak przetestować to co mi podałeś.Chodzi mi oto, że muszę przyciskiem wprowadzić datę: miesiąc---> 3 aby do pcf zapisała się jedynka a rok muszę wpisać 2015 aby zapisał 2013.Pcf jest podtrzymywany super kondensatorem , i nawet po odpięciu od zasilania 5v na dłuższy czas pamięta te ustawienia.Problem pojawia się kiedy chcę ustawić 2013 to wtedy ustawia mi 2011 albo 2010.
    Nie wiem co w tym kawałku jest nie tak.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Y=makebcd(Y) usunąłem bo nic nie zmieniał.

    0
  • #4 21 Sty 2013 11:46
    Mundi1970
    Poziom 24  

    Podmień Sub Gettime() , Sub Storetime() i sprawdź czy działa:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #5 21 Sty 2013 11:52
    inspector_electro
    Poziom 22  

    Nie może być dwa razy settime.Błąd --duplicate label box i jeszcze jakieś dwa inne.Nie jestem do końca pewien, ale chyba tu mam coś nie tak:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #6 21 Sty 2013 12:16
    Mundi1970
    Poziom 24  

    Drugie podejście :D, cały program:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • Relpol
  • #7 21 Sty 2013 12:22
    inspector_electro
    Poziom 22  

    Miesiąc jest ok.Rok niestety cofa mi do daty w bazie (yearbase) czyli 2010.
    A to nie będzie tu coś nie tak?

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #8 21 Sty 2013 12:55
    Mundi1970
    Poziom 24  

    Zapomniałem :), przecież używasz PCF8583. Ten układ ma 4 letni kalendarz, 2 bity są przeznaczone na rok (wartość od 0 do 3). Czyli jak yearbase masz 2010, to wynikiem będą lata 2010 do 2013. Pogram należałoby, tak rozszerzyć żeby baza była zapamiętywana w pamięci SRAM układu PCF8583. Jeżeli miną 4 lata yearbase powinno być modyfikowane. Niestety nie mam żadnego przykładu.

    Edit: Masz też błąd yearbase nie może być 2010 ( to niebył rok przestępny), 2012 był przestępny

    0
  • #9 21 Sty 2013 13:40
    inspector_electro
    Poziom 22  

    Faktycznie.Jednak zapoznanie się dokładnie z treścią pdf-a to jest to.
    Myślałem o tym aby zaprząc do pracy pastylkę 24c16 np.Myślę ze można by było robić zapis na kostce.Co ty na to?

    0
  • #10 21 Sty 2013 13:44
    piotrva
    Moderator na urlopie...

    Co do PCF8583 - do zapisu pełnego roku wykorzystaj wolny RAM na końcu układu. Od adresu chyba 0x10 masz wolne komórki - w 2 z nich zapisz sobie pełny rok i sprawdzaj jego modulo z danymi w 2-bitowym rejestrze roku układu i w razie konieczności aktualizuj dane w tych 2 komórkach.

    0
  • #11 21 Sty 2013 13:51
    inspector_electro
    Poziom 22  

    piotrva gdy przeczytałem to co napisałeś, to normalnie jest kosmos dla mnie.Gdybym miał nawet gotowca ,to i tak nie bardzo będę wiedział jak zmienić kod lub do niego coś dodać.Chyba zostanę przy zapisie w yearbase 2013r chyba że pomożecie jakoś.

    0
  • #13 21 Sty 2013 16:10
    inspector_electro
    Poziom 22  

    Próbowałem coś takiego i męczę się cały czas ,ale i tak mi wychodzą głupoty. :(

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Czy jestem choć troszkę blisko?

    Znalazłem też coś takiego.Wycinam i wstawiam gotowe kawałki ,ale też mi to nie wychodzi.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #15 21 Sty 2013 16:55
    inspector_electro
    Poziom 22  

    Jeśli chodzi o te adresy -->pamięć 166 i 167 to zmieniałem.Mam programik który wykrywa kostkę.Mam 24c16 może dla tego ?

    0
  • #16 21 Sty 2013 17:00
    piotrva
    Moderator na urlopie...

    :D Aha, a Adresy obu kostek to Kolega posprawdzał? Że nie będzie konfliktu adresów? ;)
    Jeśli od początku masz równolegle z zegarkiem podpiętą pamięć to nie dziwne że nic nie działa lub działa jak chce ;)
    Czytanie not katalogowych na prawdę nie jest takie straszne i nie boli ;) Przynajmniej mnie nie boli;)

    0
  • #17 21 Sty 2013 17:02
    inspector_electro
    Poziom 22  

    Powoli aż tak ciemny nie jestem ;).Pcf jest ustawiony na 160/161 kostka na 166/167
    I tylko te adresy wykrywa mi programik.

    0
  • #19 21 Sty 2013 17:07
    inspector_electro
    Poziom 22  

    Przepraszam mój błąd to jest 24c32.Nie wiem dla czego napisałem 16.

    0
  • #21 21 Sty 2013 17:22
    inspector_electro
    Poziom 22  

    Jakich kodów? przecież mi nauka zajmie ze dwa lata.Na razie chcę doprowadzić do ładu ten ... zegar.

    0
  • Pomocny post
    #22 24 Sty 2013 13:26
    Mundi1970
    Poziom 24  

    Mając trochę wolnego czasu napisałem parę funkcji do obsługi układu PCF8583. Funkcja która ustawia godzinę i datę zapisuje też dane potrzebne do obliczenia pełnego roku, dzień tygodnia jest obliczany automatycznie na podstawie daty. Funkcje Pcf8583_write i Pcf8583_read można wykorzystać do zapisywania/odczytywania danych z wolnej pamięci ram. Dostępne jest 233 bajty pamięci, 7 bajtów od adresu 0x10 jest wykorzystane.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Twój zegarek wykorzystujący nowe funkcje, do kompilacji potrzebne są dwa pliki z archiwum. Ustawienia dnia tygodnia nie jest brane pod uwagę, obliczane jest automatycznie.:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
    Załączniki:
  • #23 26 Sty 2013 18:25
    inspector_electro
    Poziom 22  

    Jeżeli dobrze rozumiem to TWI , to muszę podłączyć pcf-a do wejścia INT atmegi??
    Jeżeli tak ,to będę musiał zamienić porty bo wszystkie int mam pod zajętymi portami.

    Jak mam to podłączyć? bo zegar stoi.

    0
  • #24 26 Sty 2013 18:38
    Mundi1970
    Poziom 24  

    Naciśnij enter i ustaw zegar, w podłączeniu nic nie musisz zmieniać.

    0
  • #25 26 Sty 2013 18:43
    inspector_electro
    Poziom 22  

    Nie idzie.Pin nr.3 pcf mam podłączony do masy może dla tego.Czytałem jeszcze że przy takiej konfiguracji (TWI) trzeba odpiąć rezystory podciągające od pcf.

    0
  • #26 26 Sty 2013 18:47
    Mundi1970
    Poziom 24  

    Usuń następujące linie w programie:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0
  • #27 26 Sty 2013 18:54
    inspector_electro
    Poziom 22  

    Teraz działa.Zapisuje także całą datę.Co to było co usunąłem?

    0
  • #28 26 Sty 2013 18:57
    Mundi1970
    Poziom 24  

    Domyślnie w BASCOM'ie transmisja danych I2c jest wykonana softwarowo, te dwie linie wymuszają żeby procedury wykorzystywały sprzętowy interfejs I2C(TWI).

    0
  • #29 26 Sty 2013 19:00
    inspector_electro
    Poziom 22  

    Czyli jeśli dobrze rozumiem ,teraz mam transmisję na software.Czemu nie dzała sprzętowa? coś z pcf?

    0
  • #30 26 Sty 2013 19:15
    Mundi1970
    Poziom 24  

    Interfejs TWI w ATMEGA32, wykorzystuje piny PC1 (SDA) i PC0 (SDL). Przy emulacji softwarowej mogą to być dowolne piny.

    0
  Szukaj w 5mln produktów