logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Generowanie sinusoidy 980Hz na Arduino/ATTiny - jak zrobić?

25 Lip 2020 17:24 1338 8
REKLAMA
  • #1 18837249
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #2 18837270
    ojciec
    Poziom 34  
    Posty: 1566
    Pomógł: 280
    Ocena: 210
    Link

    Do projektu dodał sinus, można usunąć ten wyświetlacz , enkoder
  • #3 18837329
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #4 18837916
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1464
    Wiedza sprawdzona pazurami, klucz do telegrafii zrobiony na Atmega 8 C++ Atmel Studio 7
    Potrzebny timer wyznaczający rytm próbkowania (9600/s do 20000/s) , i drugi zatrudnić do PWM (chyba że chip ma C/A), przerwania, te rzeczy.
    Naiwny kod w arduino trzeba sobie wybić z głowy


    1. Arytmetyka sinusa jest wiele bardziej skomplikowana niż piły, prostokąta itd (również oczekiwania ucha są wyższe - piła, szpilki, prostokąt są generalnie uchojebne, sinus powinien być miły) ... nie skopiujesz w dużym stopniu tamtych projektów. Trzeba to sobie stablicować np na pececie, i gotową tablicę wkleić do źródeł.
    2. Zależności czasowe są krytyczne, inaczej nasze ucho tego nie zaakceptuje. Ja konkretnie wpis wartości do PWM robiłem w pierwszych instrukcjach przerwania timera, potem w przerwaniu zajmowałem się, czym musiałem, w tym wyznaczeniem następnej liczby (oczywiście z tablicy) i jej przygotowaniem.
    3. Zaczynać się musi od zera i najlepiej kończyć na zerze, inaczej będzie "puk" w głośniku. Ja robiłem podnoszenie liczby z tablicy /4, potem kolejna /2 potem pełna, i gaszenie odwrotnie, zredukowałem puk jeszcze bardziej.
  • #5 18837993
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 18838268
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1464
    Tu masz tablicę
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    To na pewno może się przydać.

    Myślałem kiedyś (2015-16) puścić to na githuba, ale do tego nie doszło.
    Projekt mocno odbiega od Twoich oczekiwań, dość sprytne, choć bez narzutu C++, moduły, rozdzielenie, listenery.
    Nie jest u mnie aktywny, i nie wszystko pamiętam.

    Moze coś wykombinuję.

    Dodano po 23 [minuty]:

    aj123 napisał:
    Świetnie...
    To jak, pomożesz mi czy chciałeś się tylko pochwalić wiedzą?


    Podałem informacje inżynierskie, to najważniejsze :)

    Dodano po 2 [minuty]:

    BTW Ty też skąpisz.
    NIC nie mówisz o przeznaczeniu projektu. Jeśli ma tylko piszczeć, dlaczego nie coś analogowego? Są liczne projekty, gotowe chipy itd...
  • REKLAMA
  • #7 18838968
    Konto nie istnieje
    Poziom 1  
  • #8 18849162
    tmf
    VIP Zasłużony dla elektroda
    Posty: 14318
    Pomógł: 2090
    Ocena: 2206
    Używasz tabeli wartości odzwierciedlającej sinusa, tak jak to pokazano. Tymi danymi karmisz timer w trybie PWM, uzyskując modulację PWM w kolejnych cyklach zależną od wartości z tej tabeli.. Na wyjściu dajesz filtr dolnoprzepustowy, który z tego PWM robi ci sinusa. Aby nie było zgrzytów, wartości PWM wpisujesz do timera w przerwaniu OVF do rejestru buforowego.
  • #9 18849190
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

LABEL_AI_GENERATED
Aby wygenerować sinusoidę o częstotliwości 980Hz na Arduino lub ATTiny, można wykorzystać tablicę wartości sinusoidalnych oraz technikę PWM. Kluczowe jest zastosowanie timerów do próbkowania oraz przerwań do aktualizacji wartości PWM. Użytkownicy sugerują użycie ATtiny85 jako platformy, a także wskazują na potrzebę zastosowania filtru dolnoprzepustowego do wygładzenia sygnału PWM. Wskazówki obejmują również wykorzystanie gotowych projektów z GitHub oraz stron internetowych, które oferują przykłady kodu i schematy.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA