Witajcie,
mam problem nad którym siedzę juz kilka dni i zatrzymałem się nie wiedząc gdzie tkwi problem. Otóż chcę obsługiwać zegar RTC PCF8563 po I2C - czytać i zapisywać z niego dane (datę i czas). Projekt mam podzielony na kilka plików, całość pisana w Code Blocks 10.5 i kompilowana w AVR GCC.
Mam zdefiniowaną strukturę do zapisu danych z zegara do przechowywania aktualnych zawartości poszczególnych rejestrów z czasami PCF8563. Struktura ta tworzona jest w plikach pcf8563 i wedle założeń ma być zmienną globalną. Do wysyłania i odpierania po I2C służy mi bufor tI2CBuffer (zdefiniowany w i2c.c i deklaracja w pliku nagłówkowym) który też jest zmienna globalną.
Układ uruchamiany działa mniej więcej tak że mamy 5 przycisków: ŚRODKOWY (ENTER), LEWO,PRAWO, GORA, DOL
Naciskając Enter wchodzimy do ustawiania zegara (jeszcze to nie napisane w pełni) i mamy możliwość przesuwania kursora na wyświetlaczu za pomocą zmiennych pozycjax i pozycjay (używając klawiszy LEWO PRAWO) do miejsc w których przy użyciu klawiszy GORA DOL można zwiększać bądź zmniejszać wartość pojedynczego pola (cyfry). (wiem, kod jest okropnie zagmatwany ale na razie tylko takie rozwiązanie mi przyszło do głowy).
Po ponownym naciśnięciu Enter chcę zapisywać ustawiony czas do PCF i dalej go potem wyświetlać w pętli.
Testując sobie program chcę wpisać czas do PCF8563 i gdy robię to w miejscu gdzie zaznaczyłem linią gwiazdek (linia kodu 178 w pliku main.c) to po naciśnięciu przycisku GORA (SET_UP) uC idzie w krzaki (zawiesza się) i nic nie zapisuje do PCF'a. Natomiast poniżej naciskając DOL w pętli głównej for(;
wpisuje mi do zegara datę i potem kontynuuje wyświetlanie zapisanego na sztywno w kodzie do struktury czasu na LCD.
Z czego wynikać może to błędne działanie ? Błędna deklaracja zmiennych ? Jakieś przepełnienia stosów (pojęcie o tym mizerne) ?
Jak ew. zrealizować to inaczej/prościej/lepiej ?
Pomóżcie proszę bo już mi brzydnie to a nie wiem od czego teraz zacząć przy tym zacięciu
Poniżej kod main.c
oraz cały projekt w archiwum jako załącznik.
mam problem nad którym siedzę juz kilka dni i zatrzymałem się nie wiedząc gdzie tkwi problem. Otóż chcę obsługiwać zegar RTC PCF8563 po I2C - czytać i zapisywać z niego dane (datę i czas). Projekt mam podzielony na kilka plików, całość pisana w Code Blocks 10.5 i kompilowana w AVR GCC.
Mam zdefiniowaną strukturę do zapisu danych z zegara do przechowywania aktualnych zawartości poszczególnych rejestrów z czasami PCF8563. Struktura ta tworzona jest w plikach pcf8563 i wedle założeń ma być zmienną globalną. Do wysyłania i odpierania po I2C służy mi bufor tI2CBuffer (zdefiniowany w i2c.c i deklaracja w pliku nagłówkowym) który też jest zmienna globalną.
Układ uruchamiany działa mniej więcej tak że mamy 5 przycisków: ŚRODKOWY (ENTER), LEWO,PRAWO, GORA, DOL
Naciskając Enter wchodzimy do ustawiania zegara (jeszcze to nie napisane w pełni) i mamy możliwość przesuwania kursora na wyświetlaczu za pomocą zmiennych pozycjax i pozycjay (używając klawiszy LEWO PRAWO) do miejsc w których przy użyciu klawiszy GORA DOL można zwiększać bądź zmniejszać wartość pojedynczego pola (cyfry). (wiem, kod jest okropnie zagmatwany ale na razie tylko takie rozwiązanie mi przyszło do głowy).
Po ponownym naciśnięciu Enter chcę zapisywać ustawiony czas do PCF i dalej go potem wyświetlać w pętli.
Testując sobie program chcę wpisać czas do PCF8563 i gdy robię to w miejscu gdzie zaznaczyłem linią gwiazdek (linia kodu 178 w pliku main.c) to po naciśnięciu przycisku GORA (SET_UP) uC idzie w krzaki (zawiesza się) i nic nie zapisuje do PCF'a. Natomiast poniżej naciskając DOL w pętli głównej for(;
Z czego wynikać może to błędne działanie ? Błędna deklaracja zmiennych ? Jakieś przepełnienia stosów (pojęcie o tym mizerne) ?
Jak ew. zrealizować to inaczej/prościej/lepiej ?
Pomóżcie proszę bo już mi brzydnie to a nie wiem od czego teraz zacząć przy tym zacięciu
Poniżej kod main.c
oraz cały projekt w archiwum jako załącznik.
Kod: C / C++
