Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Przeróbka programu analizatora widma akustycznego - bascom

manekinen 19 Jun 2007 23:40 38797 57
Altium Designer Computer Controls
  • #31
    hunterhouse
    Level 26  
    nom ja używam najzwyklejszej Atmegi8-16Pi
    podpięty kwarc 8Mhz(chociaż na wewnętrznym RC 8Mhz też sprawdzałem)
    żadnych dodatkowych bajerów Do LCD nie urzywam, testowałem na 2 róznych LCD i oba chodzą na porcie D
    tak sobie myslałem że moze jakieś alternatywne funkcje sie uaktywniaja ale tam zabardzo niema co :/ (czesto JTAG trzeba było wyłaczać ale M8 go niema :/)

    co do filtrów to mam ten sam sygnał podany na 2 wejscia tylko jest dzielnik rezystancyjny który dodaje składową stałą 2,5V (2x10kOhm)

    mam to zbudowane na takiej uniwersalnej płytce stykowej i na filtry niema miejsca dlatego ich niedałem, choc powinien byc

    w sumie to z tego co widze z mojego urządonka to potrzeby jest filtr tylko dla dolnej połowy, obciac wysokie, dól dział dosć ładnie choć niewiem dokładnie czemu od 50 do 150 Hz w dolnej robią sie wiksy :/ podstakuje kilka słupków oprucz tego reszta chodzi ładnie

    powyzej 11 kHz też juz zaczyna troche świrować ale to już z tego co słysze to generator sie rozstraja (bo słucham tego w głosnikach) wiec to nie jest widna DFT

    puki co musze troche odłożyć ten temat w sobote i niedziele egazminy w budzie a ja jeszcze nic nie umiem :P
  • Altium Designer Computer Controls
  • #32
    manekinen
    Level 29  
    A więc... Udało mi się odpalić wyświetlacz na porcie D , z kwarcem 16MHz, i z użyciem biblioteki lcd4busy... prędkość jest powalająca! można śmiało przyrównać do widma w winampie ustawionego na 13ms!

    Widać jak zamiast pasków nie raz pojawiają sie na ułamek sekundy takie mniejsze litery "T", jest to dosyć drażniące, ale pojawia się tylko przy 16MHz.

    A powód niedziałania był wyjątkowo beznadziejny - zimny lut na jednym goldpinie :evil: przy sprawdzaniu miernikiem przejście było, ale przy dużych częstotliwościach przy komunikacji pojawiały się błędy.

    Do tego uwaliłem jedną atmege. Nie chce już się programować, to chyba przez to że programowałem ją przy 27MHz :twisted: . No cóż, człowiek uczy się na własnych błędach :) Ale i tak zaprogramowała się 1112 razy, z tego ze 100 razy przy 27MHz, więc dużo zniosła.

    No więc powodzenia życze, pobawie się tymi filtrami przez ten czas.
  • #33
    hunterhouse
    Level 26  
    witam

    dzisiaj sobota jeden egzamin zdany a uczyć już sie nieopłaca wiec sobie usiadłem nad DFT, tak dla odstresowania, no i odstresowanie niewyszło bo znowu spaliłem Atmege i jeszcze drógiego At90s2313, nieudany mostek zegara :PP ale mniejsza o to, mam nauczke jak piwko to nie Atmegi :P

    ale do żeczy wprowadziłem szereg usprawnien i nowosci, dodałem mozłiwośc wolnego opadania słupków, wywaliłem niepotrzeby kod, poprowiłem dokladnosć prubkowania i dodałem mozłiwość zmiany nachylenia wykresu charakterystyki czułosci
    no i najważniejsze zyskałem jeszcze kilka ms :D poprzez poprzestawianie funkcji w pętli głuwnej, teraz jeden obrut pętli trwa 19ms@16MHz a procedura prubkowanie dolnych czestotliwości 16ms
    czego chcieć wiecej :PP

    acha i mogły sie pozmieniaś czułosci na wejsciu tak że kolega musiałby sobie to ręcznie wyregulować, analogowo

    jak idą filtry ?? bo ja w analogu to noga jestem :P te co tam zrobiłem to był szczyt moich możliwości
  • #34
    manekinen
    Level 29  
    Z filtrami dopiero dzisiaj zaczynam, nie miałem czasu wcześniej. Użyłem tego programu do policzenia filtrów http://www.elektroda.net/download/file823.html

    Ale mam jakieś problemy, zamiast sinusa na wyjściu mam jakiś krzak, i analizator wręcz głupieje, pokazując całe pasmo na raz. Gdy podłącze bezpośrednio beż żadnego filtra pokazuje wręcz idealnie, ale całe pasmo 1khz - 20khz widać w polu tego niższego... Albo ten program jest jakiś postrzelony, albo nie wiem :/

    DODANO

    potestowałem troche, przy 1100Hz słupki zaczynają wracać w drugą strone, więc odcięcie trzeba ustawić na ok. 1050

    Górne zaczyna już reagować od 750Hz, więc filtr także by się przydał, np. od tych 1100Hz. Już jestem na dobrym tropie, teraz licze w WinIsd pro, przynajmniej jakieś ludzkie wartości wychodzą :) Cierpliwości
  • #35
    hunterhouse
    Level 26  
    Quote:
    Gdy podłącze bezpośrednio beż żadnego filtra pokazuje wręcz idealnie, ale całe pasmo 1khz - 20khz widać w polu tego niższego...

    nom to normalne bez filtra, po przekroczeniu 1 kHz jak nieurzywasz filtra to dolna połowa zaczyna głupieć.
    filtr powinien być na około 1kHz bo powyżej tego dól już będzie głupiał
    góra radzi sobie dobrze z całym pasmem i powinna chwytać od 1,3KHz ale troche łapie wcześniej :/ a tym ze do muzyki to ja bym dał tylko na dolne pasmo filtr.
    jak układ przesterowywuje to pojawiają sie wszytkie charmoniczne i wtedy migają wszystkie paski, to tez normalne, niech kolega zmniejszy sygnał na wejsciu i powinno sie unormować.
    jak już pisąłem czyłosc sie zmieniła wraz ze zmianami
  • Altium Designer Computer Controls
  • #36
    manekinen
    Level 29  
    Ok można śmiało zrobić w ten sposób...

    Częstotliwość podziału to 1061Hz, stromość 20dB/oktawe.
    Dlaczego 1061? bo akurat tyle wychodzi przy 100nF i 1,5kOhma - takie ogólnodostępne wartości, z reszą można trzasnąć potencjometr i sobie posprawdzać. Zmiany to jakieś 500 omów, proponuje zamiast opornika 1,5K - dać w szereg opornik 1K i potencjometr 1K.

    1061 jest to akurat ten punkt w którym słupki zaczynają się "zawracać" w przeciwną stronę. Filtr zaczyna tłumić chyba już od 800, a przy 1300 sygnał jest na tyle stłumiony że nie przeszkadza. Może te 800 to za wczesnie i ostatni śłupek z dolnego troche mniej aktywny jest, więc można sobie podnieść troche, poeksperymentować, albo zostawić potencjometr na płytce w gotowym urządzeniu. Można by zrobić jeszcze bardziej stromy filtr który by ciął w mniejszym przedziale, ale myśle że ten wystarczy, w końcu to muzyka a nie jakieś pomiary.

    Górne pasmo niewiele wpływa na wskazania dolnego, więc nie trzeba filtra, ale jak ma się akurat podwójny opamp to czemu nie dołożyć R i C :)

    Aha no i wrzuciłem nowy program, musze powiedzieć że ta "czułość" jakoś dziwnie działa... Gdy zwiększam, wychylają mi się mocno ze trzy słupki, reszta siedzi cicho. Gdy zmniejszam, wychylają się wszystkie, ale strasznie "przebijają" na te obok. No i pierwszy słupek prawie że nie aktywny. Może i kwestia czułości, będzie trzeba dodać dwie regulacje wzmocnienia - dla dwóch pasm osobno.
  • #37
    Mat_91
    Level 25  
    Witam!!

    Bardzo zainteresował mnie ten analizator:D Z chęcią bym sobie go wykonał tylko mam mała prośbę:) możecie zamieścić aktualny schemat tego analizatora?? (tzn. z połączeniem wyświetlacza nie mam problemów ale pogubiłem sie przy tych filtrach). Będę naprawdę bardzo wdzięczny!;]

    Pozdrawiam!
  • #38
    manekinen
    Level 29  
    Wyjście filtra dolnoprzepustowego do PC.0 a górnoprzepustowego - lub bez filtra - do PC.1
    Z resztą w programie można to zmienić. Przy kwarcu 16MHz zalecam krótkie przewody do wyświetlacza bo krzaki mogą sie pojawiać.
  • #39
    Mat_91
    Level 25  
    ok;] dzięki za odpowiedź:D zobaczymy co z tego wyjdzie:)
  • #40
    Mariuszek15
    Level 24  
    manekinen Jaka jest wersja ostateczna tego analizatora widma. Bo wideo oglądałem to trochę źle napisany program do uC. Wyświetlają się nie potrzebne znaki i całość chaotycznie się porusza a słupki powinny się płynie poruszać. Możesz zrobić zdjęcia całego układu elektronicznego??
  • #41
    manekinen
    Level 29  
    Witam.

    Ostatnia wersja została załączona przez Hunterhouse, wideo które oglądałeś na Youtub'ie było nagrywane przed użyciem biblioteki LCDbusy, więc jest nieaktualne.
    Należy dostosować sobie program pod względem podłączenia pinów, w około połowie programu można znaleźć porty przetwornika ktorymi odbierany jest sygnał, i na początku programu konfigurację biblioteki LCDbusy bez której całość chodzi powolnie.
    Z poziomami sygnałów na wejściu utrzeba poeksperymentować. A co do filtrów, jeśli będą zasilane z tego samego napięcia +5V co uC, to nie trzeba dawać pomiędzy nimi a uC kondensatora odcinającego składową stałą.
    Mariuszek15 wrote:
    Możesz zrobić zdjęcia całego układu elektronicznego??

    Mariusz pisałem ci na gg dwukrotnie, i jeszcze raz napisze, że całość uruchamiałem na płytce uruchomieniowej uC, już dawno ta konfiguracja jest rozebrana. Możesz sobie pomóc schematem z pierwszego postu, choć jest on na inny uC i steruje ledami a nie LCD.
    Najlepiej wrzuć program w uC, i próbuj uruchomić, jak będą problemy to pisz :)
  • #42
    Mariuszek15
    Level 24  
    Znalazłem taki analizator widma akustycznego:
    http://www.sklep.avt.com.pl/photo/_pdf/AVT948.pdf
    I mam pytanie:
    Znalazłem taki LCD graficzny http://www.allegro.pl/item240982250_nowe_lcd_128x64_c_78x70mm_white_blue_tlo_led_.html ale jest inny sterownik LCD wiec musze pisać program od nowa. Czy jest ktoś mi w stanie pomóc przerobić ten program na ten właśnie LCD?? Znalazłem kod źródłowy :) Więc co muszę zmienić, aby go uruchomić na LCD z allegro?
    
    'Analizator widma z wyswietlaczem graficznym
    'Marcin Wiązania
    'marcin@wiazania@ep.com.pl
    
    $prog &HFF , &HEF , &HD9 , &H00                             ' generated. Take care that the chip supports all fuse bytes.
    $hwstack = 80                                               'ustawienie stosu
    $swstack = 80                                               'ustawienie stosu
    $framesize = 80                                             'ustawienie stosu
    $regfile = "m8def.dat"                                      'typ mikrokontrolera
    $crystal = 16000000                                         'czestotliwosc zegara
    
    $lib "glcd.lib"                                             'zalaczenie biblioteki obslugujacej wyswietlacz z kontrolerem wyswietlacza
    
    Config Graphlcd = 128 * 64 , Dataport = Portd , Controlport = Portb , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8       'konfiguracja graficznego LCD
    Config Adc = Single , Prescaler = 2 , Reference = Avcc      'konfiguracja przetwornika A/C
    Config Portc.2 = Output                                     'konfiguracja portow
    Config Portc.3 = Output
    Config Portc.4 = Output
    Config Portc.5 = Output
    
    Declare Sub Pomiar                                          'podprogram pomiaru
    
    Dim I As Byte                                               'zmienne
    Dim K As Byte
    Dim P As Byte
    Dim F(7) As Byte
    Dim Kol As Byte
    Dim Wart_ac As Word                                         'wartosc odczytana z przetwornika
    Dim Temp1 As Byte
    
    Res Alias Portc.2                                           'przypisanie aliasow do linii portow
    M_a Alias Portc.3
    M_b Alias Portc.4
    M_c Alias Portc.5
    
    Reset Res                                                   'wartosci poczatkowe zmiennych
    Cursor Off , Noblink                                        'inicjalizacja LCD
    Cls
    
    Start Adc                                                   'wlaczenie przetwornika
    Line(0 , 4) -(0 , 54) , 1                                   'instrukcje rysowania skali
    Line(0 , 54) -(3 , 54) , 1
    Line(0 , 44) -(3 , 44) , 1
    Line(0 , 34) -(3 , 34) , 1
    Line(0 , 24) -(3 , 24) , 1
    Line(0 , 14) -(3 , 14) , 1
    Line(0 , 4) -(3 , 4) , 1
    Line(127 , 4) -(127 , 54) , 1
    Line(127 , 54) -(124 , 54) , 1
    Line(127 , 44) -(124 , 44) , 1
    Line(127 , 34) -(124 , 34) , 1
    Line(127 , 24) -(124 , 24) , 1
    Line(127 , 14) -(124 , 14) , 1
    Line(127 , 4) -(124 , 4) , 1
    Line(4 , 63) -(124 , 63) , 1
    Line(4 , 63) -(4 , 62) , 1
    Line(24 , 63) -(24 , 62) , 1
    Line(44 , 63) -(44 , 62) , 1
    Line(64 , 63) -(64 , 62) , 1
    Line(84 , 63) -(84 , 62) , 1
    Line(104 , 63) -(104 , 62) , 1
    Line(124 , 63) -(124 , 62) , 1
    
    Do                                                          'program glowny
      Set Res                                                   'zerowanie detektorow
      nop                                                       'pusta instrukcja
      nop                                                       'pusta instrukcja
      Reset Res                                                 'odblokowanie zerowania
      Delay                                                     'opoznienie
    
      Reset M_a                                                 'obsluga kanalu 1 (000)
      Reset M_b
      Reset M_c
      K = 1                                                     'kanal 1
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(6 , I) -(21 , I) , Kol                             'wyswietlenie lub kasowanie w zaleznosci od kol linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I
    
      Set M_a                                                   'obsluga kanalu 2 (001)
      Reset M_b
      Reset M_c
      K = 2                                                     'kanal 2
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(26 , I) -(41 , I) , Kol                            'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I
    
      Reset M_a                                                 'obsluga kanalu 3 (010)
      Set M_b
      Reset M_c
      K = 3                                                     'kanal 3
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(46 , I) -(61 , I) , Kol                            'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I
    
      Set M_a                                                   'obsluga kanalu 4 (011)
      Set M_b
      Reset M_c
      K = 4                                                     'kanal 4
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(66 , I) -(81 , I) , Kol                            'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I
    
      Reset M_a                                                 'obsluga kanalu 5 (100)
      Reset M_b
      Set M_c
      K = 5                                                     'kanal 5
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(86 , I) -(101 , I) , Kol                           'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I
    
      Set M_a                                                   'obsluga kanalu 6 (101)
      Reset M_b
      Set M_c
      K = 6                                                     'kanal 6
      Call Pomiar                                               'wywolanie pomiaru
      For I = 54 To 4 Step -1                                   'petla rysowania slupka o dlugosci zaleznej od wartosci odczytanej z A/C
        If I >= F(k) Then                                       'jesli wartosc I wieksza lub rowna, to
          Kol = 1                                               'zapis wartosci 1 do zmiennej kol (piksele beda wyswietlane)
        Else                                                    'w przeciwnym razie
          Kol = 0                                               'zapis wartosci 0 do zmiennej kol (piksele beda wymazywane)
        End If
        Line(106 , I) -(121 , I) , Kol                          'wyswietlenie linii slupka
      Next I                                                    'zwiekszenie o 1 wartosci I
    
      Reset M_a                                                 'obsluga paska nagrywania (110)
      Set M_b
      Set M_c
      K = 7                                                     'obsluga paska nagrywania
      Wart_ac = Getadc(0)                                       'odczyt wartosc z przetwornika
      Wart_ac = Wart_ac / 4                                     'przeliczenie odczytanej wartosci
      Temp1 = Low(wart_ac)                                      'przeliczenie odczytanej wartosci
      If Temp1 > 53 Then                                        'jesli wartosc wieksza od 53 to
      Temp1 = Temp1 - 50                                        'odjecie wartosci 50
      Else                                                      'w przeciwnym razie
      Temp1 = 4                                                 'przypisanie wartosci 4
      End If
      If Temp1 > 124 Then                                       'jesli wartosc > od 124
        Temp1 = 124                                             'to przypisanie wartosci 124
      End If
      Line(4 , 58) -(124 , 58) , 0                              'wymazanie poziomego paska
      Line(4 , 59) -(124 , 59) , 0                              'wymazanie poziomego paska
      Line(4 , 60) -(124 , 60) , 0                              'wymazanie poziomego paska
      Line(4 , 58) -(temp1 , 58) , 1                            'wyswietlenie poziomego paska
      Line(4 , 59) -(temp1 , 59) , 1                            'wyswietlenie poziomego paska
      Line(4 , 60) -(temp1 , 60) , 1                            'wyswietlenie poziomego paska
    Loop                                                        'koniec petli glownek
    End                                                         'koniec programu
    
    Sub Pomiar                                                  'procedura pomiaru
      Delay                                                     'opoznienie
      Wart_ac = Getadc(0)                                       'odczyt wartosci z A/C
      Wart_ac = Wart_ac / 10                                    'podzielenie wartosci przez 10
      Temp1 = Low(wart_ac)                                      'zapis do zmiennej Temp1 mniej znaczacego bajtu zmiennej wart_ac
      If Temp1 > 50 Then                                        'jesli wartosc wieksza od 50 to
        Temp1 = 50                                              'zapis do temp1 wartosci 50
      End If
      F(k) = 54 - Temp1                                         'obliczenie wielkosci slupka
      If F(k) < 4 Then                                          'jesli wartosc slupka mniejsza niz 4 to
        F(k) = 4                                                'zapis wartosci 4
      End If
    End Sub                                                     'koniec podprogramu
  • #43
    Jdsoul
    Level 23  
    Jak dużo zasobów i czasu zabiera analiza ??

    Znalazłoby by się wolne miejsce na zrzut danych do PC ??

    Przydałby mi się taki sprzęt do pomiarów "w polu" widma dźwiękowego w pomieszczeniach z rejestracją na PC !!!

    Czy problemem byłoby skonstruowanie urządzenia na wszystkie 31 kanałów typowego korektora graficznego lub cofnięcie się do innej typówki 15 kanałów ??
    Czy dalsze zwiększanie ilości słupków coś wniesie np. użycie wyświetlacza 4x40 znaków etc.

    i ostatnie pytanie czy efekty pracy procedur liczących można byłoby traktować jako wynik pomiarowy - interesuje mnie zastosowanie do pomiaru STI lub RASTI.
  • #44
    manekinen
    Level 29  
    Z początku ten analizator był na 10 słupków, nie problemem było przerobić go na 16 słupków. Teraz mam wyświetlacz 24x2, jak znajde chwile to pokombinuje jak by to zrobić i zamieszcze swoje wypociny - ale to chyba mija się z celem bo 12 słupków będzie liczone z jednego przetwornika, więc rozdzielczość do bani, a i uC się napracuje, więc wszystko wolniej będzie śmigało.

    Co do 31 kanałów... raczej na pewno 31 uC, jeden przy 16MHz ledwie radzi sobie z jednym kanałem, i nie ma czasu na żadne dodatkowe operacje.

    Co do ostatniego pytania - wynik jest dosyć chaotyczny, nadaje się jedynie na przedstawienie widma jako bajer, na pewno nie jako jakieś źródło do dokonywania pomiarów. Mówie cały czas o programie do LCD alfanumerycznego.

    Mariuszek15 - nie mam pojęcia, musisz ściągnąć specyfikację tych wyświetlaczy, i rozkminić jak to zrobić pod bascomem. Ja Ci nie pomogę, bo nie mam nawet czasu dokończyć własnego projektu.

    Pozdrawiam.
  • #45
    Jdsoul
    Level 23  
    Dzięki!

    Z tymi 31 pasmami myślałem o 31 słupkach zgodnie z wymogami korektorów graficznych :) istnieją dwa typowe standardy z filtrtami o dwóch rożnych szerokościach pasma - 15 i 31:) Więc dobrze by było móc dostosować częstotliwości słupków do częstotliowści suwaków korektora.

    Rozumiem że dla AVR te 31 pasm to za dużo, ale z 15 nie będzie większego problemu. Znaczy się będę mógł popatrzeć na efekty pracy korektora +/-12dB na każdym pasemku :)

    Co do algorytmu obliczeniowego to jest to DFT :) czy wyniku nie da się przetworzyć i wysłać na PC ??? Pomiar RASTI jest oparty o analizę zgodności sygnału mieżonego z zadanym wzorem , więc może mając dane cyfrowe mógłby jeszcze policzyć korelację przebiegów ??
  • #46
    manekinen
    Level 29  
    Witam, mam nadzieję że tym razem rozwieje już wszelkie wątpliwości...

    A więc robimy filtr-przedwzmacniacz, tak jak w załączniku. zasilanie może być to same co uC, aczkolwiek zalecam więcej, np. 9V. Masa wspólna. Na schemacie nie rysowałem samego uC, a to dla tego że każdy wykorzysta inny, więc mija się to całkowicie z celem...

    LCD podłączamy pod dowolny port uC, w programie została wykorzystana biblioteka LCD4BUSY, a więc MUSIMY podłączyć LCD w następujący sposób:
    DB7 = P.7
    DB6 = P.6
    DB5 = P.5
    DB4 = P.4
    E = P.3
    RW = P.2
    RS = P.1

    to, który port wybraliśmy, podajemy w tym miejscu programu:
    $lib "lcd4busy.lbx"
    Const _lcdport = Portb
    Const _lcdddr = Ddrb
    Const _lcdin = Pinb
    Const _lcd_e = 3
    Const _lcd_rw = 2
    Const _lcd_rs = 1
    Config Lcd = 24 * 2

    czyli, jeśli wybrałem port B, to mam Portb, Ddrb, i Pinb.
    Dodatkowo podajemy jaki mamy wyświetlacz, jest to konieczne dla tej biblioteki.
    Inne ustawienia wyświetlacza podane w programie nie są brane pod uwagę jeśli korzystamy z tej biblioteki.

    Następnie pod dowolne dwa wejścia przetwornika w naszym uC, podajemy sygnały z filtra-przedwzmacniacza. Które porty wybraliśmy, można ustawić w programie w tym miejscu:
    Sample_l:
    'pobiera 32 próbki z częstotliwością 2kHz
    Config Adc = Single , Prescaler = Auto , Reference = Avcc
    Start Adc
    
    Timer1 = 0
    Enable Compare1b
    Sam = 0
    Sampling = 1
    Return
    
    
    Samplel:
    Timer1 = 0
    Incr Sam
    Sample_l(sam) = Getadc(2)                                   'NIŻSZE PASMO
    If Sam = 32 Then
       Disable Compare1b
       Sampling = 0
    End If
    Return
    
    
    
    
    Sample_h:
    'pobiera 32 próbki z częstotliwością 44kHz
    Config Adc = Single , Prescaler = 2 , Reference = Avcc
    'ADC działa już dość niestabilnie na preskalerze 2 ale na 4 już sie nie wyrobi i prubkuje z f=37kHz
    ' przez duże f pojawiaja sie szumy jak podajemy sygnał z generatora
    Start Adc
    
    Timer1 = 0
    Enable Compare1a
    Sam = 0
    Sampling = 1
    Return
    
    Sampleh:
    Timer1 = 0
    Incr Sam
    Sample_h(sam) = Getadc(3)                                   'WYŻSZE PASMO
    If Sam = 32 Then
       Disable Compare1a
       Sampling = 0
    End If
    Return

    Zmieniamy artości w nawiasach Getadc(0)
    Niższe pasmo, tj te z filtrem dolnoprzepustowym, podajemy do sample_l a wyższe, bez filtra, do sample_h. Proszę się nie sugerować oznaczeniami na schemacie, po prostu każdy podłącza jak mu pasuje, i podaje w programie spod jakiego przetwornika program ma pobierać próbki z jakiej części pasma. Np. jeżeli postanowiliśmy podłączyć niższe pasmo pod ADC6, to podajemy: Sample_l(sam) = Getadc(6)


    Podłączamy zewętrzny kwarc 16MHz, i zmieniamy fusebity aby uC korzystał z właśnie tego kwarcu. Pobieramy program z ostatniego postu kolegi Hunterhouse, kompilujemy, i wrzucamy w proca.

    Przed tym można jeszcze zmienić kilka opcji, tj:
    Const Falloff = 1

    Tutaj ustawiamy co ile pętli programu mają się aktualizować słupki, po prostu jak wpiszemy 10 to analizator będzie pracował 10 razy wolniej, Na 1 jest w sam raz.

    Const Lcd_offset = 5

    Tutaj możemy przesunąć widmo na wyświetlaczu, jeżeli będzie "1" to wyświetlane będzie od pierwszego segmentu. Ja wpisałem "5" bo zaczynam od 5 segmentu.

    Const Czulosc = 40

    Ustawiamy czułość układu, Domyślnie 40, zalecam zmienić na 20, ale najlepiej oczywiście dobrać eksperymentalnie.


    W zasadzie to wszystko. Potencjometry wzmocnienia ustawiamy na 0, i odpalamy układ.
    Odpalamy generator przebiegu sinusoidalnego, np. program z załącznika, i powoli zwiększamy częstotliwość, obserwując LCD. Jeśli słupki wychylają się bardzo słabo, podkręcamy lekko sygnał potencjometrami. Jeśli słupki wychylają się dobrze ale zamiast tylko tych od danej częstotliwości wychyla się kilka (więcej niż 3 na raz), oznacza to że podany sygnał jest za wysoki i przetwornik przesterowuje się. Najlepiej ustawić sygnał obu pasm na 2.5 - 3V.

    To by było na tyle, proszę nie zadawać pytań w sprawach oczywistych, na które odpowiedź jest już na forum. Enjoy. W krótce wrzuce filmik na youtube, i zamieszcze program wyświetlający 24 słupki (teraz jest 16).

    Pozdro.

    DODANO

    oczywiście autorem programu jest Hunterhouse




    DODANO

    A oto filmik prezentujący działanie, zapraszam do kopiowania :)
    http://pl.youtube.com/watch?v=Ecq9a97DcmI

  • #48
    saper18
    Level 13  
    Zainteresował mnie projekt analizatora widma akustycznego. Chciałbym go zrobić. Ale z racji takiej że nie znam się ani na projektowaniu płytek ani na pisaniu programu do mikrokontrolera więc chciałbym sie dowiedzieć czy masz jakieś pliki do termotransferu odnośnie tej płytki, schematy ideowe itp. Kiedyś składałem przedwzmacniacz cyfrowy na atmega8 i wyświetlaczu 2x16 (http://www.artronic.pl/o_produkcie.php?id=801 na dole jest schemat wyprowadzeń). I takich chciałbym użyć części do budowy analizatora. Chciałbym też się dowiedzieć jakich użyć pozostałych elementów. Wyczytałem że często zmieniałeś częstotliwość, i inne rzeczy. Ja chciałbym mieć taki projekt żeby działał od pierwszego włączenia, żeby nie trzeba było nic dobierać metodą prób i błędów. Da się tak? Z góry dziękuję i pozdrawiam.
  • #49
    Thunderacer
    Level 18  
    Witam!
    Mnie również zainteresował ten projekt. Najchętniej połączyłbym go z fukcjami zestawu AVT3008, jednak obawiam się, że mnie to może przerosnąć. Czy zautor wątku może zamieścić schemat obwodów drukowanych?
    pozdrawiam,
    Jacek
  • #50
    manekinen
    Level 29  
    Odkopie jeszcze temat... niektórzy naprawdę nie mogą się wysilić żeby przeczytać temat od początku. Dostaje co jakiś czas wiadomości na PW, maile, żebym udostępnił schemat/płytkę. Ludzie! Proszę was czytajcie dokładnie, jak byk jest napisane że żaden schemat, ani żadna pcb do tego nie istnieje, że zostało to tylko na chwilę złożone na płytce uruchomieniowej AVR.

    Dla tego machnąłem na szybko schemacik. W załączniku także program BAS i już skompilowany BIN, w wersjach na wyświetlacze 16x2 i 24x2. Programy ustawione do współpracy z tym schematem. Nie dam sobie głowy uciąć że nie machnąłem jakiegoś błędu, bo rysowałem z głowy, i nie sprawdzałem. Powinno działać.

    Płytki nie robiłem, każdy może sobie sam taką prostą płytkę zrobić. Zalecam wcześniej uruchomić w pająku - a z tego to względu aby indywidualnie dobrać elementy filtra, tzn dostosować go do podawanego sygnału. Oczywiście fusebity ustawiamy na zewnętrzny kwarc 16MHz.
  • #52
    manekinen
    Level 29  
    Mariuszek15, właśnie zauważyłem że na tej płytce jest błąd przy zasilaniu LCD, masa z + są zamienione biegunami, przy czym masa nawet nie łączy się fizycznie z pinem wyświetlacza.

    Zrobiłem dzisiaj kilka prób z tym analizatorem...
    Dopasowałem filtr dolnoprzepustowy, jest to filtr chebysheva 4 rzędu, odcięcie 890MHz. Spisuje się rewelacyjnie, wyższe pasmo nie ma wpływu na niższe, co występowało przy poprzednim prymitywnym filtrze.
    Z tym że mała uwaga - musimy przyjąć że filtr ma zasilanie symetryczne. Masa na schemacie filtra to sztuczna masa pomiędzy + a GND układu. Czyli 2.5v jeśli zasilamy WO z 5V. Zrobiłem ją na dzielniku rezystorów 1:1 470 ohm, spisywało się to dobrze. Filtr zasilałem z tego samego napięcia co uC.
    Druga uwaga - Na schemacie potencjometry te były podpięte z jednej strony do masy, a z drugiej do wejścia odwracającego. I tutaj naszą masę potencjometru przepinamy na sztuczną masę, na wysokość 2.5V tak jak WO.
    Program trzeba wykalibrować stałą CZUŁOŚĆ, zmieniając ją w zakresie 10 - 50. Po tych zabiegach naprawdę działa to ładnie.


    DODANO

    Załączam nowy schemat. Może nie wygląda profesjonalnie, ale wiadomo o co chodzi. WO to poczwórny LM324. Można oczywiście użyć dowolnego/dowolnych. Dwa pierwsze stopnie to odseparowanie sygnału od toru audio, tak aby nie wprowadzić do niego żadnych zakłóceń. Dwa kolejne to wyżej wspomniany filtr chebysheva dla wyższego pasma. Są dwa wejścia, tak aby przyłączyć się do dwóch kanałów.

    Z wejść usunąłem kondensatory, można je dołożyć spowrotem, ale trzeba w takim wypadku zmienić rezystory wejściowe ze 100K na jakieś 20K tak aby kondensator się szybciej naładował odcinając składową stałą. Z tym też eksperymentalnie.

    Ten schemat został przetestowany i działa. W razie problemów proszę pisać, mam teraz trochę wolnego czasu to pomogę. Przyznaje że poprzedni schemat zawierał pewną niejasność przy połączeniu LCD, i mógł zostać źle zinterpretowany przez kolegę robiącego płytkę.

    Pozdrawiam.

    PS. w załączniku także plik *.sch ealge z wersji 4.11.
  • #53
    Mariuszek15
    Level 24  
    manekinen Czy płytka jest już poprawna?? Możesz jeszcze pokazać połączenie wyświetlacza z płytką drukowaną:
    http://www.artronic.pl/o_produkcie.php?id=824?

    I pokazać jak i w którym wierszu należy wykalibrować stałą CZUŁOŚĆ, zmieniając ją w zakresie 10 - 50. I jak należy ustawić fusebity na 16MHz?? Prosiłbym o print screena okienka z "fusami".
  • #54
    manekinen
    Level 29  
    na samym początku programu, w 7 linii masz:
    
    Const Falloff = 1                                           'ilość cykli po jakim słupki opadną, wolne opadanie
    Const Lcd_offset = 1                                     'pole wyświetlacza od którego wyświetla się pierwszy słupek
    Const Czulosc = 15                                       'tutaj sobie dopasowujemy czułość, u mnie dobrze spisywało się na 15
    

    Mariuszek15 wrote:
    Możesz jeszcze pokazać połączenie wyświetlacza z płytką drukowaną

    Na schemacie masz gniazdo 1x16pin. W większości wyświetlaczy jest takie pojedyńcze właśnie. W tym z linku (mam taki sam) masz 2x8, i piny masz ponumerowane 1-16. W sumie można było na płytce zrobić gniazdi 2x8, ale to i tak mija się z celem bo wykorzystujemy tylko połowę połączeń. Po prostu połącz w takiej kolejności 1-16 jak masz na płytce, licząc od pinu zasilania.
    Albo lepiej patrz na to co pisałem wyżej, w programie masz że:
    DB7 = PD.7
    DB6 = PD.6
    DB5 = PD.5
    DB4 = PD.4
    E = PD.3
    RW = PD.2
    RS = PD.1


    Aha no i tak sobie myślę że można by jeszcze dołożyć ze dwa przyciski na płytkę, i z nich mieć dostęp do ustawień chociaż by czułości. Jak myślisz przydatne by to było? W sumie taki analizator to chyba pracował by w jakimś urządzeni udocelowym, zozstał by raz ustawiony i by sobie tam pracował.
  • #55
    Mariuszek15
    Level 24  
    manekinen Jak szaleć to można dorobić 4 przyciskową klawiaturę wykorzystując porty PC2, PC3, PC4, PC5.

    Dodatkowe funkcje:
    Regulowanie czułości układu (2 przyciski)
    Regulowanie jasności podświetlenia LCD (2 przyciski)

    Wiążę się to ze zmianą softu uC i zmiane płytki drukowanej :) Zaprezentuj okienko "fusów" jak mają być ustawione dla rozwiania wątpliwości ;)
  • #56
    manekinen
    Level 29  
    Można było by takie coś wykonać, z tym że nie skorzystamy z zewnętrznych przerwań, bo cały portD jest wykorzystay przez LCD. i musi być, biblioteka lcd4busy wymaga całego portu. PortB jest częściowo wykorzystany przez kwarc, a portC przez przetwornik, więc odpadają. A sprawdzanie za każdym razem 4 pinów spowolniło by program, może nie znacznie ale odczuwalnie.
    Co do jasności LCD - musiało by się to odbywać przez PWM, nie ma czasu na takie rzeczy w programie. Ewentualnie przetwornik C/A, ale to już chyba przerost formy nad treścią.

    Co do fusebitów - przyklejony temat :)
    1110 - zewnętrzny kwarc z kondensatorami 10-16MHz
    0 - bit CKOPT
  • #58
    manekinen
    Level 29  
    Witam. Dopiero teraz zauważyłem że machnąłem się na ostatnim schemacie. pierwszy pin lcd powinien być masą a drugi +5. Tak to jest jak się coś robi niemal że w nocy. Mam nadzieję że nikt sobie nie uszkodził wyświetlacza w ten sposób. Zamieszczam poprawioną płytkę, zmniejszyłem też ją troche. załącznik eagle, i dwa obrazy MDI (microsoft document imaging) 1:1, tak że można sobie od razu wydrukować. Jeden to ścieżki, a drugi to nadruk na wierzchnią stronę (już odwrócony w poziomie)

    EDIT...

    ciągle znajdujemy jeszcze jakieś błędy... jak nie w programie to na schemacie... jednym działa, innym nie... wstrzymajcie sie narazie... nie długo dam znać, i zamieszcze wersje w 100% działającą