Elektroda.pl
Elektroda.pl
X
IGE-XAOIGE-XAO
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

poszukuję jak najwięcej układów syren alarmowych.

Paziu. 05 Gru 2018 09:58 7608 325
  • IGE-XAOIGE-XAO
  • #152
    _jta_
    Specjalista elektronik
    Jak chcesz na STM32F103 generować dużo sygnałów jednocześnie, to w ten sposób nie da rady. Nie wiem, jak z użyciem timerów (on ma chyba 4, i każdy chyba po 4 kanały) - trzeba by doczytać, co dokładnie te timery potrafią, może da się na nich generować te "alarmy" z dużo mniejszymi zniekształceniami.

    Ale może najpierw sprawdzić, czy te zniekształcenia, które mają powstawać przy zaproponowanej metodzie, będą rzeczywiście przeszkadzać? To kwestia, kto ma jaki słuch.
  • #154
    _jta_
    Specjalista elektronik
    Więcej układów pozwoli uzyskać lepszą jakość - również w taki sposób, jaki zaproponowałem, żeby to procesor wszystkim sterował. Proponuję spróbować z jednym, zobaczyć co z tego wyjdzie (na ile uda się zoptymalizować program, żeby miał czas generować w miarę dokładnie), i ewentualnie dodać więcej i rozłożyć generowanie na kilka.

    Tylko: jeśli te 23 sygnały będą sztywno powiązane z układami, to na wypadek, jakbyś chciał generować 6 alarmów naraz, każdy układ musi być w stanie nadążyć z generowaniem tych 6, bo może akurat zażyczysz sobie tych 6 alarmów, które są przypisane do jednego układu. Wtedy dla generowania 6 alarmów naraz nie będzie miało znaczenia, czy masz 1 układ, czy 6 - natomiast jakby każdy układ umiał generować wszystkie alarmy, i one dzieliłyby się równo pracą przy ich generowaniu, to przy włączeniu 6 alarmów na 2 układy każdy będzie generował 3. Zysk z kilku układów jest taki, że jak masz 23 możliwe alarmy i 4 układy, to na pewno żaden układ nie będzie musiał generować więcej, niż 6 alarmów naraz - przy 1 układzie można wcisnąć wszystkie przyciski i generować 23 alarmy naraz, a on powinien z tym nadążyć, więc mniej działań może wykonywać przy każdym generowanym alarmie.

    Można jeszcze zrobić tak, że jak generujesz 1-2 alarmy, to robisz to dokładniej, a im więcej, tym mniej dokładnie - jak będzie kilkanaście alarmów naraz, to wyjdzie taka kakofonia, że nikt nie usłyszy, czy masz czyste tony, czy skrzypiące.
  • IGE-XAOIGE-XAO
  • #157
    jarek_lnx
    Poziom 43  
    Paziu. napisał:
    A według ciebie jeżeli by uruchomiły by się wszystkie te sygnały.
    To układy bardzo by się grzały ?
    W uC grzanie nie zależy od tego czy procesor coś robi czy zupełnie nic nie robi, takie rzeczy to dopiero w dużych wydajnych procesorach i to też nie dzieje się samo, ktoś musiał napisać system operacyjny tak aby kiedy programy nic nie robią, wprowadzał procesor w tryb obniżonego poboru mocy.

    Jak procesor będzie miał "za dużo do roboty" to po prostu nie zdąży wykonać zaprogramowanych działań w przewidzianym czasie i np częstotliwości modulacji się rozjadą.

    To ile sygnałów da się wygenerować na uC zależy od umiejętności programisty, jeśli będziesz to pisał sam, nie mając żadnych umiejętności i ucząc się w trakcie, efekty na pewno nie będą spektakularne.
  • #158
    _jta_
    Specjalista elektronik
    Szybka część wyliczania w asemblerze:
    1. załaduj do rejestru R0 adres tablicy aktywnych sygnałów
    2. załaduj do rejestrów R1,R2,R3 kolejne słowa z tablicy zwiększając R0 (o 12)
    3. jeśli R1==0 idź do 9
    4. do R2 dodaj R1
    5. zapisz R2 do [R0-8]
    6. przesuń R2 w prawo o 31 bitów
    7. zapisz R2 do [R3]
    8. idź do 2
    9. koniec szybkiej części wyliczania, zabierz się za wolniejszą - w niej ma być poprawiona częstotliwość dla jednego sygnału i sprawdzony jeden przycisk.

    Można lepiej (o 1 instrukcja mniej w pętli):
    1. załaduj do rejestru R0 adres tablicy aktywnych sygnałów
    2. idź do 7
    3. do R2 dodaj R1
    4. zapisz R2 do [R0-8]
    5. przesuń R2 w prawo o 31 bitów
    6. zapisz R2 do [R3]
    7. załaduj do rejestrów R1,R2,R3 kolejne słowa z tablicy zwiększając R0 (o 12)
    8. jeśli R1!=0, to idź do 3
    9. koniec szybkiej części wyliczania...

    Tablica aktywnych sygnałów składa się z grup 3 słów: częstotliwość (tu 0 oznacza koniec danych), akumulator, adres bit-bandowy sygnału.
  • #159
    Paziu.
    Poziom 6  
    A że tak zapytam na "boku".
    Dużo prostsze będzie zbudować układ działający jak większość sygnalizatorów typu 32 czy 64 tony.
    Że układ ma zaprogramowane te 32 czy 64 . I wybierać jeden spośród 32 czy 64 tonów . Przełącznikami dip switch???


    Dla tego pytam ponieważ przeanalizowałem cały ten projekt jeszcze raz i zastanawiam się czy nie mugłbym zrobić tak że po prostu zaprogramowałbym taki układ jak opisuję powyżej i po prostu umieściłbym na płytce 23 mniejsze oddzielne układy każdy ustawiony na inny sygnał.

    Czy według was ułatwi to zadanie?
  • #160
    _jta_
    Specjalista elektronik
    To co, chcesz mieć 23 układy, z których każdy może generować 32 różne sygnały, i masz przy nim dip switch podający, który sygnał ma być generowany? Może pomyśl, ile będzie roboty z montowaniem, ile miejsca to zajmie... Płytka z STM32F103C8T6 ma rozmiar podstawki 40-pinowej DIL "szerokiej" - coś koło 51x17 mm.
  • #162
    kacpo1
    Poziom 33  
    161# postów, setki godzin pisania, i... ? Nadal nie ma nawet podstaw...

    Autorowi polecam się zastanowić i odpowiedzieć na kilka pytań (nie na wybrane, ale każde).
    Po pierwsze, czy potrzebne jest tutaj HiFi ? Zamiast inwestować w 4 układy, nie lepiej będzie kupić jedną płytkę która będzie na tyle wydajna aby to wszystko "ogarnąć" ? Wątpię, że będziesz chciał póścić więcej niż 2 sygnały na raz. Przy 2 cięzko jest co kolwiek rozróżnić, a przy 3 to już nawet nie wiadomo czy to alaram czy burza idzie.
    Płytka STM32F334 posiada 10-cio kanałowy HRTIMER który może pracować z częstotliwościami nawet 4.6 GHz a gdyby tego było mało, to posiada nawet 3 DAC.
    Ale zawsze jest jakieś "ale".
    Żeby jak kolwiek sensownie wykorzystać ten inny mikrokontroler, trzeba poznać sposób jego działania, jak się go programuje itp. Według mnie, najlepszy jest poradnik szczywronka.
    Bez tej wiedzy, nie ma co się zabierać za programowanie STM'ów.
  • #163
    Paziu.
    Poziom 6  
    Pytam jeszcze raz czy Dużo prostsze będzie zbudować układ działający jak większość sygnalizatorów typu 32 czy 64 tony. 
    Że układ ma zaprogramowane te 32 czy 64 . I wybierać jeden spośród 32 czy 64 tonów . Przełącznikami dip switch??? 
    Bo post 162 nie jest odpowiedzią na moje pytanie.
  • #164
    kacpo1
    Poziom 33  
    Oczywiście, że będzie prostsze. Ton to nic innego jak dźwięk o jednej, niezmiennej częstotliwości.
    Z tym, że taki generator tonów, będzie miał tyle do syreny alarmowej, co piernik do wiatraka.
    Równie dobrze można to wykonać na NE555 z modyfikowalną częstotliwością pracy.
  • #166
    kacpo1
    Poziom 33  
    Paziu. napisał:
    32 tony

    Paziu. napisał:
    32 dźwięki

    A więc o które Ci chodzi ? Bo różnica jest i to znaczna.

    Jeśli chodzi o dźwięki, to według mnie program wyglądałby tak samo.
    Poza tym, nadal nie wiemy czy potrzebujesz HiFi czy wystarczy aby dźwięk był podobny do syreny alarmowej ?
  • #167
    Paziu.
    Poziom 6  
    Chodzi mi o dźwięki.
    A co do układu mam takie pytanie co będzie prostsze do zaprogramowania.
    Takie że dip switchem wybieram 1 sygnał z pośród 23 dźwięków.
    Czy na każdy dźwięk osobne wejście i wyjście.?
  • #169
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #170
    kacpo1
    Poziom 33  
    Christophorus napisał:
    Można w tym celu zbudować prostą klawiaturkę z kilku przełączników typu "microswitch", a dźwięk do wyboru (jego nazwę) wyświetlać na wyświetlaczu LCD. Zamiast przełączników "microswitch" można wykorzystać impulsator obrotowy z przyciskiem.

    Zacznijmy może od jednego przycisku i świecenia diody. :)

    Do autora. Kupić najtańszą płytkę STM32F103C8T6 z Aliexpress lub Allegro i przestudiować poradnik szczywronka (4 post https://www.elektroda.pl/rtvforum/viewtopic.php?p=15127066#15127066 )
    Bez tego nie ma nawet co teoretyzować co jest lepsze, wydajniejsze itp.
  • #172
    wójtaszek
    Poziom 23  
    Proponowałem to autorowi na początek przedsięwzięcia jakiś miesiąc ,może dwa temu. Ale cóż teoretyzowanie jest silniejszą stroną od praktycznego potraktowania zagadnienia.
  • #173
    _jta_
    Specjalista elektronik
    Proponowałem to autorowi na początek przedsięwzięcia jakiś miesiąc ,może dwa temu - wyglądało to tak:

    #108 Proponuję również praktyczną realizację układów próbnych takich jak ci polecał kolega w poście #17.

    #119 najpierw określenie z grubsza algorytmów otrzymywania tonów dla tych 30 rodzajów

    I kilka wypowiedzi 26 listopada, zaczynając od #133, kończąc na #141.

    Ale mi tutaj chodzi o coś nieco innego, co nie wymaga montowania układów elektronicznych: cyfrowe generowanie dźwięku, do tego poprzez przełączanie napięcia na pinie między masą i zasilaniem, i taktowanie tego jakimś zegarem wprowadzi pewne zniekształcenia. Trzeba sprawdzić, czy będą akceptowalne - i to na słuch.
  • #174
    wójtaszek
    Poziom 23  
    I o tym pisałem. A tak to mamy teoretyzowanie od wielu,wielu dni.
    Podstawa to praktyczny, rzeczywisty eksperyment i płynące z niego wnioski.
  • #175
    _jta_
    Specjalista elektronik
    I o tym pisałem. A tak to mamy teoretyzowanie od wielu,wielu dni.

    Przejrzałem to, co pisałeś - nie będzie to użyteczne, a roboty z wykonaniem niektórych "porad" byłoby sporo. A akurat o tym, o czym ja piszę, nic nie ma. Coś mi wygląda na to, że próbujesz pozować na wybitnego znawcę tematu, a nie potrafisz nic sensownego na ten temat napisać.

    Podstawa to praktyczny, rzeczywisty eksperyment i płynące z niego wnioski.

    Podstawą eksperymentu jest rozumienie tego, co się robi. A do tego jest teoria...

    Paziu. w #167 napisał:
    A co do układu mam takie pytanie co będzie prostsze do zaprogramowania.
    Takie że dip switchem wybieram 1 sygnał z pośród 23 dźwięków.
    Czy na każdy dźwięk osobne wejście i wyjście.?

    Można napisać program na STM32F103C8 taki, że do 5 pinów masz podłączony dip switch (5 przełączników), i dla każdego ustawienie generujesz inny dźwięk. Jeśli ma być jeden wybierany, a nie jednoczesne podawanie kilku dźwięków na kilka głośników, to będzie dużo łatwiej. Osobne wejście/wyjście dla każdego dźwięku byłoby dużą komplikacją, choćby dlatego, że nie wystarczy pinów I/O (jest do dyspozycji ze 30).
  • #177
    sp3ots
    Poziom 37  
    @Paziu.
    Witam !
    Pokaż co dotychczas zrobiłeś w temacie syren.
    Masz miernik częstotliwości ?
    Masz programator do programowanie uP AVR ( ATtiny, ATmega ) ?
    Popatrz tam:
    https://www.mcselec.com/index.php?option=com_content&task=view&id=221&Itemid=57
    Jest tam schemat i przykładowy kod jak wygenerować dźwięki, miedzy innymi 440Hz i 550Hz.

    Teraz robię przerwę na około 3 godziny. Masz pytania odnośnie TEGO programu zadaj tu lub na PW.
  • #178
    Paziu.
    Poziom 6  
    Takie co jak w tym linku robiłem podobne.
    Tylko na arduino.
    Zrobiłem sobie syrenę o jednej częstotliwości.
    I to jest dla mnie w miarę proste tylko problem pojawia mi się jak chciałbym zbudować układ taki jak opisuję powyżej.
    Czyli spośród tych 23 sygnałów wybieram jeden przełącznikami dip switch
  • #179
    _jta_
    Specjalista elektronik
    Przede wszystkim nie widać, jak dźwięki są generowane - robi to procedura biblioteczna. I robi to w sposób dość prymitywny, jaki był stosowany na PC - programuje się podział częstotliwości, tylko na PC to było około 1.2MHz, a tu (2/3)MHz. O ile dobrze pamiętam, na STM32F1xx można dzielić 72MHz - uzyskując ~100X lepszy wynik.

    Na PC można było wpisać do timera liczbę, przez którą miała być dzielona częstotliwość 1193180Hz (zwykle wpisywało się liczbę 2-bajtową) i wtedy timer zmieniał częstotliwość sygnału na wyjściu, dostosowując ją do nowego dzielnika (zwykle timer zlicza od zadanej liczby do zera, po czym ładuje ją znowu, i tak w kółko - na PC miał różne tryby działania, wykorzystywało się taki, który przez połowę tego zliczania dawał na wyjściu '1', a przez drugą połowę '0').

    Prawdopodobnie ta procedura biblioteczna robi coś podobnego - wpisuje dzielni do timera, a następnie czeka przez podany czas, na koniec wyłącza timer - w rezultacie przez ten czas na wyjściu timera jest częstotliwość równa częstotliwości na wejściu (2/3)MHz podzielonej przez podany dzielnik.

    Ale ta metoda zawiedzie, jeśli częstotliwość ma się płynnie zmieniać - np. przez pół sekundy z 400Hz na 900Hz. Można to zastąpić serią dźwięków o różnych częstotliwościach, ale jeśli będą zbyt długie, to będzie słychać sekwencję dźwięków, a nie płynne narastanie częstotliwości, a jak będą krótkie, to częstotliwości nie wyjdą prawidłowo, jeśli timer będzie restartowany przez wpisanie nowego dzielnika. Mogłoby coś sensownego wyjść, gdyby można było wpisywać wartości dzielnika, a timer używałby ostatnio wpisanej dopiero po doliczeniu poprzedniej, ale pewnie tak nie jest?

    Z tego powodu (a także dlatego, że dźwięków miało być wiele naraz, i mogłoby nie wystarczyć timerów) zaproponowałem inny sposób.

    Dodano po 7 [godziny] 48 [minuty]:

    Myślę, że dla STM32F1xx (mają Cortex-M3; dla innych Cortex-M-ów trzeba by było sprawdzić) będzie użyteczne ustawienie SEVEONPEND (bit 4) w SCB_SCR (0xE000ED10) - to powoduje, że nawet zamaskowane przerwanie kończy instrukcję WFE (4.4.6 w PM0056) - zgaduję, że można ustawić któryś timer, żeby generował przerwania, i dla synchronizacji czekać używając WFE - tylko nie wiem, czy trzeba kasować stan przerwania na timerze, czy skasuje się sam?

    To do takiej metody, żeby procesor odliczał czas, dodając do zmiennej częstotliwość pomnożoną przez odpowiedni współczynnik - jeśli przerwania będą z częstotliwością f_i, to przy generowaniu sygnału o częstotliwości f_s należy dodawać f_s*0x100000000/f_i i bit znaku tej zmiennej wystawiać na port. Ta metoda nie daje "artefaktów" przy zmianach częstotliwości.
  • #180
    Paziu.
    Poziom 6  
    Próbuję zrobić coś takiego ja napisał mi kolega"jta" który jak na razie podaje najlepsze porady. Jak na razie mam spore trudności w zrobieniu niektórych rzeczy. ale mam takie pytanie czy na tym stm32 wytworze takie dźwięki jak w tych 2 linkach poniżej?

    1. https://www.youtube.com/watch?v=nIfIAgkB-MI
    2. https://www.youtube.com/watch?v=JACbYe0qG5I&t...t=PLT8eSOaCA0GRRMlzJg4XGaS76pFTXZ_BF&index=19