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



Teraz jest 20 gru 2025, o 01:57


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 ]
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 ]
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: 27445
Lokalizacja: Szczecin
Pomógł: 1045

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 ]
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: 27445
Lokalizacja: Szczecin
Pomógł: 1045

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 1 gość


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