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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 25 lip 2025, o 21:24


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 29 ] 
    Autor Wiadomość
     Tytuł: Regulacja czasu
    PostNapisane: 21 lis 2014, o 20:19 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Witam wszystkich, mam taką prośbę jestem początkujący i mam jeszcze pewne braki wiedzy ale chciałbym napisać funkcję dzięki której będę mógł np. ustawić, że port PB0 ma być w stanie wysokim np. na 15 min a wcześniej chciałbym mieć możliwość dokonania wyboru na jak długo chce stan wysoki np z zakresu 0-30 minut. Bardzo proszę o jakieś naprowadzenie jak to można zrobić.
    Ps. szukałem na forum ale jakoś nie mogłem znaleźć nic podobnego. ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 20:58 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    to ma być napisane w języku C czy może być bascom?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:05 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Język C bo po względnym przerobieniu BB staram się stworzyć własny program użyteczny i zarazem uczę się przy tym ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:11 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    varaderas napisał(a):
    (...)
    Przydałoby się, gdybyś napisał z jakiego mikrokontrolera korzystasz, bo w BB Pan Mirek opisuje to na Atmega32, gdzie wszystko ładnie i pięknie wychodzi, ale gdybyś próbował wykonać niektóre sprawy na Atmega8 to się nie uda, choćby z uwagi na różnice w timer'ach.

    W BB to jest, np. str.324, 325 - wyd. II (BB HD). ;)

    Pozdrawiam! j23 Jarek

    _________________
    "O sygnałach bez całek" Czesław Frąc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:12 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    Możesz to zrobić np. tak:
    ustawiasz timer na tyknięcia co 10ms
    W przerwaniu zliczasz tyknięcia i gdy doliczysz do 100 ustawiasz flagę sekunda

    W pętli głównej sprawdzasz czy flaga jest ustawiona
    jeśli tak to:
    zmniejszasz ilość sekund jaka pozostała do wyłączenia linii // jedna minuta to 60 sek. ;-)
    sprawdzasz czy ilość sekund osiągnęła wartość 0
    Jeżeli tak to wyłączasz linię
    zerujesz flagę sekund

    Ot i cały program ;-)
    Oczywiście ilość minut przeliczanych na sekundy ustawiasz albo w czasie kompilacji // bleeee
    Albo... tu już co Ci podpowie wyobraźnia: np. przez pilota IR, przyciskami, przez RS232... itd, itp.

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:13 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    korzystam z Atmegi 8 a regulacja przyciskami, coś widzę, że to chyba może być całkiem trudne zadanie...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:16 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    w C to masz coś takiego na przykład:
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Pisane z głowy. tam gdzie jest 900 w pętli for wklejasz dowolną wartość. 900 jest dla 15 min. ale to jest że tak powiem "jednorazowe wysterowanie" bo nie jest to w petli głównej while. Tylko żebyś sobie zobaczył jak ma mniej więcej wyglądac kod

    ------------------------ [ Dodano po: 3 minutach ]

    A jak przyciskami chcesz to regulować to trzeba rozbudować kod ale może to co napisałem choć trochę Cię naprowadzi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:20 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Dziękuję bardzo i widzę, że da się to zrobić bez przerwań bo niestety narazie tego staram się unikać bo nie do końca to rozumiem..
    A żeby dodać regulację zmiennej i w postaci minut to ogólnie trudno jest to napisać? Jutro od rana będę z tym walczył :)
    Dodam dodatkowo, że modernizuję sobie program wytrawiarki kolegi z naszego forum i chcę abym mógł ustawić czas działania napowietrzacza ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:25 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    Nie jest trudno i na pewno sobie poradzisz ale pobaw się z tym kodem co Ci wysłałem spróbuj go trochę zmienić, wrzucić do pętli głównej while. Zresztą w BB na początku są tego typu proste przykłady i opisane jak obsługiwać przyciski. Dla chcącego nic trudnego ;) w pętli for wykonuje się 900 razy opóżnienie około 1s. minuta ma 60s. 900/60=15 minut



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:27 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    brakuje jeszcze jednego includa
    no i żebyś się nie zdziwił, że ten kod wykona się tylko raz i na tym koniec ;-)

    Przerwania to nic strasznego. Na prawdę.

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:30 
    Offline
    Użytkownik

    Dołączył(a): 23 sty 2014
    Posty: 1085
    Pomógł: 73

    Kolega MirkoT słusznie zauważył że brakuje #include <avr/io.h>



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:31 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Rozumiem zasadę działania tego programu tylko w nim są te _delaye_ i to może mi skrzaczyć działanie reszty programu i tego się obawiam.
    Niestety dopiero od niedawna bawię się z AVRAMI i wiem, że kiedyś będę się śmiał z tych przerwań ale one niestety bardzo trapią początkujących, kolega też jakiś czas temu zaczął i mówi, że odpuszcza bo nie daje rady z tymi przerwaniami.
    Ja własnie nie wiem jak ustawić ten timer by tykał co 10 ms bo w bb czytałem pare razy o tych przerwaniach i 3 razy film p. Mirka oglądalem i nie wiem jak to ustawić..

    ------------------------ [ Dodano po: 1 minucie ]

    Jeszcze kolejnej rzeczy której nie ogarniam a której Pan Mirek nie tłumaczy ( jeszcze nie oglądałem filmów o strukturach) to są te flagi. Byłby ktoś w jakiś prosty sposób napisać mi co to jest i może poprzeć jakimś przykładowym kodem gdzieś z zacisza domowego workspace'a ;D

    ------------------------ [ Dodano po: 3 minutach ]

    Pan Mirek nie tłumaczy to może zbyt wielkie słowo za co przepraszam ale uważam, ze na prawdę mało o tym jest a to często się powtarza i nie wiem w jakim celu ustawia się ta flagę, po co zeruje itd.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:38 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    W takim razie bardzo polecam ten poradnik.

    http://mirekk36.blogspot.com/2013/12/przerwania-okiem-poczatkujacego.html
    Nie ma co odpuszczać ;-)
    Rozumiem, że wszystko jest trudne nim stanie się proste. (a w każdym razie łatwiejsze :lol: )
    Jest dokładnie tak jak mówisz. Te delaye Ci zatrzymają cały program na czas ustawienia portu
    Dlatego bez przerwań się tego zrobić nie da :-(
    O konfiguracji poczytaj w rozdziale o multipleksowaniu.
    Natomiast wyliczenie wartości zrobi Ci MKAVRkalkulator - wspaniałe narzędzie :!:

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:42 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Ten poradnik oglądałem 3 razy :D i co najgorsze w sumie większość rozumiem a i tak lipka ale widocznie muszę obejrzeć raz jeszcze. A jak w mkAVR kalkulator wyliczyć te wartości ( co ile ma tykać timerek) ? Jest jakiś film do tego? Przyznaje bez bicia ze w bb nie czytałem w ogóle o tym programie



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:44 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 paź 2014
    Posty: 42
    Pomógł: 5

    Kolego, jak Ci delaye nie pasują to musisz zrozumieć timery, bo się opcje kończą. Wpisz w google "atmega8 timer0" i zobacz najprostsze tutoriale obrazujące jak wyliczyć sekundę, po tym jak zrozumiesz to sobie i te 15 minut policzysz, innego wyjścia nie ma.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:50 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    tak jak kolego @gardziej mówisz i niestety albo stety jutro od rana dalej walka z przerwaniami, a wyjaśniłby mi ktoś jakoś w skrócie o co chodzi z tymi flagami ?
    Tak ale jak dołożę, zewnętrzny kwarc to wydaję mi się, że może mi program głupieć bo on jest ustawiony dla 8MHz.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:56 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    więc mogę to zrobić by zliczał mi co minutę ( może co sekundę i zrobię sobię jakąś operację typu: minuta=60*c) bez zewnętrznego kwarcu tak?

    ------------------------ [ Dodano po: 1 minucie ]

    Panowie a podpowiecie coś odnośnie tych flag? Kiedy je używamy jak i po co, może jakiś prosty kod bym zobaczył na przykładzie fizycznym.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 21:58 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 paź 2014
    Posty: 42
    Pomógł: 5

    Wewnętrzny jest mniej dokładny, ale do celów nauki nie ma tutaj większej różnicy i nie baw się póki co w zewnętrzne kwarce, póki nie robisz np. zegarka.
    Flaga to po prostu ustawienie jakiegoś bita na 0 lub 1. Mikrokontroler sprawdza flagę, flaga wywieszona (=1) to coś robię, niewywieszona nie robię.

    ------------------------ [ Dodano po: 2 minutach ]

    Lub w drugą stronę, występuje np. przerwanie, mikrokontroler ustawia flagę konkretną, czyli ustawia 1 w jakimś bicie i Ty wiesz, że właśnie takie przerwanie miało miejsce.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 22:06 
    Offline
    Użytkownik

    Dołączył(a): 24 sty 2012
    Posty: 1469
    Pomógł: 56

    varaderas napisał(a):
    Panowie a podpowiecie coś odnośnie tych flag? Kiedy je używamy jak i po co, może jakiś prosty kod bym zobaczył na przykładzie fizycznym.

    Taki fajny kod już jest :!:
    Weź w łapki swojego BB i poczytaj rozdział o 1Wire. Mam książkę w twardej oprawie i specjalnie dla Ciebie
    znalazłem to na stronie 324 ;)
    Trzeba czytać, czytać, czytać... ;)

    _________________
    Jestem początkujący i moje porady mogą być błędne



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 22:07 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 paź 2014
    Posty: 42
    Pomógł: 5

    Panie Antystatyczny, kolega varaderas przeczytał BB, oglądnął poradniki i nie może załapać podstawowych rzeczy więc próbuje mu pokazać najprostszą drogę do nauki zrozumienia tego, jak w ogóle działa timer.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lis 2014, o 22:14 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 paź 2014
    Posty: 42
    Pomógł: 5

    Ależ wcale mi o to nie chodziło :), chciałem jedynie zasugerować, żeby póki co kolega nie dostawiał nowych elementów na płytce stykowej, póki nie opanuje tego co się w samym kontrolerze dzieje.



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

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    varaderas napisał(a):
    tak jak kolego @gardziej mówisz i niestety albo stety jutro od rana dalej walka z przerwaniami, a wyjaśniłby mi ktoś jakoś w skrócie o co chodzi z tymi flagami ?(...)

    Flagi traktuj jak zwykłe zmienne, bo to są zwykłe zmienne, tylko że nazwa "flaga" wzięła się od celu stosowania tej zmiennej (jej funkcjonalności). Mianowicie taka zmienia powiadamia część sterującą programem/algorytmem (moduł konfiguracyjno-sterujący, nie wiem jak to nazwać) jaki jest dany stan programu i w oparciu o wartość tej zmiennej jakaś instrukcja sterowania programem jest wykonywana, lub nie (w Twoim przypadku, albo wykonywane jest przerwanie, albo nie - w oparciu czy nastąpiła odpowiednia ilość "tyknięć" zmiennej). Flagę możesz porównać do takiego semafora kolejowego, który przyjmuje dwie wartości i w zależności od tego czy jest światło czerwone czy zielone steruje ruchem kolejowym (żeby nie nastąpiła kolizja dwóch pociągów). Sorry, za takie łopatologiczne tłumaczenie.

    Pozdrawiam! j23 Jarek


    Autor postu otrzymał pochwałę

    _________________
    "O sygnałach bez całek" Czesław Frąc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2014, o 00:57 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 29 sty 2012
    Posty: 777
    Lokalizacja: Karpicko k. Wolsztyna
    Pomógł: 197

    Przeanalizuj sobie poniższe proste programiki.
    Użyłem w nich przerwania od Timera2 i flag do migania dwoma diodami

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


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


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2014, o 09:35 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Dziękuję wam Panowie z całego serca ! Zaraz biorę się dalej za BB i poraz kolejny oglądanie poradnika i analizę powyższych kodów.
    Przykład z pociągiem jest świetny, już teraz wiem co to jest ta flaga i inaczej na to mogę patrzeć analizując np. czyjeś kody.
    Czas do nauki, jak coś będę pisał, pozdrawiam wszystkich ! ;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 22 lis 2014, o 20:58 
    Offline
    Użytkownik

    Dołączył(a): 15 cze 2013
    Posty: 599
    Lokalizacja: Lubin
    Zbananowany użytkownik

    Pomógł: 35

    Można też dołożyć układ czasu rzeczywistego RTC np. PCF8583 i sprawdzać czas na nim.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2014, o 00:52 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Panowie podpowiecie jak zrobić by ustawić ta diodę z powyższego programu od kolegi jacekk232 by świeciła np. przez 2 minuty a potem się wyłączyła na stałe?
    Męczę się z tym cały dzień i normalnie oczy już wypływają i nie mogę tego zrobić za cholewkę..



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2014, o 01:30 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 paź 2014
    Posty: 42
    Pomógł: 5

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


    Z przykładu, za każdym razem gdy jest przerwanie, czyli mija 10ms, ustawiamy flaga1 = 1, w pętli głównej gdy flaga1 = 1 zwiększamy licznik1, gdy licznik1 ma wartość 100 to mija jedna sekunda i wtedy zwiększamy zmienną sekundy, gdy sekundy = 120 wyłączamy diodę (minęły dwie minuty). Mam nadzieję, że pomogłem, jak coś to pytaj.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2014, o 01:40 
    Offline
    Użytkownik

    Dołączył(a): 24 paź 2014
    Posty: 67
    Pomógł: 0

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    Bo początkowo widziałem to tak aby w kodzie w fragmencie :
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    potraktować tą 100 jako jakąś zmienną np.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    a wartość tej pomocniczej zadwać za pomocą przycisku i wyświetlać na lcd da się tak to zrobić? Już kolego gardziej patrze i analizuję Twój kod :)

    ------------------------ [ Dodano po: 21 minutach ]

    Albo na podobnej zasadzie jak zrobić żeby te sekundy móc zadawać za pomoca switch i wyswietlac na lcd
    jak robię że liczbę sekund zastępuję np. zmienną "a" i:

    if (KEY_DOWN)
    {
    a=a+10 ;
    }
    to na wyświetlaczu te sekundy inkrementują mi się w pętli co 10



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2014, o 12:06 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 10 paź 2014
    Posty: 42
    Pomógł: 5

    Możesz potraktować to tak, tylko że pamiętaj, że mamy licznik1 uint8_t, czyli może przyjmować zakres od 0 do 255, więc jeśli będziesz chciał na tej podstawie wyłapać dłuższy czas niż 255*10ms, to licznik1 będzie za mały. Dlatego też wprowadziłem sekundę.

    Możesz też wyświetlać dowolną zmienną na LCD, zobacz w BB rozdział o wyświetlaczu LCD, biblioteka Pana Mirka jest dosyć prosta w użytkowaniu, musisz ją zainkludować i w prosty sposób za pomocą funkcji "lcd_int" możesz umieszczać je na wyświetlaczu. Pamiętaj przy KEY_DOWN, żeby obsłużyć jeszcze drgania styków klawiszy.



    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: 29 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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