Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 20:40


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 50 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 23 kwi 2015, o 22:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Dziękuję, jutro się pomęczę i dam znać co z tego wynknie. Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2015, o 18:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Witam!
Ponownie proszę o dalszą pomoc w ustawianiu godziny.
Utworzyłem dwa timery programowe: SoftTimer1 i SoftTimer2 dekrementowane co 10ms w przerwaniu CompareMatch timera sprzętowego TIMER2. Czy dobrze je zdefiniowałem?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz chciałbym oprogramować przycisk SET (PB0), aby wejść w tryb ustawiania zegara. Analizuję kod Kolegi Krauser i trochę się pogubiłem.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Rozumiem, że do przycisku SET, przypisane są zmienne: key_set_zablokwany (tzn. „dłuższe” przytrzymanie), key_set_nacisniety (tzn. „krótkie naciśnięcie). W pierwszym obiegu pętli while sprawdzamy czy przycisk SET jest naciśnięty oraz czy zmienna key_set_zablokowany ma wartość 0. Jeżeli tak (oba warunki prawdziwe) to zmienna key_set_zablokowany zmienia wartość na 1, a zmienna key_set_nacisniety przyjmuje wartość 1. Jeżeli nie to sprawdzamy drugi warunek po elese: czy klawisz SET jest zwolniony. Jeżeli tak to zmiennej key_set_zablokowany przypisujemy wartość 0.
Jakie działania są wykonywane po sprawdzeniu tych warunków? Skąd wartość SoftTimer=4? Jak przejść w tryb programowania, aby godzina (hh) zaczęła mrugać na LCD. Nie bardzo ogarniam całość „blokowo”.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2015, o 20:11 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

avrfun napisał(a):
Rozumiem, że do przycisku SET, przypisane są zmienne: key_set_zablokwany (tzn. „dłuższe” przytrzymanie), key_set_nacisniety (tzn. „krótkie naciśnięcie).

Jest tylko krótkie naciśnięcie. key_set_zablokwany blokuje ustawianie zmiennej key_set_nacisniety w przypadku trzymania klawisza.
avrfun napisał(a):
Jakie działania są wykonywane po sprawdzeniu tych warunków?

Zmienna key_set_nacisniety jest używana w innej części kodu. Tam, gdzie wyświetlamy coś na LCD.
avrfun napisał(a):
Skąd wartość SoftTimer=4?

Ta wartość określa jak często będzie się wykonywać fragment kodu od if (0 == SoftTimer1) do klamry zamykającej. W tym przypadku 40 ms. Procesor jest zbyt szybki dla niektórych operacji i w taki sposób wykonuje się różne akcje co określony czas.
avrfun napisał(a):
Jak przejść w tryb programowania, aby godzina (hh) zaczęła mrugać na LCD. Nie bardzo ogarniam całość „blokowo”.
Masz to w części kodu z drugim timerem programowym. Ta część kodu wykonuje się co 100ms, ale skoro masz już ten krótki kod testowy to tamto zostaw na chwilę. Rzuć okiem na ten kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


PS. zwróć uwagę na to wyrażenie:
!(PINB & (1 << PB0)) bo musiałem poprawić

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2015, o 20:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Uzyskałem efekt zwiększania liczby o jeden przy każdym naciśnięciu przycisku PB0. Rozumiem, że po restarcie, warunek pierwszy jest spełniony i możliwe są ustawienia licznika. Czuję, że stąd już krok (ale duży) do zaimplementowania tego w moim zegarze.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2015, o 20:59 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

A teraz zmień:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

na:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

albo w ogóle wywal tą zmienną i zobacz co się stanie.

Na autoinkrementację są lepsze sposoby.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2015, o 21:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Nic się nie zmieniło - nadal zlicza w górę po naciśnięciu PB0. Coś robię źle!

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Coś jest nie tak z tymi warunkami. Może źle napisałem?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Nie mogę wyrzucić zmiennej key_set_zablokowany bo zrujnuję warunki!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2015, o 21:50 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Różnica będzie przy trzymaniu klawisza. Zakomentowałeś w złym miejscu, a jak sobie usuniesz tą zmienną to wystarczy też usunąć ją z kodu i poprawnie się skompiluje.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2015, o 21:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Teraz po jednokrotnym przyciśnięciu zlicza po dwa w górę, a po przytrzymaniu też zlicza tylko bardzo szybko. Warunki zrobiły się jakieś takie ubogie.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2015, o 10:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Witam!
Odnoście kluczowych dla mnie porad Kolegi Krauser. Napisałem krótki kod symulujący ustawianie zegara (zmienne do ustawienia: h, m, s). Zasymulowałem naciskanie klawisza SET poprzez przypisanie zmiennej ustaw wartości 1 lub 2. Oprogramowałem przyciski: KEY_UP i KEY_DOWN. Efekt jest nie do końca zgodny z oczekiwaniem. W zależności od wartości zmiennej ustaw wybieram do ustawienia h lub m. Po naciśnięciu KEY_UP lub KEY_DOWN odpowiednia liczba (h lub m) zwiększa się lub zmniejsza o kilka (nie o jeden), a co gorsze pojawiają się dziwne wartości pozostałych zmiennych np. s, którymi nie steruję. Wygląda jakby liczył 256 kroków. Dlaczego tak się dzieje?

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam

