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



Teraz jest 19 mar 2024, o 04:55


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 45 ]  Przejdź na stronę Poprzednia strona  1, 2
Autor Wiadomość
PostNapisane: 12 cze 2019, o 19:22 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2019, o 19:41 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 cze 2019, o 20:17 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

OK dzięki



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 cze 2019, o 08:53 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

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 postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 cze 2019, o 10:18 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 cze 2019, o 16:45 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

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?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 cze 2019, o 14:13 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

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?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2019, o 10:48 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

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ć ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2019, o 13:10 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

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ę )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 12:23 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

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 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 14:38 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 17:19 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 cze 2019, o 21:46 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

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->.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 cze 2019, o 08:54 
Offline
Użytkownik

Dołączył(a): 05 gru 2017
Posty: 408
Lokalizacja: Puck
Pomógł: 7

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 cze 2019, o 10:07 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 21 wrz 2017
Posty: 17
Pomógł: 0

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.



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: 45 ]  Przejdź na stronę Poprzednia strona  1, 2

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 0 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO