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



Teraz jest 21 lut 2026, o 07:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
 Tytuł: Prosty metronom
PostNapisane: 18 gru 2016, o 23:48 
Offline
Nowy

Dołączył(a): 29 kwi 2016
Posty: 14
Pomógł: 0

Witam!

Konstruuje metronom na ATmega328p, który będzie pokazywał uderzenia na minutę po klikaniu przyciskiem w rytm muzyki.
Chce aby działał na zasadzie przerwania od INT1.
Wymysliłem to w ten sposób że w przerwaniu będę zatrzymywał timer by pozyskać wartość odmierzonego czasu w przerwaniu od TIMER0_COMPA oraz przeliczał na uderzenia na minutę a pozniej uruchamial by odmierzal czas pomiędzy impulsami. Jednak nie mam pojęcia co jest nie tak. Po naciśnięciu przycisku pokazuje mi się wartość 196 i przy kolejnym naciskaniu nic sie nie dzieje. Ponadto gdy chcę odczytać wartość czasu na lcd widnieje 0. Czy ktoś mógłby pobieżnie rzucić okiem na kod co w nim jest nie tak?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2016, o 08:38 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

Przycisk na INT nie przejdzie, ze względu na drgania styków. Nie tędy droga. Nie potrzebujesz też zatrzymywać timera. Po za tym, nie zatrzymujesz go, tylko wyłączasz możliwość zgłaszania przerwań. Zmienne f i czas nie muszą być volatile. Zmienna f w ogóle jest mało potrzebna, a na pewno nie musi być zmienną globalną. Z jaką dokładnością chcesz mierzyć tę częstotliwość?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2016, o 11:11 
Offline
Nowy

Dołączył(a): 29 kwi 2016
Posty: 14
Pomógł: 0

Drgania styków eliminuje sprzętowo. Chciałbym aby to działało z dokładnością od 40 uderzeń na minute do 200.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2016, o 12:01 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

W takim razie możesz spróbować z trybem pracy: Input Capture Unit, o ile możesz podłączyć przycisk pod któryś z pinów ICP.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2016, o 12:10 
Offline
Nowy

Dołączył(a): 29 kwi 2016
Posty: 14
Pomógł: 0

Nie rozumiem jak ma mi to pomóc skoro pod INT też będzie działać.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2016, o 12:40 
Offline
Użytkownik

Dołączył(a): 25 lip 2015
Posty: 140
Zbananowany użytkownik

Pomógł: 18

Proponuję zajrzeć jednak do noty. Co do twojego algorytmu, to skąd założenie, że f jest w [Hz]? Po drugie, to Timer0 w Atmega328P jest 8 bitowy, więc taki zapis: OCR0A |= 2000; jest błędny. Po trzecie, żeby to w ogóle miało jakikolwiek sens, to po obliczeniu zmiennej BPM lub f, powinieneś wyzerować zmienną czas. Po za tym nie wiem, czy zdajesz sobie sprawę, że twój algorytm obecnie ma roździelczość równą 60 uderzeń na minutę ;-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2016, o 17:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Nie pomogę z kodem, ponieważ na razie mam dla Ciebie propozycję co do idei metronomu.
Pierwsza rzecz która nie bardzo mi pasuje w Twoim pomyśle to sposób wyłapania tempa - w.g mnie kod powinien wyglądać tak:
-naciskasz przycisk REC i trzymając go, drugim przyciskiem "nadajesz tempo" np.: 1-2-3-4 lub 1-2-3
Liczysz jednostki zegarowe - zaczynasz liczyć po pierwszym naciśnięciu "taktomierza", pomiędzy poszcz. taktami.
Znając interesujący Cie zakres tempa, jeśli np. po "3" czas oczekiwania na "4" jest zbyt długi znaczy to że taktowanie skończyło się na trójce.
Puszczasz REC i to co wstukałeś można odtworzyć.
Od strony muzycznej łatwiej jest "nabić rytm" stukając kilkakrotnie a od strony programowej szybciej to ogarniesz.
W Twoim kodzie naciśniesz przycisk i co?
I jeszcze jedno - ten guziczek od tempa nie może być typu microswitch - "ciamka" przy wciskaniu i przy puszczaniu a to może zmylić muzyka :?
Wiem że nie ułatwiłem, ale ja tak widzę metronom z programowym ustawieniem tempa.

Pozdr.



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

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

Pewnie chodzi o coś podobnego tylko z wyświetlaczem ;-)
http://www.elektroda.pl/rtvforum/topic1921709.html
Ja to zrobiłem na zwykłym liczniku programowym w przerwaniu. Znając tykanie przetrwania bez problemu wyliczysz ilość uderzeń na minutę. Moment startu i stopu liczenia rozpoznasz toglując jakiegoś bit'a w zmiennej przy każdym wciśnięciu guzika (z uwzględnieniem drgania stylów oczywiście). Dalej już powinno być łatwo ;-)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 gru 2016, o 19:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
SylwekK - elektroda napisał(a):
...wyjście słuchawkowe. Myślałem zamiast tego o opcji „kopania prądem” i być może kiedyś to zmodyfikuję

O matko jakie ja miałem szczęście - mój nauczyciel rytm poloneza tylko wystukiwał mi palcem po głowie :)

Pozdr.



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