P.S. 1 Zapanowałem nad wyświetlaczem. Zliczanie było dobre tylko wszystko przesuwało się na LCD przy zmianie godziny z dwucyfrowej na jednocyfrową.

P.S. 2

Zrobiłem mały postęp we wdrażaniu kodu Kolegi Krauser. Stan na chwilę obecną jest taki:
1. Zmienna ustaw dostaje "na sztywno" wartość 1 (ustawianie godzin).
2. Klawisz SET (PB0) przyciskany kilkakrotnie zmienia wartość zmiennej ustaw (pytanie: skąd warunek > 7 w kodzie:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
(zmieniłem 0 na jeden, aby na razie nie blokować edycji). Klawisz SET zachowuje się nieco dziwnie tzn. pierwsze wciśnięcie zmienia 1 na 3, a kolejne już dobrze 3 na 2 na 1 i znów 3 (dlaczego na początku pętli pomijana jest 2?)
3. Klawisze KEY_UP i KEY_DOWN zmieniają prawidłowo wartość godzin, minut i sekund (w górę i w dół).

Pozostały wg mnie do opracowania 3 zagadnienia:
1. Mruganie godzin, minut i sekund w zależności od wartości zmiennej ustaw (próbowałem wdrożyć fragment kodu kolegi Krauser w "ciele" SoftTimer2, ale na razie bez skutku). Bez tego ustawiający zegar będzie działał po omacku i ustawiał to co akurat wypadło po naciśnięciu klawisza SET.
2. Sprzężenie tego kodu z kodem zegara i sterowanie flagą into0_flag. Czuję instynktownie, że ze zmianą tej flagi będzie związane wejście w tryb ustawiania godziny oraz, że zmiana ta nastąpi po naciśnięciu klawisza SET. Wtedy zmienna ustaw przyjmie wartość np. 1 i będzie można ustawiać godziny itd.
3. Opracowanie funkcji zapisz_czas (). Wciśnięcie klawisza SAVE ma spowodować ponowną zmianę into0_flag i uruchomić funkcję zapisu czasu do PCF8583.
Czy właściwie to rozumiem?

Tak wygląda kod na chwilę obecną:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2015, o 21:31 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

No i przekonałeś się, że brak flagi key_..._zablokowany psuje działanie klawiszy, bo zmienne zmieniają się zbyt szybko. Z kolei zwiększenie czasu spowodowałoby, że klawisz musiałby być trzymany dłużej.

Ostatni kod wygląda już spoko. Nie potrzebnie wyrzuciłeś procedurę obsługi przerwania ISR( INT0_vect ) to w niczym nie przeszkadzało, a teraz musisz to dodać. Nie wiem też po co wprowadziłeś sobie nowe zmienne, które określasz jako "zmienne, które będą ustawiane" to przecież mogą być te same zmienne które odczytałeś z zegara (te po konwersji). Dlatego odczyt zegara jest blokowany, aby odczyt nie kłócił się z ustawianiem. Zastanów się, przecież jak ustawia się zegar to chce się zmienić czas, który jest w tym momencie i dlatego nowe zmienne nie są potrzebne i tylko skomplikują sprawę.

Ad. 1. Podałem gotowe rozwiązanie. Masz takie zmienne widac_..., które w tej części kodu zmieniają swój stan na przeciwny jak zmienna ustaw ma odpowiednią wartość np. dla godzin ustaw = 1. Teraz wyświetlasz godziny zawsze, a należy to zrobić tylko jak zmienna widac_godziny ma wartość 1, a w innym razie dwie spacje, aby godziny zniknęły i to wszystko.

Ad. 2. To jest troszkę inaczej. Tam, gdzie teraz masz sprawdzanie w warunku zmiennej int0_flag dodaj to co było wcześniej tylko bez używania funkcji lcd_..., bo wyświetlanie jest w dalszej części (TWI_read_buf itd.) Zmienna int0_flag ustawiana jest w przerwaniu co sekundę, bo układ zegara co sekundę zmienia stan wyjścia INT.

Ad. 3. Tą funkcję w zasadzie też masz gotową. Należy część kodu, która na starcie zapisywała bufor do zegara (TWI_write_buf i to co powyżej). Flagę int0_flag zostaw w spokoju.

A odnośnie pytania skąd warunek w kodzie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to przedstawia się to następująco dla zmiennej ustaw:
0 - odczyt zegara - normalna praca
1 - ustawianie godzin / miganie godzin
2 - ustawianie minut / miganie minut
3 - ustawianie sekund / miganie sekund
4 - ustawianie pełnego roku / miganie pełnego roku
5 - ustawianie miesiąca / miganie miesiąca
6 - ustawianie dnia / miganie dnia
7 - ustawianie dnia tygodnia / miganie dnia tygodnia

Dużo tego, ale w zasadzie jest całkiem podobnie. Na pocieszenie dodam, że to nie koniec, bo należałoby zadbać o to, żeby dni miesiąca miały inną inną wartość maksymalną podczas ustawiania w zależności od miesiąca i roku.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2015, o 23:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Dziękuję bardzo za kolejne merytoryczne porady. Rano siadam do projektu, wykorzystam Twoje podpowiedzi, ustosunkuję się do pytań oraz napiszę o efektach. Niepokoi mnie ustawianie daty, ale odłożę myśl o tym na później. Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2015, o 11:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Witam!
Złożyłem wszystkie części w całość (bez obsługi ustawiania daty), ale wystąpił nieoczekiwany problem. Kompilator zgłasza niestety błąd w 3 miejscach. Przy kompilacjach każdej z osobna części "zegarowej" i "settingowej" nie było problemów. Coś źle posklejałem. Proszę o pomoc.

Błedy:

Obrazek

Obrazek

Kod w całości:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam

P.S. Poczyniłem kilka obserwacji, ale nie bardzo wiem jak je interpretować:

1. Gdy zainicjuję zmienną ustaw wartością 1:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to po restarcie zegar wchodzi od razu w tryb programowania i mrugają godziny, które można ustawiać (flaga =1, ustaw=1) [A]. Kolejne naciśnięcie sprawia, że można ustawiać sekundy bo ustaw zmienia wartość od razu na 3 z pominięciem 2, jednakże sekundy już nie mrugają [B]. Po 8. naciśnięiu klawisza SET zegar wyświetla nową godzinę (na niby bo fukcja zapisz_czas jeszcze nie działa) flaga ustawia się na 0 i zmienna ustaw też przyjmuje wartość 0. To koniec, bo kolejne wciśnięcie klawisza SET nie powoduje przejścia zegara w tryb programowania [C].

Obrazek [A]
Obrazek [B]
Obrazek [C]

2. Gdy zainicjuję zmienną ustaw wartością 1:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to po restarcie zegar jest martwy i nie wyświetla godziny. Naciskanie klawisza set nie pomaga (dioda w przerwaniu INT0 zmienia stan co sekundę):

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2015, o 22:12 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Aby klawisz set mógł zmienić zmienną ustaw należy dodać taką możliwość. Tego brakowało:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Klawisz set źle działa, bo masz błąd w kodzie:
avrfun napisał(a):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

przy else if powinien być KEY_SET a jest KEY_DOWN. Pomyłki się zdarzają.


Czasu nie widać bo masz zmienne ustawione na zero więc w warunku sprawdzania powinno być:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I jeszcze należy dodać default w switchu sterowania wyświetlaniem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2015, o 22:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Witam!

Dzięki wielkie. Działa prawie dobrze. Jednakże w trybie ustawiania migają tylko godziny (ustaw=1), gdy ustaw=2 lub 3 nie widać minut i sekund. Co może być przyczyną?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2015, o 22:37 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

A masz to w ten sposób:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 kwi 2015, o 22:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Bardzo, bardzo dziękuję. Działa znakomicie. Przeprowadziłeś mnie przez cały proces programowania zegara od koncepcji do kodu. Klikam ponownie z wielkim przekonaniem i życzliwością "pomógł". Jak sam wspomniałeś dobrze byłoby się teraz dobrać do daty (różne ilości dni w zależności od miesiąca). Jutro popracuję nad zapisem ustawionego czasu do pamięci: key_save_nacisniety, teoretycznie wiem, że ciało zapsu funkcji powinno być wyposażone w coś takiego"

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


P.S. Dzisiaj zmagam się z zagadnieniem zapisu nowo ustawionego czasu i daty do PCF8583. Zadeklarowałem i zdefiniowałem funkcję zapisz_czas i przypisałem ją do klawisza KEY_SAVE. Gdy ustawię godzinę i datę na sztywno zapis przebiega poprawnie, ale gdy próbuję zmiennym w funkcji przypisać nowo ustawione wartości to nie działa. Nie wiem jak przekazać nowo ustawione parametry do funkcji. Myślę tak: gdy godziny=23, to przekazanie tego do funkcji mogłoby wyglądać tak: godzina_write = godziny, ale to nie działa. Proszę o podpowiedź.

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Myślę, że rozwiązałem "ustawianie" nazwy dnia tygodnia". Ustawienia 0-6 byłyby bardzo uciążliwe i niepraktyczne.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Funcja wykorzystująca algortym Zellera zwraca na podstawie daty indeksy do tablicy z nazwami dni tygodnia i ustawia je automatycznie. Wydaje się, że działa poprawnie.

Kłopotliwe wydaje się mi programowanie numeru roku (0-3)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Gdy ustawię np. rok 2016 to do PCF-a należy przekazać 0 itd. Trzeba chyba na sztywno przypisać cyfry do najbliższych lat, ale jest to mało eleganckie. Może są inne rozwiązania?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2015, o 16:41 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

avrfun napisał(a):
Nie wiem jak przekazać nowo ustawione parametry do funkcji.

Najpierw funkcja musi mieć odpowiednią postać tzn. w nawiasach wypisuje się zmienne tej funkcji, które zostaną zmienione z zewnątrz podczas wywołania. To są tzw. argumenty formalne, które funkcja zna i jak widać poniżej wykonuje na nich operacje. Oprócz tego funkcja ma swoje zmienne lokalne np. bufor czy rok_kopia itd.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak korzysta się z takiej funkcji to w odpowiednie miejsca trzeba podstawić wartości lub jakieś zmienne. Wtedy mówi się, że to są tzw. argumenty aktualne funkcji. Funkcja przekopiowuje wartości tych zmiennych do swoich argumentów formalnych i wykonuje dalsze operacje.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

lub
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Odnośnie roku to wystarczy obliczyć resztę z dzielenia przez 4. Jak powyżej.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2015, o 16:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Witam!
Dzięki. Kompilator zgłasza błąd:
../08_TWI_PCF8583_obsluga_daty_nazwy_dni_tygodnia_settings_3.c:554:6: error: conflicting types for 'zapisz_czas'

P.S. Zadeklarowałem funkcję (nową postać), błędu nie ma.

------------------------ [ Dodano po: 9 minutach ]

W tym samym momencie tako zrobiłem. Spróbuję coś zapisać do PCF-a.

------------------------ [ Dodano po: 50 minutach ]

Przetestowałem od razu na lutym 2016 (29 dni)! Działa znakomicie. Jeszcze raz serdecznie dziękuję za przeprowadzenie mnie przez tajniki programowania zegara w C. Apetyt rośnie wraz z każdą nową umiejętnością. Teraz jeszcze myślę o alarmie do tego zegara, ale jak czytałem temat jest trudny i słabo opisany. Poleca się raczej tworzenie alarmów w avr, a nie korzystanie z tego wbudowanego w PCF-a. Czy Twoje zdanie jest podobne?
Pozdrawiam



Ostatnio edytowano 27 kwi 2015, o 17:05 przez avrfun, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2015, o 19:23 
Offline
Uzytkownik zasłużony dla forum.atnel.pl
Avatar użytkownika

Dołączył(a): 16 lip 2012
Posty: 2088
Lokalizacja: Leżajsk / Kraków
Pomógł: 411

Programowy alarm będzie łatwiej ogarnąć i będzie więcej możliwości chociaż sam układ ma też ciekawe możliwości. Jeśli układ miałby pracować tylko z baterii, gdzie procesor byłby wyłączony przez większość czasu to wtedy alarm układu RTC będzie wskazany w innym przypadku lepiej niech się procesor pomęczy. Alarm codzienny to tylko porównanie minut i godzin z minutami i godzinami alarmu. Jak są równe to ustawienie flagi. W pętli while timer programowy może na podstawie tej flagi sterować buzzerem, a wciśnięcie dowolnego przycisku powinno ją zerować i następnego dnia warunek ustawi ją z powrotem. Przydałby się też wyłączyć alarm / wyzerować flagę automatycznie po przykładowo 5 minutach alarmu.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 kwi 2015, o 20:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 02 kwi 2015
Posty: 449
Pomógł: 3

Dziękuję za wskazówki. Posiedzę nad tematem alarmów przez kilka dni i mam nadzieję przedstawię jakiś kod do oceny. Bez pomocy Kolegi myślę, że się pewnie nie obejdzie
Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 50 ]  Przejdź na stronę Poprzednia strona  1, 2

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO