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 9 lip 2025, o 14:02


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
    Autor Wiadomość
    PostNapisane: 24 wrz 2013, o 20:13 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    Pomógł: 0

    Witam.
    Znowu chciałem powrócić do programowania avr ze względu na sporą ilość wolnego czasu. Kiedy programowałem, przestałem i zapomniałem praktycznie wszystko. Może mi ktoś powiedzieć, dlaczego uparta dioda świeci non stop, a nie co sekunde jak to było w żałożeniu ? ;)

    ATmega8 , kwarc zew. 16 MHz

    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.



    Ostatnio edytowano 24 wrz 2013, o 22:19 przez Scs19, łącznie edytowano 2 razy

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 wrz 2013, o 20:17 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    TCCR1A nie posiada bitu o nazwie WGM12.

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 wrz 2013, o 20:30 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    Pomógł: 0

    Przeszukałem note aplikacyjną i nie mogę znaleźć... Skoro TCCR1A nie posiada WGM12, to jak ustawić Timer1 w CTC ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 wrz 2013, o 20:35 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 05 sie 2013
    Posty: 1154
    Lokalizacja: Lublin / Kraków
    Pomógł: 72

    WGM12 jest w TCCR1B



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 wrz 2013, o 20:37 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    Ja to tam nie wiem jaki masz procesor, bo podać nie podałeś, ale taka M32 ma w specyfikacji zaraz pod tabelką trybów rozpiskę rejestru TCCR1B ;)

    Obrazek

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 wrz 2013, o 22:17 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    Pomógł: 0

    Dobra, coś tam zaczęło migać. Nie kumam jednak, dlaczego dioda zapali się i zgaśnie na amen.
    Druga sprawa, to jestem ciekawy, jaki preskaler dobrać i jaki OCRx, żeby dioda świeciła faktycznie przez 1s.

    Procesor ATmega8, kwarc zewnętrzny 16MHz



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 wrz 2013, o 22:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    Prescaler i OCRx dobrane są prawidłowo, szkoda, że TCCR1A nie zawiera bitów CS1x ;)

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2013, o 08:12 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    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.


    Kod po poprawkach.
    @braney, a od czego jest bit CS1x ? W książce Mirka Kardasia, w temacie o multiplekasowym wyś. LED w przykładzie nie ma tego bitu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2013, o 08:32 
    Offline
    Moderator
    Avatar użytkownika

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

    Scs19 napisał(a):
    @braney, a od czego jest bit CS1x ? W książce Mirka Kardasia, w temacie o multiplekasowym wyś. LED w przykładzie nie ma tego bitu


    Kolego wiele razy w książce używam skrótów typu NZWA_BITU_x, czyli np. CSx

    toż to nie jest żaden konkretny fusebit, i wyjaśniam w książce, że np jak masz bity preskalera CS12 CS11 CS10 to Symbolicznie można powiedzieć, że chodzi o bity CS1x gdzie x oznacza 2,1,0 Albo jedynka oznacza że chodzi o Timer1. Ale gdy nie chce się używać numeru timera to używa się też skrótów CSXn gdzie np X to numer timera a n to numer bitu. Dlatego gdy barnej napisał ci

    barney napisał(a):
    że TCCR1A nie zawiera bitów CS1x


    to miał na myśli tylko to żebyś właśnie sprawdził sobie w nocie że w rejestrze TCCR1A nie ma bitów CS12, CS11, CS10

    ale po co tyle pisać skoro łatwiej używać skrótów: CS1x .... i tak się robi. Musisz to po prostu zrozumieć.

    _________________
    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: 25 wrz 2013, o 08:41 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    Pomógł: 0

    No ok, to już rozumiem. Tyle, w TCCR1B (zmieniłem z TCCR1A na TCCR1B) są bity CS12, CS11, CS10 :).



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2013, o 18:40 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    Pomógł: 0

    Dalej coś nie mryga :<



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2013, o 19:00 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    Scs19 napisał(a):
    OCR1B  |= 1000;                                  // podzial przez
    TIMSK  |= (1<<OCIE1B);                   //zezowlenie

    Tryb CTC wykorzystuje rejestr OCR1A jako maksimum (do tego odpowiednie przerwanie). Zajrzyj w końcu do tej specyfikacji, bo widzę, że jak ktoś rzuci hasło B to wszystkie A zamieniają się w B, a tak nie jest. Nikt nie mówił, że wszystkie rejestry masz źle wybrane tylko, że dla Atmegi 8 bity WGM12 i CS1x są w rejestrze TCCR1B.

    OCR1B i odpowiednie przerwanie możesz dodatkowo wykorzystać, ale musi być spełniony warunek OCR1B <= OCR1A.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2013, o 21:23 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    Pomógł: 0

    Kompletnie skołowaciałem..

    EDIT: Ruszyło :). Wielkie dzięki za pomoc i zainteresowanie.

    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.


    Poprawny kod.
    Pytanie jeszcze odnośnie preskalera i OCRx. ATm8, kwarc zew. 16MHz. Jaki powinien być preskaler i OCRx żeby dioda świeciła co sekunde ?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2013, o 21:57 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    W MkAvrCalculator w zakładce narzędzia masz AVR Timer Calculator. Na piechotę oczywiście też wyliczysz, OCRxy = F_CPU/prescaler/f -1 -> OCR1A = 16000000/1024/1 -1 = 15624. Należy sprawdzić różne wartości prescalera (pośród dostępnych wybieranych za pomocą bitów CSxy) i wybrać wartość mieszczącą się w zakresie pojemności rejestru OCRxy.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 wrz 2013, o 23:10 
    Offline
    Użytkownik

    Dołączył(a): 25 lut 2013
    Posty: 28
    Pomógł: 0

    Wszystko gra i huczy :). Jeszcze raz - dzieki !



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 wrz 2013, o 08:56 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 30 kwi 2013
    Posty: 105
    Lokalizacja: Warszawa
    Pomógł: 0

    Witam wszystkich,

    Mam krótkie pytanie dotyczące ogólnie przerwań. Czy można procedury obsługi przerwań umieścić podobnie jak funkcje w innym pliku programu np pliku nagłówkowym *.h, czy procedury te muszą być raczej umieszczone w pliku main.c?

    Dzięki i pozdrawiam,

    _________________
    Mój Serwer AVR - http://msavr.besaba.com



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 wrz 2013, o 09:35 
    Offline
    Moderator
    Avatar użytkownika

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

    step_m napisał(a):
    Witam wszystkich,

    Mam krótkie pytanie dotyczące ogólnie przerwań. Czy można procedury obsługi przerwań umieścić podobnie jak funkcje w innym pliku programu np pliku nagłówkowym *.h, czy procedury te muszą być raczej umieszczone w pliku main.c?

    Dzięki i pozdrawiam,


    w pliku *.h ????

    a ty umieszczasz w ogóle funkcje w plikach *.h ? :( ..... to nie jest język C++ .... to jest C i WSZYSTKIE funkcje (poza jednym małym wyjątkiem) umieszcza się TYLKO w plikach źródłowych *.c

    a procedury obsługi przerwań podlegają tym samym zasadom i mogą być tak jak każda funkcja umieszczane w dowolnym pliku projektu

    zajrzyj proszę sobie do Bluebooka do rozdziału o multipleksowaniu LED i zobacz w jakim pliku projektu masz obsługę przerwania timera - przecież to od razu gotowa odpowiedź na twoje pytanie w tym rozdziale ;)

    _________________
    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: 27 wrz 2013, o 09:41 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 30 kwi 2013
    Posty: 105
    Lokalizacja: Warszawa
    Pomógł: 0

    Nie umieszczam funkcji w plikach .h tylko w plikach.c. W plikach .h umieszczam jedynie deklaracje tych funkcji. Po prostu nie próbowałem do tej pory umieszczać procedur obsługi przerwań w innych plikach projektu. Zawsze były one umieszczone w pliku głównym programu main.c (pod funkcją main). Mając jednakże na uwadze przejrzystość głównego pliku i funkcji programu, dla uporządkowania kodu (zwłaszcza w dużych projektach) chciałem umieścić te procedury poza plikiem main.c.

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

    Tym małym wyjątkiem są prawdopodobnie funkcje "inline"

    _________________
    Mój Serwer AVR - http://msavr.besaba.com



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

    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:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO