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



Teraz jest 16 lis 2024, o 15:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 31 gru 2012, o 13:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Witam.

Boli mnie problem generowania dźwięku za pomocą buzzera piezo.
Nie to że samo generowanie ale sposób.
Aktualnie gdy odgrywa dźwięk to procesor "wiekami nic nie robi" (_delay_loop_2()) niby szybka funkcja ale za to może długo przetrzymywać w pętli for.

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

I tak myślę sobie, że zgodnie z regułą nie blokowania programu można by do tego wykorzystać timer, niestety genialne pomysły mnie omijają. Liczę na wasze podpowiedzi ostatecznie gotowe rozwiązania jak by to ugryźć.
Na dodatek google mi od paru dni nie sprzyja, wiec dlatego idę teraz tą drogą (forum);



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2012, o 14:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Tak od 0,5s do 3s, częstotliwości jeszcze nie znam. Dobieram na zasadzie prób i błędów ale tak do około 10kHz (możliwe ze mniej)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2012, o 14:53 
Offline
Moderator
Avatar użytkownika

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

Przede wszystkim wyrzuć z kodu od razu ten nieszczęsny :(

#define F_CPU 1000000

ok ? to masakra - no i kod źródłowy dawaj w znacznikach [ syntax = c ] zamiast code, zaraz ci poprawię pierwszy post to wyedytuj sobie i zobacz jak się to robi ok?

_________________
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: 31 gru 2012, o 15:16 
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

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

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2012, o 15:49 
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

No nie wiem. Za używanie Timera 1 do piskania można trafić do LOCHÓW i samemu potem jęczeć o pigułki :?
Funkcja beep niestety również odblokowuje przerwania. Co przy dużej częstotliwości obciąży procesor. Polecam beep_start i beep_stop, ale wtedy w programie jakoś trzeba to wkomponować w pętlę główną z użyciem timera programowego.

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 gru 2012, o 16:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

@Krauser PD4 i PD5 oraz rejestry OCR1A i OCR1B zajęte, wiec odpada twój kod.

@Antystatyczny przetestuje twój kod ale jutro dam znać bo dzisiaj to już szykuje się do wyjścia...

@Mirekk36 jeszcze troszkę i ta nieszczęsna definicja (i funkcje ją wykorzystujące) zniknie z mojej świadomości jej istnienia...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 17:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

Chłopaki udało mi się "nadziergać" kod do obsługi buzzera.

Podobno trafie w ciemne lochy za wykorzystanie aż dwóch timerów sprzętowych do obsługi "piskacza".
Nie jest on idealny bo potrafi odegrać tylko około 100 - 150 częstotliwości z przedziału od 15625Hz
do 61Hz (przy taktowaniu uC 1MHz) ale to wystarczy do piskania przy klawiaturze lub jakiegoś alertu, taki miałem cel.

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


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


Swój cel osiągnąłem może komuś przyda się takie podejście.
PS. Dzięki koledze Antystatyczny kod rozrósł się w takie coś, dał korzenie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 18:33 
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

Myślę, że można to znacznie ulepszyć. Wykorzystać pin z funkcją alternatywną OC2 i nie używać przerwania ISR(TIMER2_COMP_vect) do zmiany stanu jednego wyprowadzenia. Po to takie tryby pracy zostały wymyślone. Czy do generowania sygnału PWM też angażowałbyś przerwania skoro to wcale nie jest wymagane (ale oczywiście możliwe zwłaszcza jak wszystkie wyjścia OCx są już zajęte) ?


Autor postu otrzymał pochwałę

_________________
Dragonus Cracovus: Biomagia



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 sty 2013, o 18:46 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 gru 2012
Posty: 72
Pomógł: 6

OC2 (PD7) wolne. Widzisz zaczynam i nie wiem wszystkiego ale staram się... Tak sądziłem, że na pewno można inaczej.

Dodano:
Po zwerbowaniu informacji dotarłem do takiej co by wyjście OC2 sprzętowo wykorzystać.
Zmiany zostały wprowadzone w tych miejscach:
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.

Oraz zostało wywalone przerwanie TIMER2_COMP_vect
Działa dożo lepiej. Na migającej diodzie nawet widać (mniej ją "muli").
Czy się da to jeszcze uszczuplić?



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

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