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 w 2025? 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 17 maja 2025, o 04:31


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
    Autor Wiadomość
    PostNapisane: 5 mar 2015, o 17:31 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    Witam Was wszystkich serdecznie. To mój pierwszy post na tym forum. Od niedawna zaczołem przygodę z programowaniem mikroprocesorów.

    Posiadam procesor Atmega8, podłączyłem wyświetlacz lcd 2x16 i kilka przycisków. Chciałem zrobić odmierzanie czasu za pomocą przycisków i podłączonego już wyświetlacza. Oczywiście pojawiło się parę problemów, mianowicie od kilku dni męczę się z pętla która ma odliczać sekundy i minuty. Ogólne założenie jest takie:

    Przycisk 1, zwiększamy minuty.
    Przycisk 2, zmniejszamy minuty.
    Przycisk 3, enter. (zaczynamy odliczać aż do 0).


    Częściowo się to udało, ale pętla się kończy i jakoś nie mam pomysłu na to żeby skończyła się dopiero przy końcu czasu. Kombinuję ale nie wychodzi mi to, spowodowane to jest raczej brakiem styczności z takimi pętlami. Nie posiadam BB ale już nie długo się zaopatrzę w niego. Drugi problem jaki posiadam, którego nie mam pojęcia jak rozwiązać to jest samo wyświetlanie zmiennych s(sekund) i m(minut). Mianowicie podczas ustawienia:

    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ę otrzymać takiej struktury: 00:00 podczas wyświetlanie cyfr pojedynczych od 0 do 9 to jeszcze jak Cie mogę ale jak wyświetlam liczby >10 to sprawa się komplikuje bo wszystko na siebie nachodzi.

    Aktualnie efekt wygląda tak, dodawanie i odejmowanie minut jest ok. Natomiast klikam enter, odliczam minutę i stop :(
    A i program póki co robię na zwykłych delayach, właśnie żeby pierw dobrze zapoznać się z samym językiem C.

    Wrzucam swój cały 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.


    Nie piszę do was z pierwszym lepszym problemem, bo zazwyczaj staram się rozwiązać to sam ale tu brak mi wiedzy na ten temat i na ten moment zatrzymałem się w miejscu. Bardzo dziękuję za wyrozumiałość i wszelkie wskazówki.

    Pozdrawiam :mrgreen:



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 mar 2015, o 17:57 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27396
    Lokalizacja: Szczecin
    Pomógł: 1043

    Ja tylko dopytam bo nic o tym nie wspomniałeś ... posiadasz Bluebooka ? bo jeśli tak to masz tam wszystko o co pytasz opisane i dużo więcej zresztą ....

    a jeśli nie posiadasz - to wyświetlaj nieznaczące zero przed cyframi, a przed liczbami nie wyświetlaj tego zera ...

    co zaś się tyczy obsługi klawiszy rzuć sobie okiem tutaj:
    http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 mar 2015, o 18:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 07 kwi 2013
    Posty: 418
    Lokalizacja: Rzeszów
    Pomógł: 102

    Majster_90 napisał(a):
    Nie mogę otrzymać takiej struktury: 00:00 podczas wyświetlanie cyfr pojedynczych od 0 do 9 to jeszcze jak Cie mogę ale jak wyświetlam liczby >10 to sprawa się komplikuje bo wszystko na siebie nachodzi.


    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: 5 mar 2015, o 18:22 
    Offline
    Użytkownik

    Dołączył(a): 21 sie 2013
    Posty: 43
    Lokalizacja: Siekierczyn
    Pomógł: 0

    Witam
    Skoro jesteśmy przy tym temacie. Wykonując ćwiczenia z Bluebooka na wyświetlaczu LCD , na sekundniku po jakimś czasie pojawia się trzecie zero.
    Sekundnik dalej wyświetla prawidłowo sekundy na dwóch segmentach a na tym trzecim jest zero. Czym to jest spowodowane?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 mar 2015, o 19:47 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    Jeżeli chodzi o BlueBooka to niestety nie posiadam, ale nie długo się zaopatrzę w tą książkę :) Artykuł o klawiszach przeczytałem, no naprawdę efekt porażający. Dużo się dowiedziałem. Tylko nie znalazłem odpowiedzi na mój problem, może źle go przedstawiłem. Problem mam z samym algorytmem, jak po ustawiać zmienne żeby doliczyły czas do końca. Przypomnę założenie projektu, maksymalnie można ustawić 60min, jeden klawisz dodaje 1 min drugi 1min odejmuje (to mi działa). Wzbogacę to tylko o poradnik podany przez Pana Mirka. Wciskając przycisk Enter, odmierzamy czas od nastawionej wartości i zmierzamy do 0, na końcu ewentualna sygnalizacja dioda LED o zakończeniu odliczania. Na wyświetlaczu wyświetla się zmienna m- minuty i s - sekundy.

    Kod jaki sam napisałem to :

    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 tego co napisałem efekt jest następujący:

    Ustawiam np. 09:00 min klikam Enter i odmierza czas do 08:00 min. Nie potrafię napisać algorytmu samego jak odmierzyć czas do czasu 00:00.

    Mam nadzieję, że przedstawiłem sprawę jasno :D
    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 17:14 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    Witam Ponownie. Zamiast robić swój projekt na delayach postanowiłem uruchomić sprzętowy Timer0. Ustawiłem generowanie impulsu co 1 sekundę. Ustawiłem sobie pętle tak, żeby naliczało mi sekundy i minuty. Po paru próbach udało mi się uzyskać efekt i jestem bardzo zadowolony z uzyskanego efektu :D Aby ulepszyć swój projekt, potrzebuję dodania przycisku, bo póki co mam po prostu zegarek.

    Próba dodania przycisku okazała się trochę kłopotliwa. Mianowicie, dodałem przycisk zaraz za wektorem ISR, przycisk działa ale tylko jak go trzymam.

    Czy to spowodowane drganiami styków, czy np w wektor przerwania nie należy dodawać przycisków??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 21:07 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27396
    Lokalizacja: Szczecin
    Pomógł: 1043

    Majster_90 napisał(a):
    czy np w wektor przerwania nie należy dodawać przycisków??

    kolega jest na forum literackim gdzie pisze się opowiadania? beletrystykę? ;) czy na forum programistycznym gdzie przedstawia się kody albo na elektronicznym gdzie przedstawia się schematy ?

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 21:18 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    Wstawiam kod, przepraszam że odrazu go nie wrzuciłem ??

    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.


    Nie jestem pewien czy można tak zadeklarować przycisk, oraz czy tak można wyświetlać wyniki operacji. Proszę o sprawdzenie kodu. Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 21:22 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27396
    Lokalizacja: Szczecin
    Pomógł: 1043

    w przerwaniu delay??? w przerwaniu obsługa LCD ??? o ile to jest w przerwaniu bo patrząc na te nawiasy to można oczopląsu dostać ... Zapamiętaj w żadnym przerwaniu NIGDY delaya i NIGDY obsługi LCD

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 21:41 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    Tak myślałem. Więc skoro dajmy na to zmienna jest w przerwaniu i się zmienia tak. To jak ja wyświetlić jako bieżącą wartość ?? I jak z tym klawiszem można to rozwiązać ??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 21:46 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1034
    Lokalizacja: Trójmiasto
    Pomógł: 190

    Przy tak zbudowanej obsłudze przerwania samo przerwanie będzie się prawdopodobnie dłużej wykonywać niż licznik będzie je wywoływał - z tego co z kodu wynika to licznik wywołuje przerwanie co 1/4s a w przerwaniu masz delaya od przycisku oraz obsługę wyświetlacza LCD który niestety demonem prędkości nie jest więc sumarycznie całe przerwanie może się wykonywać dłużej niż 1/4s...
    W samym przerwaniu powinno być tylko ładowanie wartości licznika i modyfikacja zmiennych (oczywiście owe zmienne muszą być opatrzone volatile) wysyłanie na wyświetlacz oraz obsługa przycisków w pętli głównej programu i powinno być ok.



    Ostatnio edytowano 6 mar 2015, o 21:52 przez xentis, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 mar 2015, o 21:52 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    No dobrze dziękuję za wskazówkę, postaram się poprawić kod i sprawdzę czy będzie to działać. O efektach dam znać :) pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 mar 2015, o 14:51 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    No i mieliście rację, nie wiem czemu wcześniej obsługi klawiszy jak i obsługi LCD nie wstawiłem do głównej pętli. Faktycznie działa. Wstawiam swój 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.


    Jeżeli chodzi o wektor przerwania to wygląda to tak:

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


    I teraz tak, rozumiem obsługę klawiszy. Rozumiem jak działają przerwania, no może nie jest to wiedza w 100% ale już rozeznanie posiadam. Nie rozumiem jak wyciągnąć wartość zmiennej, która znajduję się w wektorze przerwania. Póki co chciałem samą zmienna s która będzie zawierać sekundy. Wpadłem na taki pomysł, dodałem zmienna i po naciśnięciu przycisku KEY3 wartość zmiennej i zmienia się na wartość 10. W wektorze dodałem warunek, jeśli i będzie równe 10 to ustawiamy s na 60 i dekrementujemy. No ale nie działa to zbytnio. No nie mam pojęcia jak to ogarnąć, czy to trzeba zastosować flagi?? jakoś sprawdzać stan klawiszy?? No nie wiem, poproszę o wskazówki.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 9 mar 2015, o 17:42 
    Offline
    Nowy

    Dołączył(a): 05 mar 2015
    Posty: 20
    Pomógł: 0

    No dobrze. postaram się zmienić podejście i uruchomić Timer w trybie CTC. Odnośnie drugiej sprawy no to wydaję się logiczne zadeklarowanie jednej liczby, również postaram się wprowadzić to w "życie".

    Nie wiem czy dobrze rozumiem do końca te odmierzanie czasu. Wektor przerwania traktowałem jak taki generator dający sygnał 1Hz. Po nastawieniu jakiejś dowolnej wartości chciałbym kliknąć przycisk i żeby czas wystartował. Szukam po forum, projektów żeby coś mnie olśniło ale nic nie mogę znaleźć.

    Problem polega na tym, że nawet jeśli zastosuję twoją rade, czyli użyję 1 liczby np. 32 bitowej i uruchomię timer w tryb CTC i będzie to bardziej optymalne i szybsze to ja dalej naprawdę po szczerym przeszukaniu wielu ston i projektów nie rozumiem na jakiej zasadzie "wydobyć" tą zmienną z przerwania, a raczej żeby ja uruchomić po kliknięciu przycisku.

    Zanim napisałem kod podany wyżej, próbowałem zrobić taki zegareczek i to mi działało tylko od zera. A ja chcę doprowadzić do takiego jakby nastawienia zmiennej na określoną wartość i odpalenia jej.

    Oczywiście dziękuję Ci za radę, naprawdę jestem wdzięczny i naprawdę zastosuję je ale jakbyś jeszcze mógł mi tą jedną rzecz wyjaśnić.

    Chyba, że należy iść zupełnie inna drogą.
    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: 14 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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