ATNEL tech-forum
https://forum.atnel.pl/

Jak ustawić funkcję budzika
https://forum.atnel.pl/topic22246-30.html
Strona 2 z 2

Autor:  miki53 [ 12 cze 2019, o 19:22 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Koledzy podpowiedzcie coś jeśli macie jakiś pomysł
Ja staram się pisać posty tak aby każdy mógł w jasny sposób
z nich z korzystać i zastosować w swoich projektach
ale nie jestem orłem w programowaniu jestem naprawdę na początku tej drogi

I wasze podpowiedzi przydadzą się nie tylko mi ale też będą z pożytkiem
dla innych

Autor:  Tom92 [ 12 cze 2019, o 19:41 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Postaram sie pomóc jutro rano bo będę u siebie to będę mógł przetestować kod ;) narazie nic nie zauważyłem

Autor:  miki53 [ 12 cze 2019, o 20:17 ]
Tytuł:  Re: Jak ustawić funkcję budzika

OK dzięki

Autor:  Tom92 [ 13 cze 2019, o 08:53 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Cześć miki53,

Sprawdziłem teraz Twoją funkcję. Wszystko jest dobrze, jedynie musisz wrzucić wywołanie funkcji:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


do funkcji void RTC_EVENT( void ), żeby Twoja funkcja zaczęła pobierać aktualny czas.

Jak wywołasz funkcję przed pętlą to wartość zmiennej czas = 0.

Sprawdziłem, Twoją funkcję tak jak napisałem wyżej i działa. Po osiągnięciu ustawionego czasu dioda zmienia swój stan.

Autor:  miki53 [ 13 cze 2019, o 10:18 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Panie i Panowie mamy uzupełnioną bibliotekę PCF8583 o funkcję budzika

wstawiłem ustawianie godziny alarmu w to miejsce w pliku main.c
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i faktycznie działa :D :D


A teraz chciałbym to rozwinąć do niezależnej możliwości włączania i wyłączania 8-mioma portami C
Czy macie jakieś pomysły ?, aby nie pisać jednej funkcji dla jednego wyjścia
Może by się dało jedną funkcją niezależnie wysterować 8 portów?

To znaczy
że ustawiamy tylko 8 takich kodów ( jak niżej ) dla poszczególnych nastaw
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ale jak wybrać port jakiego ma dotyczyć ?

Gdyby się udało rozwinąć ten temat to mielibyśmy sterownik imitujący obecność domowników
gdy nas niema w domu , lub fajny sterownik

Autor:  Tom92 [ 13 cze 2019, o 16:45 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Mam pewną koncepcje. Utworzyć typ strukturalny dla alarmów i wtedy funkcję mozna by wywolywać 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.


Gdzie po kolei przekazywałbyś wskaźnik na strukturę czasu, wskaźnik na strukturę alarmów, port, pin, godzinę alarmu, minutę alarmu, sekundę alarmu, długość trwania alarmu w sekundach.

Czy chodziłoby Ci o coś takiego?

Autor:  miki53 [ 14 cze 2019, o 14:13 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Coś w tym rodzaju
z tym że ja rozbudowałem nieco funkcję o element wyłączania

zaraz pokażę jak ta funkcja teraz wygląda

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


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


Teraz myślę aby wykorzystać komendy #define
w ten sposób aby przypisać portom numery rozpoznawcze

aby to wyglądało w taki sposób

DDRC |= (1<<PC7); // ustawiamy PORT PC7 jako wyjście
#define A1 PORTC &= ~LED_PIN // załączanie diody
#define A2 PORTC |= LED_PIN // wyłączanie diody

DDRC |= (1<<PC6); // ustawiamy PORT PC6 jako wyjście
#define A3 PORTC &= ~LED_PIN // załączanie diody
#define A4 PORTC |= LED_PIN // wyłączanie diody

// USTAWIANIE włącz - hh - mm - ss - nr portu / wyłącz - hh - mm - ss - nr portu
// ----------------------------------------------------------------
// set_rtc_alarm( &datetime, 15, 32, 0, 1, 15, 33, 0, 2 );
// ****************************************************************

( nie piszę tego fragmentu w SYNTEX C bo to tylko dla celów pokazowych a nie kod )

Ale nie wiem na razie jak do tego doprowadzić
aby to zadziałało w taki sposób?

Autor:  Tom92 [ 15 cze 2019, o 10:48 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Dobra miki53, mam dla Ciebie funkcję - może Cie ucieszy :) ewentualnie dopiszesz sobie trzy argumenty do wpisania godziny wyłączenia alarmu bo ja wpisałem długość trwania alarmu.

Nawiązując do:
miki53 napisał(a):
A teraz chciałbym to rozwinąć do niezależnej możliwości włączania i wyłączania 8-mioma portami C
Czy macie jakieś pomysły ?, aby nie pisać jednej funkcji dla jednego wyjścia
Może by się dało jedną funkcją niezależnie wysterować 8 portów?

chodziło Ci o piny chyba? Więc spróbowałem swoich sił i wyszła mi funkcja, która jest poniżej. Działa, jeśli ktoś widzi jakieś błędy to proszę o poprawę :)

Zgodnie z tym co pisałem wyżej o utworzeniu struktury dla alarmów w pliku *.h mamy:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

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

Przeanalizuj i daj znać ;)

Autor:  miki53 [ 15 cze 2019, o 13:10 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Dzięki Ci za pomoc

Tylko Ty zechciałeś pomóc i podjąć temat za to gorące dzięki.

Co do twojej funkcji to wydaje mi się że jest nieco skomplikowana
bo wskażnik goni wskażnik ale nie twierdzę że jest zła
ma działać i oto chodzi

ja nie umiem jeszcze programować więc piszę w prosty sposób
mam nadzieję że kiedyś się nauczę ;)
moja funkcja w nowej formie wygląda tak
( działa całkiem fajnie )

plik main.c - ustawiam porty

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


plik main.c - ustawienia dla dwóch wyjść alarmu pracujących niezależnie

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


plik mk_pcf8583.c - funkcja

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


plik mk_pcf8583.h - zmienne globalne

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


plik mk_pcf8583.h - nagłówek funkcji

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


Napisz swoje zdanie na temat mojego nieudolnego pisania ( ale bez owijania w bawełnę )

Autor:  miki53 [ 16 cze 2019, o 12:23 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Teraz nasuwa się następny problem
jak wyprowadzić ustawienia czasów alarmów na zewnątrz
aby można było ustawiać czasy za pomocą przycisków

tylko że na jedną nastawę potrzebuję
dla włącz - hh - mm - ss - port / dla wyłącz - hh - mm - ss - port = 8 x 8 nastaw dla 8 portów
to wychodzi 64 zmienne trochę sporo

Czy dało by się prościej ?

Autor:  Tom92 [ 16 cze 2019, o 14:38 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Moja funkcja może wydawać się skomplikowana dlatego, że chciałem, aby byla uniwersalna. Ale dzięki temu można sterować dowolnym pinem na dowolnym porcie niezależnie. W pliku main.c tam są źle opisane wywołania bo zrobiłem copy and paste, ale myślę że można się domyślić z argumentów, ktore piny są sterowane.

Co do Twojej funkcji to jak działa to jest dobrze, ale za każdym razem jak bedziesz chcial zmienic port i pin to musisz ingerować w funkcję. Ja napisalem tak żeby tego uniknąć.

A co do ilości zmiennych żeby ustawić 8 alarmów to nic mi nie przychodzi do głowy czy dało by sie uprościć. Musialby się ktoś wypowiedzieć z doświadczeniem

Autor:  miki53 [ 16 cze 2019, o 17:19 ]
Tytuł:  Re: Jak ustawić funkcję budzika

W mojej funkcji są porty ustawione na stałe ale
podczas ustawień dla danego wyjścia można je przełączać

np. można zmieniać wyjście dla każdej nastawy niezależnie

zobacz

// USTAWIANIE włącz - hh - mm - ss - nr portu / wyłącz - hh - mm - ss - nr portu
// ----------------------------------------------------------------
// set_rtc_alarm( &datetime, 15, 32, 0, 2, 15, 33, 0, 2 );
// ****************************************************************

w miejscu gdzie ustawiasz - port - możesz wstawiać dowolny port zamiast 2- dla PD5 wpisz
1 i masz już ustawiony port PD6
możesz nawet mieszać, włączasz port PD5 a wyłączasz wcześniej ustawiony port PD6
i wszystkie są ustawiane pełnym czasem ( godziny, minuty, sekundy )

Jeszcze raz się przyglądam twojej funkcji i coś mi nie gra chodzi mi o wskażnik

------------------------ [ Dodano po: 41 minutach ]

Jeszcze raz się przyglądam twojej funkcji i coś mi nie gra chodzi mi o wskażnik al->
wskazuje on na czas ustalany przez RTC oraz na czas który my ustawiamy jako czas
alarmu potem ten sam wskażnik wskazuje na godziny alarmu ( ahh ), minuty ( amm )
oraz sekundy ( ass )

Nie za dużo iak na jeden wskażnik ?

Ja staram się podglądać jak to robi Mirek

Mirek moał osobny wskażnik ( tak dla przykładu )

dla godziny i inny dla daty
tak aby to się nie pomieszało wszystko w jednym

A Ty masz jeden wskażnik prawie do wszystkiego
Ja tam się nie znam ale na chłopski rozum to w tym wskażniku musi być kogel mogel


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

Autor:  Tom92 [ 16 cze 2019, o 21:46 ]
Tytuł:  Re: Jak ustawić funkcję budzika

miki53 napisał(a):
Jeszcze raz się przyglądam twojej funkcji i coś mi nie gra chodzi mi o wskażnik al->
wskazuje on na czas ustalany przez RTC oraz na czas który my ustawiamy jako czas
alarmu potem ten sam wskażnik wskazuje na godziny alarmu ( ahh ), minuty ( amm )
oraz sekundy ( ass )

Nie za dużo iak na jeden wskażnik ?

Bez obawy nie jest za dużo :) wskaźnik al-> wskazuje na zmienne w strukturze i nie robi się "kogel mogel" :P

popatrz, na początku wpisuje do zmiennych ahh, amm, ass wartości czasu alarmu, żeby później można było policzyć czas alarmu - użyłem wskaźnika bo zmienne są w strukturze. Później wpisuję do zmiennej czas (także ona jest w strukturze), wartość aktualnego czasu odczytanego z RTC przez wskaźnik dt-> ponieważ te są w innej strukturze, a ponieważ mam utworzony TYP strukturalny to zmienne alarm1, alarm2, alarm3 tworzą osobne struktury i nic się nie pomiesza :) W końcu wszystko działa według założenia.

miki53 napisał(a):
Mirek moał osobny wskażnik ( tak dla przykładu )

dla godziny i inny dla daty
tak aby to się nie pomieszało wszystko w jednym

Popatrz np. na funkcję Pana Mirka get_rtc_datetime, on tam dużo używa wskaźnika dt->, a zmiennych w strukturze TDATETIME jest dużo więcej niż w mojej strukturze TALARM. Chyba, że o inny wskaźnik Ci chodzi? Bo Pan Mirek dla daty i czasu używa wskaźnika dt->.

Autor:  miki53 [ 17 cze 2019, o 08:54 ]
Tytuł:  Re: Jak ustawić funkcję budzika

OK pisałem że się nie znam :mrgreen:

Autor:  Bigrazor [ 25 cze 2019, o 10:07 ]
Tytuł:  Re: Jak ustawić funkcję budzika

Witam.
Też jestem w trakcie uczenia się, ale może takie rozwiązanie tobie spasuje (wycinek z mojego sterownika stworzonego na postawie BB) :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Oczywiści musisz trochę zmodyfikować pod swoje potrzeby, ale chodzi o samą ideę, pozostanie tylko zapis i odczyt z EEPROM, bo ja korzystałem z zewnętrznej pamięci 24c32.

Strona 2 z 2 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/