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 22 lip 2025, o 18:26


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 
    Autor Wiadomość
    PostNapisane: 2 kwi 2017, o 15:30 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    Cześć. Chcę piszczeć buzerem co jedną sekundę. Procesor taktowany 8MHz. Atmega 32 w zestawie ATB.
    Uruchomiłem sobie Timer0.
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Ustawiłem sobie timer jak w książce. Jak dobrze rozumiem z książki licznik będzie liczył od 0-256 dwieście razu w ciągu jednej sekundy. Teraz nie wiem jak to zrobić , jak napisać procedurę przerwania, aby po przepełnieniu buzer zapiszczał.
    Podłączyłem buzer programowo:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 15:44 
    Offline
    Użytkownik

    Dołączył(a): 26 lut 2014
    Posty: 288
    Lokalizacja: Gdańsk
    Pomógł: 13

    Można np. W przerwaniu inkrementować zmienną, później czy to w pętli głównej czy w przerwaniu sprawdzać czy osiągnęła zamierzone wartość, jeśli tak, to pisnąć. Wyłączenie analogicznie. Na koniec wyzerowac zmienną.
    Innym sposobem to można timer ustawić tak, by generował przerwanie co 1 sekundę...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 15:47 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    oo dziękuję za wskazówki. Już się zabieram za kombinowanie. Super,że napisałeś to jako "wędkę", a nie jako "rybę" :)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 16:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    hejka,
    wojciechgorzolka napisał(a):
            ISR(TIMER0_COMP_vect)
            {
                    static uint8_t piszcz = 1;
            }

    jeżeli chcesz wykorzystać tę zmienną jako flagę w pętli głównej,
    to raczej zdefiniuj ją jako globalną volatile a nie static w przerwaniu. :)
    static w przerwaniu to raczej jako liczniki z których korzystasz tylko w przerwaniu. :) (takie masło mi wyszło trochę :) )



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 16:08 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    dzięki Darku ;) już zmieniam i bawię się dalej. Ale dobrze to rozumiem, że będzie mi w tym timerze zliczać 200 razy na sekundę?

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 16:53 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sty 2013
    Posty: 1760
    Pomógł: 196

    Witam
    W podpisie masz ikonkę BB - zobacz jak w kodzie dot.pomiaru temperatury kol.Mirek liczy sekundy; ...no to co, ze inny TIMER ;) - to tylko kwestia rejestrów.

    Pozdr.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 17:34 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    coś nie działa poprawnie. Buzer piszczy lekko przyciszony, trochę trzeszczy, więc wnioskuję,że piszczy z przerwami,ale na pewno nie z częstotliwością co 1 sekundę.
    A tak to mam ustawione i napisane w pętli głównej:
    Definicje pinu buzera:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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



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


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



    Czy mam tutaj jakiś błąd?

    Dodam,że testuję to na ATB.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 18:13 
    Offline
    Użytkownik

    Dołączył(a): 26 lut 2014
    Posty: 288
    Lokalizacja: Gdańsk
    Pomógł: 13

    bardziej chodziło mi mniej więcej o 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.


    Pisane z głowy, nie testowane

    Możesz też zajrzeć do rozdziału o wyświetlaczu led (7seg) tam jest coś podobnego



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

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Wojtku,
    Co sekundę ustawiasz flagę dla buzzeta.
    Pytanie - gdzie i w jakim czasie ją zerujesz. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 18:18 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

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


    z tym <210 , to jest literówka? nie powinno być 201?

    jestem początkujący, więc tylko dopytuję;)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 18:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 sty 2013
    Posty: 1760
    Pomógł: 196

    Witam
    Może TIMSK |= (1<<OCIE0)?

    Pozdr.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 18:32 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    przestawione, ale działa identycznie. przyjrzyj się.
    43kuku 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.


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

    zerowanie w przerwaniu będzie się zawsze zerowało zanim dojdzie do ~200. nawet mając wartość 1. :(

    ------------------------ [ Dodano po: 14 minutach ]

    a... to raczej do kolegi 43kuku. :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 18:49 
    Offline
    Użytkownik

    Dołączył(a): 26 lut 2014
    Posty: 288
    Lokalizacja: Gdańsk
    Pomógł: 13

    Ehh faktycznie, 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.


    210 bo to jest sygnał długości 1/20 sekundy, gdyby było 201 to byłoby 10x krócej.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 19:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    a... Wojtek,
    Popraw sobie te CS'y na CS00 i CS02.
    a nie cs01 02

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

    Obrazek



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 19:41 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    :)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 22:13 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

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

    ułatwia życie . :D



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 2 kwi 2017, o 22:33 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ok, pozamieniam w wolnej chwili ;)



    Już wszystko działa. Dziękuję Wam za pomoc :)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 kwi 2017, o 08:39 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    Jak już pozmieniasz i będzie nadal działało ti wstaw tu kod dla potomnych. :)
    Głownie ustawienia rejestrów i przerwanie. Albo całość najlepiej.
    Pozdrawiam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 3 kwi 2017, o 10:47 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ok, nie ma problemu :)

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2017, o 18:59 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    dwie diody migają co sekundę. Chcę aby trzecia migała dwa razy szybciej, co robię źle?
    Trzecia dioda jest pod ostatnim moim komentarzem w kodzie. Proszę o podpowiedź:)

    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.

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2017, o 19:14 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

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

    :) // mniej wicej bo przy wartości 99 i 198 .



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2017, o 19:15 
    Offline
    Użytkownik

    Dołączył(a): 28 maja 2016
    Posty: 469
    Lokalizacja: Katowice
    Pomógł: 1

    ok, nie dało by się to zrobić bez modulo?

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

    np tak. chociaż tak też nie działa ;)
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

    chodzi mi o to,że :

    Jeśli zliczy do 100, to ma wystawić flagę, a gdy flaga jest wystawiona, to ma zmienić stan "diodziszona" na przeciwny hehe :twisted:

    _________________
    Nikt nie mówił,że będzie łatwo...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 kwi 2017, o 19:24 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 01 lis 2015
    Posty: 1448
    Lokalizacja: okolice Warszawa
    Pomógł: 149

    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.


    ------------------------ [ Dodano po: 4 minutach ]

    zmieniłem wartości licznika na : od 1 do 200,
    a nie jak wcześniej od 0 do 199.
    łatwiej zastosować %.
    reszta z dzielenia przez 100. :)
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 23 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

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