Generowanie pojedyńczego dźwięku
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Generowanie pojedyńczego dźwięku
Witam !
Szukam przykładu jak obliczy i wygenerować pojedynczy dźwięk w przerwaniu np. na Atmega8 + rwzonator ?
Dźwięk np. 1047Hz ( nie musi to być sinusoida ).
Pozdrawiam. Stefan
Szukam przykładu jak obliczy i wygenerować pojedynczy dźwięk w przerwaniu np. na Atmega8 + rwzonator ?
Dźwięk np. 1047Hz ( nie musi to być sinusoida ).
Pozdrawiam. Stefan
- niveasoft
- Posty: 1232
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Generowanie pojedyńczego dźwięku
Na to jest więcej przepisów. Do obliczeń najprościej jest wykorzystać jakiś pierwszy z brzegu kalkulator. Przykładowy kalkulator jest dołączony do MkAVRcalculator`a.
Częstotliwość na wyjściu to, w najprostszej formie, odwrócenie stanu pinu który to generuje. Dlatego częstotliwość musi być dwukrotnie wyższa.
Widać to na dołączonym obrazku. Czestotliwość przerwania i niżej częstotliwość generowana którą wpisałem z palca.
W drugą stronę -> chcesz mieć coś na pinie, np. 100Hz to mnożysz sobie razy dwa i obliczasz przerwanie na 200Hz.
Myślę jednak że Timer2 lub Timer1 mają rejestry Compare i może nawet nie potrzebujesz przerwań. Timer sam będzie odwracał stan pinu wyjściowego. Jedyne tu ograniczenie to to że wtedy musi to być pin przypisany sprzetowo do Timera (pin opisany w Datasheet jako OC2, OC1A lub OC1B)
Z drugiej strony widać że ewentualne przerwanie będzie się odbywać co 477us i tu możesz sobie też odliczać czas do zakończenia pojedynczego dźwięku...
Nie przedstawiłem wszystkich a sam widzisz że jest już trochę możliwości.
Częstotliwość na wyjściu to, w najprostszej formie, odwrócenie stanu pinu który to generuje. Dlatego częstotliwość musi być dwukrotnie wyższa.
Widać to na dołączonym obrazku. Czestotliwość przerwania i niżej częstotliwość generowana którą wpisałem z palca.
W drugą stronę -> chcesz mieć coś na pinie, np. 100Hz to mnożysz sobie razy dwa i obliczasz przerwanie na 200Hz.
Myślę jednak że Timer2 lub Timer1 mają rejestry Compare i może nawet nie potrzebujesz przerwań. Timer sam będzie odwracał stan pinu wyjściowego. Jedyne tu ograniczenie to to że wtedy musi to być pin przypisany sprzetowo do Timera (pin opisany w Datasheet jako OC2, OC1A lub OC1B)
Z drugiej strony widać że ewentualne przerwanie będzie się odbywać co 477us i tu możesz sobie też odliczać czas do zakończenia pojedynczego dźwięku...
Nie przedstawiłem wszystkich a sam widzisz że jest już trochę możliwości.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: Generowanie pojedyńczego dźwięku
Witam !
Dziękuję za wyjaśnienie, kalkulator już pobrałem.
Dzisiaj rozpocznę zabawę, tylko nie wiem jak się do tego zabrać, nigdy nie miałem do czynienia z "OC2, OC1A lub OC1B".
Zacznę od zaprogramowania miernika częstotliwości na ATtiny2313, potem połączę z Atmega8 mam je na jednej płycie testowej.
Czy wiecie Państwo jak długo program "MkAVRcalculator" będzie działał bez rejestracji pobrany z ATnel ?
Dziękuję za wyjaśnienie, kalkulator już pobrałem.
Dzisiaj rozpocznę zabawę, tylko nie wiem jak się do tego zabrać, nigdy nie miałem do czynienia z "OC2, OC1A lub OC1B".
Zacznę od zaprogramowania miernika częstotliwości na ATtiny2313, potem połączę z Atmega8 mam je na jednej płycie testowej.
Czy wiecie Państwo jak długo program "MkAVRcalculator" będzie działał bez rejestracji pobrany z ATnel ?
- niveasoft
- Posty: 1232
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Generowanie pojedyńczego dźwięku
Program sobie będzie działał.. to nie trial. To okrojona wersja i główną funkcjonalność proponuje dla kilku procesorków (chyba trzech).
Timer kalkulator działa bez licencji . Nic nie bój.
Napisz lepiej jaki procesor, która noga i jaki kwarc a postaram się nie napisać wszystkiego za Ciebie tylko napisać jak to można zrobić
Timer kalkulator działa bez licencji . Nic nie bój.
Napisz lepiej jaki procesor, która noga i jaki kwarc a postaram się nie napisać wszystkiego za Ciebie tylko napisać jak to można zrobić
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: Generowanie pojedyńczego dźwięku
Ok, będę korzystał tylko z kalkulatora.
Jako generator - ATmega8 rezonatory do wyboru:
są na Goldpinach, 8, 10, 12, 14.7456 i 16MHz
Jako generator - ATmega8 rezonatory do wyboru:
są na Goldpinach, 8, 10, 12, 14.7456 i 16MHz
- niveasoft
- Posty: 1232
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Generowanie pojedyńczego dźwięku
Mi dajesz wybierać rezonator? No daj spokój
Rezonator sie wybiera do zadania. Jak coś może być zrobione przy 4MHz to się taki daje i procesor mniej żre prądu.
Jak już naprawdę coś od niego potrzebujesz to dajesz 16MHz...
Więcej się w tym temacie nie odezwę jak nie napiszesz "czegoś konkretniej"
Rezonator sie wybiera do zadania. Jak coś może być zrobione przy 4MHz to się taki daje i procesor mniej żre prądu.
Jak już naprawdę coś od niego potrzebujesz to dajesz 16MHz...
Więcej się w tym temacie nie odezwę jak nie napiszesz "czegoś konkretniej"
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: Generowanie pojedyńczego dźwięku
Pytasz o rezonator to napisałem, skąd mam wiedzieć jaki nada się jeśli jeszcze tego nie robiłem ?
W tej chwili poznaję zależność waitus - częstotliwość.
Teraz pobawię się przerwaniami.
W tej chwili poznaję zależność waitus - częstotliwość.
Teraz pobawię się przerwaniami.
- niveasoft
- Posty: 1232
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Generowanie pojedyńczego dźwięku
Okay, przepraszam jeśli mój ton wydał się szorstki. Miało być śmiesznie, zapewniam
Waitms, Wait, Waitus to są opóxnienia niezależne od procesora..jeśli go zadeklarujesz poprawnie.
Chodzi o to że jeśli Bascomowi napiszesz $crystal = 1000000 (1MHz) a potem napiszesz Wait 1 to Bascom czyta : zrób opóźnienie/odlicz jedną sekundę przy 1MHz i wie że procek smiga 1MHz to wystarczy cos zrobic jeden milion razy i gotowe bo minie sekunda
Jak go oszukasz i napiszesz &crystal = 1000000 a będziesz miał ustawiony kwarc 16MHz to na sto procent wszystko sie skończy piętnaście razy szybciej
Także : wszystkie wait, Waitms i Waitus bazują na tym że podajesz właściwe dane kompilatorowi który za Ciebie liczy/wstawia opóźnienia.
Teraz może inaczej. Nowa Atmega ma 1MHz. Można ja przełaczyć na 8MHz. Może nie jest Tobie potrzebny żaden rezonator i da wszystko radę zrobić przy 1MHz lub 8MHz wewnętrznym.
Nie piszesz co chcesz osiągnąć.. Nie wiem czy wiesz że jest taka Bascomowa funkcja Sound
https://wiki.mcselec.com/bavr/SOUND
Waitms, Wait, Waitus to są opóxnienia niezależne od procesora..jeśli go zadeklarujesz poprawnie.
Chodzi o to że jeśli Bascomowi napiszesz $crystal = 1000000 (1MHz) a potem napiszesz Wait 1 to Bascom czyta : zrób opóźnienie/odlicz jedną sekundę przy 1MHz i wie że procek smiga 1MHz to wystarczy cos zrobic jeden milion razy i gotowe bo minie sekunda
Jak go oszukasz i napiszesz &crystal = 1000000 a będziesz miał ustawiony kwarc 16MHz to na sto procent wszystko sie skończy piętnaście razy szybciej
Także : wszystkie wait, Waitms i Waitus bazują na tym że podajesz właściwe dane kompilatorowi który za Ciebie liczy/wstawia opóźnienia.
Teraz może inaczej. Nowa Atmega ma 1MHz. Można ja przełaczyć na 8MHz. Może nie jest Tobie potrzebny żaden rezonator i da wszystko radę zrobić przy 1MHz lub 8MHz wewnętrznym.
Nie piszesz co chcesz osiągnąć.. Nie wiem czy wiesz że jest taka Bascomowa funkcja Sound
https://wiki.mcselec.com/bavr/SOUND
-
- Posty: 42
- Rejestracja: 08 wrz 2018, 10:26
Re: Generowanie pojedyńczego dźwięku
Wiem o souund, się tym bawiłem,tam są dwa parametry, (niby) częstotliwość długość tonu, jeśli dobrze pamiętam to oba miały wpływ na częstotliwość.
Dlatego bawię się inaczej, może tak nie powinno się robić ale ja dziadek nie znający j.angielskiego inaczej nie umiem.
Teraz sprawdzam jaki ma wpływ preskaler
W tej konfiguracji mam 3788Hz, zaznaczam że nie mam skalibrowanego miernika częstotliwości.
Cel zadania- wykonanie prostego instrumentu klawiszowego podobnego do elek 144, który by miał więcej niż jedną oktawę.
Jeden pin wejściowy uP jeden ton, wszystkie tony na jednym pinie wyjściowym, teraz na PB.0
Dlatego bawię się inaczej, może tak nie powinno się robić ale ja dziadek nie znający j.angielskiego inaczej nie umiem.
Teraz sprawdzam jaki ma wpływ preskaler
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m8adef.dat"
- $crystal = 8000000
- Config Portb.0 = Output
- Ton Alias Portb.0
- Config Timer0 = Timer , Prescale = 8. '1, 8, 64, 256
- Enable Timer0
- On Timer0 Czas
- Enable Interrupts
- 'na generowanie tonu
- do
- loop
- end
- Prztimer0: 'co 4ms
- Timer0 = 131 '131 bo 256=131=125
- Set F4ms '4ms = 125Hz
- Toggle Ton
- return
Cel zadania- wykonanie prostego instrumentu klawiszowego podobnego do elek 144, który by miał więcej niż jedną oktawę.
Jeden pin wejściowy uP jeden ton, wszystkie tony na jednym pinie wyjściowym, teraz na PB.0
Ostatnio zmieniony 08 gru 2018, 13:23 przez sp3ots, łącznie zmieniany 1 raz.
- Henryk
- Posty: 348
- Rejestracja: 22 sty 2018, 17:20
Re: Generowanie pojedyńczego dźwięku
Witam sp3ots - Stefan
W ramach nudy zmajstrowałem krótki program w oparciu o instrukcję Sound .
Pozdrawiam Henryk .
W ramach nudy zmajstrowałem krótki program w oparciu o instrukcję Sound .
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "m8def.dat"
- $crystal = 8000000
- $hwstack = 64
- $swstack = 64
- $framesize = 128
- Config Portb.0 = Output 'wyjście
- Config Pinb.1 = Input : Set Portb.1 'wejście
- Config Pinb.2 = Input : Set Portb.2
- Config Pinb.3 = Input : Set Portb.3
- Config Pinb.4 = Input : Set Portb.4
- Config Pinb.5 = Input : Set Portb.5
- Config Pinb.6 = Input : Set Portb.6
- Do
- If Pinb.1 = 0 Then : Sound Portb.0 , 100 , 100 : End If
- If Pinb.2 = 0 Then : Sound Portb.0 , 200 , 200 : End If
- If Pinb.3 = 0 Then : Sound Portb.0 , 300 , 300 : End If
- If Pinb.4 = 0 Then : Sound Portb.0 , 400 , 400 : End If
- If Pinb.5 = 0 Then : Sound Portb.0 , 500 , 500 : End If
- If Pinb.6 = 0 Then : Sound Portb.0 , 600 , 600 : End If
- Waitms 100
- ' Sound Portb.0 , 100 , 1000
- ' Sound portb.0 ....pin wyjścia
- ' 100....ilość impulsów na wyjściu
- ' 1000....czas trwania pojedynczego impulsu
- Loop
- o 'podłączenie głośnika tak jak podano w linku https://wiki.mcselec.com/bavr/SOUND