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



Teraz jest 31 gru 2025, o 19:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 22 paź 2015, o 01:35 
Offline
Nowy

Dołączył(a): 13 mar 2014
Posty: 6
Pomógł: 0

Witam, mam pytanie bo się męczę już trochę czasu i zniechęcam. Jak najlepiej obsłużyć przetwornik piezo żeby mieć na nim zakres kilku herców do tych 16kHz.

ATmega168pa + 16MHz kwarc, kondensatory wszystkie ok.

Przetwornik piezo podpięty pod PD5, druga strona do GND.

Gdy po prostu do pętli while wrzucę:

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


Otrzymuję na przetworniku 1.6 MHz, jak tylko załączę przerwania "SEI();" na przetworniku mam tylko 76kHz.

Kolejna sprawa jeżeli chcę przez procedurkę sterować tym wyjściem robię tak:

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


i zamiast bezpośrednio sterować portem wywołuję tę procedurę, mam jeszcze mniejsze częstotliwości. Po co to piszę, gubię się w tym jakie operacje ile cykli zajmują, może ja coś robię źle? A zawsze wydawało mi się, że preprocesor przed kompilacją zamienia kod na najprostszy więc pozbywa się wywołania przez procedurę co za tym idzie nie ma to znaczenia w jaki sposób steruję portem.

Może mi ktoś coś mądrego podpowie. Nie jest to żadne zadanie na szybko do szkoły tylko hobbystyczne dłubaniny amatora, który się chce czegoś nauczyć. A już się trochę zniechęca. Dziękuję za jakąkolwiek mądrą radę. Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2015, o 08:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

manop1 napisał(a):
A zawsze wydawało mi się, że preprocesor przed kompilacją zamienia kod na najprostszy więc pozbywa się wywołania przez procedurę

Hehe, kod najprostszy w sensie zrozumiały dla procesora czyli na konkretne rozkazy asmeblera, co do pozbywania się skoków przy wywołaniu procedury to oczywiście zrobi to jak oznaczysz procedurę jako "inline" chociaż i w tym przypadku kompilator może odmówić wmiksowania procedury w kod...

Odnoście Twojego głównego pytania, to chyba zrozumiałe jest, że po włączeniu przerwań pętla główna drastycznie zwolni - w końcu tak działają przerwania czyli przerywają pracę głównego programu, aby wykonać inny fragment (który staje się priorytetowy po każdym wywołaniu tych przerwań). Nie wiem jakie chcesz uzyskać efekt końcowy dla piezo (kilka konkretnych tonów, forma syreny, czy może ustawiana "dowolna" częstotliwość z podanego zakresu), ale wydaje mi się, że najlepszym dla Ciebie rozwiązaniem będzie główną część grającą umieścić w przerwaniach, a z pętli zadawać tylko parametry. Wywołanie przerwania ustaw na wartość zbliżoną (minimum) do maksymalnej częstotliwości jaką chcesz uzyskać x 2 czyli w Twoim przypadku 16kHz x 2 = 32kHz.
I czekamy na pierwsze próbki programu... :)


Autor postu otrzymał pochwałę

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2015, o 23:29 
Offline
Nowy

Dołączył(a): 13 mar 2014
Posty: 6
Pomógł: 0

Ok dzięki, z tym inline to cenna uwaga, zapomniałem o nim, a było w książce było.

Po prostu mnie dziwiło, że włączając przerwania przez SEI nawet jak nic nie wykonuję w przerwaniu, tak bardzo zmniejsza się ta częstotliwość. Teraz kolejne moje pytanie, mam timer1 w trybie CTC, czy eleganckie jest w działaniu programu zmienianie OCR1A czyli do ilu ma liczyć aby wywołać przerwanie czy też lepiej jakąś zmienną i pętelką choćby w przerwaniu? Bo działać działa, ale nie wiem czy tak można :) dzięki.



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

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