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



Teraz jest 27 kwi 2024, o 21:17


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 21 mar 2013, o 20:42 
Offline
Użytkownik

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

Witam forumowicze :).
Kupiłem ostatnio książke Pana Mirka i zabrałem się za pisanie przerwań. No i przegrałem batalię :<. Chciałem po prostu, aby dioda świeciła 200Hz na sekunde. Mam AT-Mege8, taktowanie zew. 12MHz.
kod który napisałem, choć nie bardzo wiem o co biega bo już zbaraniałem totalnie.. Proszę o pomoc :)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Kod umieszczamy przy pomocy [syntax=c] - Zielony J.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 20:48 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Zapomniałeś o instrukcji sei() która odblokowuje przerwania ;) musisz "dać" ją w ciało int main()

jeszcze jedno, rozumiem że chcesz aby dioda led mrugała z częstotliwością 20Hz to musisz zamienić PORTC |= (1<<LED2); na
PORTC ^= (1<<LED2); dzięki temu będziesz zmieniał cyklicznie stan pinu 0 lub 1.


Autor postu otrzymał pochwałę


Ostatnio edytowano 21 mar 2013, o 20:51 przez MichalXY, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 20:50 
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

Jak chcesz zmienić stan diody na przeciwny to używaj ^= a nie |=, a za konfiguracją timera umieść pustą pętle nieskończoną.
PS. Gdzie masz tego LEDa na porcie C czy B?


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 20:57 
Offline
Użytkownik

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

Jak już wrzuciłem kod to zauważyłem, że porty C i B pomyliłem, ale to mała pomyłka :P.

Dzieki za pomoc :). Dioda miga jak szalona :P.
PS: Mogę uzyskać, żeby dioda migała np raz na sekunde ? Jeśli tak,to jaki preskaler mam dobrać do tego zegara ? :)

------------------------ [ Dodano po: 8 minutach ]

Dobra, już pobawiłem się trochę OCR2 i doszedłem co i jak :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 21:08 
Offline
Nowy

Dołączył(a): 21 mar 2013
Posty: 2
Pomógł: 0

Zastosować 16 bitowy timer/counter1. Preskaler 1024, wartość OCR1A~ 12000.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 21:10 
Offline
Użytkownik

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

Jak wy tak sprawnie liczycie jaki preskaler i jaka wartość OCRx dobrać, aby uzyskać odpowiednią częstotliwość ?



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

Dołączył(a): 23 kwi 2012
Posty: 108
Lokalizacja: Giżycko
Pomógł: 6

Scs19 napisał(a):
Jak już wrzuciłem kod to zauważyłem, że porty C i B pomyliłem, ale to mała pomyłka :P.

Dzieki za pomoc :). Dioda miga jak szalona :P.
PS: Mogę uzyskać, żeby dioda migała np raz na sekunde ? Jeśli tak,to jaki preskaler mam dobrać do tego zegara ? :)


Możesz też dodać jeszcze jedną zmienną która będzie zliczała.
Czyli np. przy 200Hz to co 5ms masz to dodaj zmienną która będzie się zwiększała co 5ms i w warunku sprawdzaj czy minęła sekunda i możesz zapalać diodę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 21:15 
Offline
Nowy

Dołączył(a): 21 mar 2013
Posty: 2
Pomógł: 0

Kwarc 12MHz=12.000.000Hz, preskaler 1024, więc 12MHz/1024~11718,75 i to wszystko ;)



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

Dołączył(a): 15 lut 2012
Posty: 344
Lokalizacja: Bydgoszcz
Pomógł: 11

Swego czasu nasz kolega z forum Pachu80 popełnił program do liczenia wartości dla preskalerów
topic1737.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 21:22 
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

Jeszcze wartość OCRx należy uwzględnić:
f = F_CPU / preskaler / OCRx

OCRx = F_CPU / preskaler / f

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2013, o 22:17 
Offline
Użytkownik
Avatar użytkownika

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

Pomógł: 21

Albo wykorzystaj Watchdoga w trybie przerwania - fajna sprawa do powolnych timerów :)

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



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

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