(3 głosujących) Opisywane urządzenie znakomicie nadaje się jako wzmacniacz multimedialny. Zaletą układu jest możliwość sterowania z komputera lub za pomocą pilota pracującego w standardzie Rc5. Główną częścią urządzenia jest sterownik zbudowany w oparciu o mikrokontroler ATMega162. Jego zadaniem jest między innymi komunikacja z komputerem PC przez port RS-232, sterowanie przedwzmacniaczem cyfrowym TDA8425, pomiar temperatury końcówki mocy, sterowanie chłodzeniem oraz zapis ustawień do pamięci EEPROM. Jako końcówkę mocy zastosowano dwa układy TDA2030 dostarczające moc ok. 2x15W. Aplikacja sterująca została napisana w programie LabVIEW firmy National Instruments (http://www.ni.com/) w ramach zajęć z przedmiotu Komputeryzacja Pomiarów jako projekt zaliczeniowy.
Działanie:Schemat ideowy sterownika przedstawiony jest na rysunku poniżej: Sercem układu jest mikrokontroler U1 (ATMega162) wraz z rezonatorem kwarcowym X1 (16MHz) i dwoma kondensatorami C1 (22pF) i C2 (22pF). Potencjometr P1 (10k) służy do regulacji kontrastu wyświatlacza LCD W1 (20x4). Tranzystory T3 (BC547B) oraz T4 (BD140) wraz z rezystorami R12 - R14 (3,3k) stanowią obwód wykonawczy do sterowania pracą wentylatora (z pomiarem obrotów, trójprzewodowy) podłączonego do złącza Went. Przyciski S1 - S8 (uSwitch) służą do ustawiania parametrów pracy wzmacniacza (poziom głosu, tony niskie i wysokie, wyciszenie oraz zmiana wejść). Złącze SW_Goldpin umożliwia podłączenie Odbiornika Rc5 a przez to sterowanie wzmacniaczem za pomocą pilota. Tranzystory T1 (BC557B) i T2 (BC547B) oraz rezystory R1 - R3 (10k) tworzą prosty interfejs RR-232. Rezystory R16 (3,3k) oraz R17 (3,3k) podciągają linie magistrali I2C do plusa zasilania. Złącze GP zapewnia kontakt sterownika z płytką wzmacniacza oraz jest jednocześnie złączem zasilania sterownika. Kondensator C4 (100uF) filtruje napięcie zasilające. Prog1 jest złączem programującym a rezystory R4 - R7 (330R) zabezpieczają port LPT komputera przed ewentualnym uszkodzeniem. Diody LED D1 - D4, wraz z rezystorami R8 - R11 (330R) ograniczającymi ich prąd, informują o stanach pracy układu (wyciszenie, wejścia, autozapis ustawień). Do pomiaru temperatury służy czujnik DS18B20 podłączony do złącza ds. Rezystor R15 (4,7k) umożliwia poprawną pracę magistrali 1-Wire. Schemat ideowy wzmacniacza przedstawia poniższy rysunek: Kondensatory C19 - C22 (470nF) odcinają składową stałą od wejśc procesora dźwięku U2 (TDA8425) natomiast kondensatory C9 (2,2uF) i C10 (2,2uF) robią to samo z wyjściami układu U2. Elementy C13 - C14 (33nF), C15 - C16 (15nF) oraz C17 - C18 (5,6nF) i C23 (100uF) zostały zastosowane zgodnie z zaleceniami producenta układu TDA8425 a ich wartości pochodzą wprost z karty katalogowej. Są one konieczne do poprawnej pracy procesora dźwięku. Zasilacz zbudowany jest w oparciu o stabilizatory U3 (7812) i U4 (7805) dostarcza napięć zarówno dla przedwzmacniacza jak i płytki sterownika (dzięki złączu GP). Kondensatory C11 (4700uF), C12 (47uF) oraz C24 (47uF) filtrują napięcie zasilania i są konieczne do poprawnej pracy stabilizatorów. Złącza IN1 oraz IN2 stanowią dwa stereofoniczne niezależne wejścia, które mogą współpracować z źródłem dźwięku takim jak: komputer, odtwarzacz mp3 czy radio. Złącze AN podłączone do wyjścia procesora dźwięku ma zostać podłączone do wejścia liniowego w komputerze w celu umożliwienia analizy sygnału. Rezystory R1a (100k), R2a (100k) i R3a (100k) służą do polaryzacji stopni wstępnych wzmacniacza, kondensator C2a (22uF) filtruje to napięcie polaryzacyjne. Kondensator C1a (1uF) zapobiega przedostawaniu się napięć stałych do wzmacniacza oraz na zewnątrz urządzenia. Elementy R4a (4.7k), R5a (150k) oraz C3a (2.2uF) pracują w pętli ujemnego sprzężenia zwrotnego i mają za zadanie kształtoanie charakterystyki widmowej wzmacniacza. Rezystor R6a (1R) wraz z kondensatorem C5a (100nF) pracują w układzie, który kształtuje charakterystyke na wyjściu. Kondensator C6a (1000uF) zapobiega przepływowi stałego prądu przez głośnik. Diody D1a (1N4007) oraz D2a (1N4007) zapobiegają pojawieniu się groźnych napięć, które mogą powstać w cewce głośnika. Kondensatory C7a (100uF) i C8a (100nF) filtrują dodatkowo napięcie zasilające obie końcówki mocy. Drugi kanał końcówki mocy ma identyczną budowę i zasadę działania a jego elementy oznaczone są literą "b". Budowa:Sterownik można zbudować w oparciu o płytkę dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż należy rozpocząć od wlutowania dwóch najkrótszych zworek. Pozostałe dwie należy wykonać kawałkami izolowanych przwodów dopiero po przylutowaniu podstawki pod mikrokontroler U1. Potencjometr P1, znajdujący się pod wyświetlaczem można zamontować w pozycji leżącej, tak aby umożliwić wygodniejszą regulację kontrastu wyświetlacza. Montaż pozostałych elementów jest typowy i nie stwarza problemów. Specjalne rozmieszczenie elementów na płytce stwarza możliwość rozcięcia jej na dwie części w poziomie. Umożliwi to zamontowanie obu części w ewentualnej przyszłej obudowie. Złącze DB9F należy w takim wypadku podłączyć przewodami i umieścić na tylnej ścianie obudowy. Sposób podłączenia wentelatora na tym samym stabilizatorze co procesor dźwięku powoduje generowanie niewielkich zniekształceń w torze audio, związanych z impulsową pracą wentylatora. Zniekształcenia słyszalne są tylko gdy wzmacniacz pracuje bez sygnału wejściowego. Gdyby było to problemem można zastosować osobny stabilizator dla wentylatora. Pomocą przy konstrukcji może okazać się dostępny tutaj schemat montażowy. Wzmacniacz można zbudować w oparciu o płytkę dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż należy rozpocząć od wlutowania wszystkich zwór. Kolejność pozostałych elementów jest dowolna. Pod układ U2 dobrze jest zastosować podstawkę. Końcówki mocy muszą być koniecznie wyposażone w radiator, podobnie jak stabilizatory U3 i U4. Na płyce przewidziane są miejsca na złącza JACK do druku. Podyktowane jest to faktem iż opisywany projekt miał służyć jako wzmacniacz pokazowy. Bez żadnego problemu można umieścić gniazda w tylnej ścianie obudowy i połączyć je z płytką za pomocą skrętek przewodów. Do zasilania wzmacniacza należy zastosować transformator sieciowy o mocy ok. 50W i napięciu ok 17-20V. Uzwojenie wtórne transformatora należy podłączyć do złącza śrubowego Zas. Pomocą przy konstrukcji może okazać się dostępny tutaj schemat montażowy. Wykaz Elementów:Sterownik:2x Listwa Gold Pin 1x3 1x Listwa Gold Pin 1x7 1x Listwa Gold Pin 1x10 1x Złącze szufladkowe na goldpiny 1x8 1x Złącze szufladkowe na goldpiny 1x16 8x uSwitch 12x12mm 1x Złącze DB9F do druku 8x 330R 2x 22pF 1x Rezonator Kwarcowy 16MHz Wzmacniacz3x Złącze ARK2 3x Złącze Jack 3,5mm do druku 1x Listwa Gold Pin 1x7 2x 1R 2x 5,6nF MKT 2x 1uF Elektrolit 4x 1N4007 Programowanie:Fragmenty programu napisanego w języku BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/) przedstawione są poniżej: Ten fragment pętli głównej programu odpowiedzialny jest za realizacją odczytu jednego bajtu danych przychodzących z portu RS-232 oraz jego odpowiednią interpretację: Rs_wartosc = Inkey() Rs_adres = Rs_wartosc Shift Rs_adres , Right , 5 Rs_wartosc = Rs_wartosc And &B00011111 If Rs_adres = 1 Then 'glos l i r Glos_l = 224 + Rs_wartosc 'wartosc 0-31 Gosub Wyslij_tda8425 Gosub Wyswietl End If If Rs_adres = 3 Then 'bass Bass = 242 + Rs_wartosc 'wartosc 0-9 (0->-12dB,4->0dB, 8->12dB, 9->15dB) Gosub Wyslij_tda8425 Gosub Wyswietl End If If Rs_adres = 4 Then 'treble Treble = 242 + Rs_wartosc 'wartosc 0-8 (0->-12dB,4->0dB, 8->12dB) Gosub Wyslij_tda8425 Gosub Wyswietl End If If Rs_adres = 5 Then 'funkcje Funkcje.0 = Rs_wartosc.0 '[1][mu][efl][stl][we1=0 we2 =1] Funkcje.3 = Rs_wartosc.1 Funkcje.4 = Rs_wartosc.2 Funkcje.5 = Rs_wartosc.3 Gosub Wyslij_tda8425 Gosub Wyswietl End If If Rs_adres = 6 Then 'pwm If Rs_wartosc = 31 Then 'wartosc 0-25 ->ustawia pwm i reczny tryb Went_auto = 1 'wartosc 31 -. ustawia automatyczny tryb Else Went_auto = 0 Went_pwm = Rs_wartosc End If End If If Rs_adres = 2 Then 'zgloszenie potrzeby wyslania danych Rs_wyslij1 = 1 Rs_wyslij2 = 1 End If Poniższy fragment kodu wykonywany jest co 4ms. Jego zadaniem jest obsługa klawiatury oraz wysyłanie dwóch pięciobajtowych paczek danych do komputera PC: If Flaga_4ms = 1 Then 'co 4ms Reset Flaga_4ms '*************** If Sw_port <> 255 And Stan_portu = Sw_port Then Incr Licznik_sw If Licznik_sw = 50 Then Licznik_sw = 0 Select Case Stan_portu Case 127: If Glos_l < 255 Then Incr Glos_l Case 247: If Glos_l > 224 Then Decr Glos_l Case 239: Funkcje.5 = Not Funkcje.5 'mute Case 254: Funkcje.0 = Not Funkcje.0 'wejscia Case 223: If Treble < 250 Then Incr Treble Case 253: If Treble > 242 Then Decr Treble Case 191: If Bass < 251 Then Incr Bass Case 251: If Bass > 242 Then Decr Bass Case 246: ' reset Glos_l = 224 Bass = 246 Treble = 246 Funkcje = 238 Went_auto = 1 Rs_wyslij1 = 1 Rs_wyslij2 = 1 End Select Gosub Wyslij_tda8425 Gosub Wyswietl Rs_wyslij1 = 1 'flaga powodujaca wyslanie rs End If Else Stan_portu = Sw_port Licznik_sw = 45 End If Rs_kolejnosc = Not Rs_kolejnosc If Rs_kolejnosc = 1 Then If Rs_wyslij1 = 1 Then Rs_wyslij1 = 0 'jednorazowo wysyla parametry dzwieku Printbin 255 ' powoduje rozpoznanie bajtu jako ust dzwięku Printbin Glos_l '224-255 Printbin Bass 'min=242 0=246 max = 251 Printbin Treble 'min=242 0=246 max = 250 Printbin Funkcje '[1][1][mu][efl][stl][1][1][we1=0 we2 =1] End If Else If Rs_wyslij2 = 1 Then Rs_wyslij2 = 0 'jednorazowo wysyla temp, pwm i rpm If Went_auto = 1 Then Went_pwm_send = 31 Else Went_pwm_send = Went_pwm End If Printbin Went_pwm_send Printbin Tempa Printbin Went_rpm End If End If '*************** End If Głównym zadaniem tej części programu jest odczyt temperatury i obliczanie obrotów wentylatora a także realizacja automatycznego regulatora obrotów w zależności od temperatury. Ten fragment programu wykonywany jest co 1s. If Flaga_1s = 1 Then 'co 1s Reset Flaga_1s '*************** Pomiar_odczyt = Not Pomiar_odczyt Disable Interrupts 1wreset If Pomiar_odczyt = 1 Then 1wwrite &HCC 1wwrite &H44 Else 1wwrite &HCC 1wwrite &HBE Lsb = 1wread(): Msb = 1wread(): Tempa = Msb * 256 Tempa = Tempa + Lsb Tempa = Tempa * 10 'temperatura *10 Tempa = Tempa / 16 End If Enable Interrupts Locate 4 , 2 Tempa_10 = Tempa / 10 Tempa_help = Tempa_10 * 10 Tempa_1 = Tempa - Tempa_help Lcd Tempa_10 ; "." ; Tempa_1 ; Chr(2) ; "C " If Went_auto = 1 Then 'sterowanie automatyczne went od temp Went_pwm = Tempa_10 / 5 If Went_pwm > 25 Then Went_pwm = 25 End If Went_rpm_help(1) = Went_rpm_help(1) * 10 'mnożnik = (60/czaspomiaru)*(1/imp na obrot)*(1/3wartosci do sredniej) If Went_rpm_help(1) < 10000 Then Went_rpm = Went_rpm_help(1) Went_rpm = Went_rpm + Went_rpm_help(2) Went_rpm = Went_rpm + Went_rpm_help(3) Went_rpm_help(3) = Went_rpm_help(2) Went_rpm_help(2) = Went_rpm_help(1) End If Went_rpm_help(1) = 0 Rs_wyslij2 = 1 'flaga powodujaca wyslanie rs Locate 4 , 12 If Went_rpm < 1000 Then Lcd " " If Went_rpm < 100 Then Lcd " " If Went_rpm < 10 Then Lcd " " Lcd Went_rpm If Save_en = 1 Then 'zapisywanie do eeprom gdy cos zmieniono w tda i nie zmieniano przez 5 sec Incr Save_count If Save_count = 5 Then Save_count = 0 Save_en = 0 Led_save = 0 Writeeeprom Glos_l , Dane Writeeeprom Bass Writeeeprom Treble Writeeeprom Funkcje End If Else Save_count = 0 Led_save = 1 End If '*************** End If Widoczna poniżej obsługa przerwania timera 0 zajmuje się obliczaniem opoznień 4ms i 1s oraz ustawianiem flag potrzebnych do pracy głównej pętli programu. Zawarta jest tutaj także prosta realizacja zmiany obrotów przez regulację wypełnienia przebiegu prostokątnego podawanego na wentylator: Prztimer0: 'co 4ms Timer0 = 5 Incr Went_licz If Went_licz = 25 Then Went_licz = 0 If Went_licz < Went_pwm Then Set Went Else Reset Went Set Flaga_4ms Incr Dzielnik If Dzielnik = 250 Then Dzielnik = 0 Set Flaga_1s End If Return Poniższy fragment kodu zawiera dwie procedury umożliwiające sterowanie pracą procesora dźwięku: Wyslij_i2c: I2cstart I2cwbyte 130 I2cwbyte Adres I2cwbyte Wartosc I2cstop Waitms 1 Return Wyslij_tda8425: If Led_save = 1 Then Save_en = 1 Save_count = 0 End If Adres = 0 Wartosc = Glos_l Gosub Wyslij_i2c Adres = 1 Wartosc = Glos_l Gosub Wyslij_i2c Adres = 2 Wartosc = Bass Gosub Wyslij_i2c Adres = 3 Wartosc = Treble Gosub Wyslij_i2c Adres = 8 Wartosc = Funkcje Gosub Wyslij_i2c Return Aplikacja Sterująca:Do obsługi wzmacniacza wykorzystano aplikację napisaną w LabVIEW. Niestety wersja programu dostępna na uczelni nie pozwoliła stworzyć odrębnie działającej aplikacji i do jej działania wymagane jest LabVIEW 7.1 oraz sterowniki sprzętowe dostępne na stronie firmy National Instruments (http://www.ni.com/). Wzmacniacz podłączony jest do komputera PC za pomocą interfejsu RS-232 a mierzony sygnał audio podawany jest na wejście liniowe karty dźwiękowej komputera. Wygląd panelu przedniego aplikacji sterującej wzmacniaczem przedstawiony jest na rysunkach poniżej: Aplikacja umożliwia między innymi: Program w formacie *.vi można pobrać tutaj. Jedyny problem jaki może pojawić się podczas jego używania to obciążenie procesora jakie stwarza podczas wyświetlania grafiki analizatora widma. Po zminimalizowaniu aplikacji wszystko jest ok. Mimo, iż program ma dużą objętość, jego działanie nie jest bardzo skomplikowane. Budowę programu (użyte klocki) można zobaczyć tutaj natomiast poniżej zostanie omówione działanie najważniejszych części. Pętla przedstawiona na rysunku poniżej zajmuje się obsługą karty dźwiękowej i odczytem sygnału: Głównym składnikiem jest wewnętrzna pętla While, wewnątrz której znajduje się moduł Si READ odczytujący zawartość bufora, do którego zapisywane są kolejne wartości próbkowanego sygnału. Moduł ten dodatkowo działa jako opóźnienie pętli, zatrzymując jej wykonywanie do czasu zapełnienia bufora. Dzięki temu zwiększenie ilości iteracji, zapisywane do zmiennej nowe dane, jednoznacznie identyfikuje odczytanie bufora, którego zawartość jest zapisywana do tablicy sygnał. Dla danych ustawień początkowych (próbkowanie z częstotliwością 44,1 kHz przy 16-bitowej rozdzielczości) bufor o rozmiarze 1764 bajtów jest zapełniany w czasie 10ms. Zmieniając odpowiednio (przez zmienną Czas Próbkowania) rozmiar bufora można uzyskać różne czasy odczytu jego zawartości, a przez to szybkość działania analizatora. Zmiana wartości czasu próbkowania przez użytkownika wymaga ponownego zainicjowania procedury odczytu, co jest sygnalizowane przez wartość True zmiennej Reinicjacja. Wystąpienie błędu przepełnienia bufora, wynikające np. z zajęcia procesora przez inną aplikację, powoduje wpisanie wartości True do zmiennej Próbkowanie. Kombinacja logiczna zmiennych Reinicjacja i Próbkowanie powoduje przerwanie wykonywania wewnętrznej pętli While i wykonanie kolejnej iteracji zewnętrznej pętli, gdzie poprzez Strukturę Case następuje ponowne uruchomienie procedury odczytu sygnału. Kolejnym ważnym elementem programu jest obsługa portu RS-232 i komunikacja ze wzmacniaczem. Poniżej przedstawiona jest pętla obsługi portu szeregowego bez jego konfiguracji, którą możemy zobaczyć na rysunku przedstawiającym cały schemat: Na początku programu następuje konfiguracja portu szeregowego po czym program wpada do nieskończonej pętli while. Głównym elementem pętli jest Rejestr Przesuwny inicjowany wartością 255. Po pierwszym przejściu pętli do rejestru wpisywana jest wartość zmiennej Wysyłany_Bajt. W każdej iteracji pętli wartość z rejestru porównywana jest z tą zmienną. W razie niezgodności danych rejestr przyjmuje nową wartość i jednocześnie zmienna Wysyłany_Bajt zostaje podana na port RS-232 (zapewnia to niewielka Struktura Case). Dzięki Strukturze Sekwencyjnej generowane jest opóźnienie między ewentualnym wysyłaniem a odbieraniem danych z portu szeregowego. Po określeniu liczby bajtów znajdujących się w buforze portu szeregowego następuje ich odczyt. Interpretacja odebranych danych występuje tylko wtedy gdy odebrano 5 bajtów danych (taką ilość bajtów wysyła wzmacniacz, w dwóch niezależnych paczkach). Po spełnieniu warunku na długość danych wykonuje się struktura Wczytywanie bajtów z RS. Dane w postaci łańcucha znaków zamieniane są na Tablicę Bajtów a następnie dzielone są na 5 wartości liczbowych. Procesor wzmacniacza wysyła dwie paczki danych przez co konieczna jest identyfikacja które dane zostały odebrane. Dokonuje się to po pierwszym bajcie którego wartość równa 255 identyfikuje pozostałe bajty jako Dane do obsługi wzmacniacza, natomiast inna wartość pierwszego bajtu sprawia że paczka rozpoznawana jest jako Dane do obsługi temp. i went.. Gdy wewnętrzna Struktura Case dostaje na wejście stan True zajmuje się ustawianiem parametrów wzmacniacza (rysunek powyżej). Pierwszy bajt jest ignorowany ponieważ w tym przypadku zawsze ma wartość 255. Kolejne trzy bajty danych po przejściu przez elementarne operacje arytmetyczne (zdeterminowane przez oprogramowanie w mikrokontrolerze wzmacniacza) ustawiają pokrętła na panelu przednim w odpowiednich pozycjach. Ostatni bajt ze względu na fakt że jest zbiorem flag bitowych (każdy jego bit ustwiany jest niezależnie i oznacza np. wyciszenie włączone lub wyłączone itp.) dzielony jest na pojedyńcze bity, które ustawiają wejścia, wyciszenie oraz tryb pracy wzmacniacza (wartości bitów zależą od oprogramowania w mikrokontrolerze). Gdy natomiast wewnętrzna Struktura Case dostaje na wejście stan False zajmuje się ustawianiem pracy wentylatora oraz wyświetlaniem temperatury radiatora, co możemy zobaczyć na rysunku poniżej: Pierwszy bajt interpretowany jest jako ustawienia wentylatora. Jego wartość równa 31 ustawia tryb pracy na Automatyczny, a wartości z przedziału 0-25 powodują ustawienie pokrętła Obroty oraz aktywowanie Ręcznego trybu pracy wentylatora. Kolejne dwa bajty to starszy i młodszy bajt temperatury, która wysyłana jest w postaci liczby pomnożonej przez 10. Wartość temperatury po przedzieleniu przez 10 ustawiana jest za pomocą Property Node ze względu na konieczność sygnalizowania zdarzenia po zmianie wartości. Dwa ostatnie bajty zawierają informację o prędkości obrotowej wentylatora. Ważnym elementem w programie jest obsługa zdarzeń. Rysunek poniżej przedstawia fragment pętli, dotyczący pokrętła Poziom Głosu: Zdarzenie wywoływane jest po przekręceniu pokrętła głośności na panelu przednim programu. Wartość głośności przeliczana jest do postaci akceptowanej przez wzmacniacz oraz sumowana logicznie z wartością 32, która odpowiada wartości 1 w mikrokontrolerze (po podzieleniu przez 32). Zdarzenia dla regulacji tonów wyglądają podobnie, różnią się jedynie adresem który jest sumowany logicznie z wartością regulacji tonów. Obliczona wartość wraz z adresem wpisywana jest do zmiennej Wysyłany_Bajt co powoduje jej wysłanie na port RS-232. Dzieje się to dzięki pętli obsługi portu szeregowego skanującej wartość zmiennej Wysyłany_Bajt. Zdarzenia obsługi czterech przycisków zmieniających tryby pracy wzmacniacza są analogiczne, różnią się jedynie wartościami stałych wynikających z oprogramowania w mikrokontrolerze wzmacniacza. Na rysunku poniżej przedstawiony jest fragment pętli, dotyczący przycisku Liniowe Stereo: Po wywołaniu zdarzenia dzięki Property Node blokowana jest możliwość ponownego kliknięcia przycisku Liniowe Stereo. Pozostałe przyciski tym samym sposobem stają się możliwe do kliknięcia. Jednocześnie do wszystkich pozostałych przycisków wpisywana jest wartość False. Tworzony jest bajt zawierający zespół flag bitowych niosących informację o funkcjach wzmacniacza (wartości w bajcie są określone przez oprogramowanie mikrokontrolera) a następnie jego wartość wpisywana jest do zmiennej Wysyłany_Bajt. Za resztę odpowiada pętla obsługi portu szeregowego. Ostatnim zdarzeniem zasługującym na opis może być obsługa komponentu Zmiana Skórki. Odpowiedni rysunek zdarzenia przedstawiony jest poniżej: Po wywołaniu zdarzenia odczytywana jest ścieżka do aktualnie uruchomionego projektu. Po odcięciu nazwy pliku *.vi do pozostałej części dodawana jest nazwa rysunku o numerze równym wartości komponentu Zmiana Skórki. Całość tworzy ścieżkę do aktualnej skórki. następnie obrazek jest wczytywany i wyświetlany na panelu przednim jako tło pod komponentami. Obsługa pozostałych zdarzeń jest analogiczna do opisanych. Wszyskie komponenty ustawiające parametry w części sprzetowej ustawiają jedynie odpowiednią wartość zmiennej Wysyłany_Bajt według zasad określonych w programie mikrokontrolera. Za resztę odpowiada pętla obsługi portu szeregowego. Największą część aplikacji stanowi pętla analizy sygnału. Jej fragment widoczny jest na rysunku poniżej: Podobnie jak w pętli sterującej portem RS-232 działa tutaj Rejest Przesuwny wykrywający zmiany zmiennej nowe dane. Po przyjściu nowej tablicy danych sygnał rozpoczyna się jej analiza. Napierw zostaje podzielona na dwa niezależne kanały (lewy i prawy). Następnie w każdym z kanałów mierzona jest maksymalna amplituda, poprzez sumowanie najmniejszej i największej wartości z tablicy. Podział przez 655,36 zapewnia reprezentację w postaci stosunku wartości zmierzonej do maksymalnej wyrażonego w procentach. Amplituda jest porównywana z zadanym przez użytkownika poziomem szumów, co powoduje przemożenie całej tablicy przez 0, gdy poziom sygnału jest mniejszy od założonego, lub przez 1 (przepuszczenie sygnału w niezmienionej postaci), gdy amplituda wykroczy ponad zakładany poziom szumów. Struktura Case umożliwia wybór skali (V/V lub dB), przeliczając w drugim przypadku poziom sygnału na skalę logarytmiczną. Wartości amplitudy sygnału w prawym i lewym kanale trafiają dalej do komponentów (pasków) znajdujących się w lewej części panelu przedniego. Na potrzeby analizatora sygnał z obu kanałów jest sumowany i normalizowany do maksymalnej amplitudy mierzonej w całym paśmie częstotliwości. Ma to na celu uniezależnić wskazania analizatora od aktualnie ustawionego wzmocnienia przedwzmacniacza. Dodatkowy selektor True/False wyłącza normalizację podczas odcięcia sygnału przez bramkę szumów. Następnie sygnał trafia do zestawu 30 filtrów pasmowo przepustowych o częstotliwościach granicznych dobranych tak, by różniły się od siebie o czynnik [tex]\sqrt[3]{2}[/tex] (filtry tercjowe). Następnie w każdym paśmie dokonywany jest pomiar maksymalnej amplitudy (jak wyżej). Z otrzymanych wartości budowana jest 30-elementowa tablica: Pomiar maksymalnej wartości umożliwia znormalizowanie wszystkich amplitud do największej z nich, dzięki czemu otrzymuje się znacznie większą dynamikę wskazań analizatora. Wyboru skali dokonuje się poprzez Strukturę Case (jak wyżej). Tablica jest następnie rozdzielana na 30 sygnałów i przesyłana do odpowiednich komponentów. Ze względu na zastosowanie pasków podbicia każdy z komponentów przyjmuje dane w postaci klastra zawierającego dwa elementy: aktualny poziom i poziom paska, obliczany za pomocą pętli While przedstawionej niżej: Do pętli przesyłana jest aktualna tablica poziomów sygnału oraz dwie 30-elementowe tablice z rejestrów przesuwnych, tablica zapamiętanych poziomów i tablica opóźnień. Pętla ta wykonuje 30 iteracji odczytując w każdej z nich kolejne elementy tablic (dzięki funkcji Indexing). Aktualna i zapisana wartość poziomu sygnału zostają porównane. W przypadku, gdy aktualny poziom jest większy od zapamiętanego (True dla zewnętrznej Struktury Case) jest on przepisywany do rejestru przesuwnego, zaś licznik opóźnienia jest ustawiany na zero. W przeciwnym przypadku wewnątrz Struktury wartość licznika jest zwiększana i porównywana z zadanym opóźnieniem. Gdy wartość licznika jest równa ustawionemu opóźnieniu (True dla wewnętrznej Struktury Case), do rejestru poziomu wpisywana jest aktualna wartość, zaś licznik jest resetowany. Jeśli opóźnienie jest mniejsze od zadanego, wartości obu rejestrów są przekazywane dalej. Po wyjściu z pętli While tablica rejestru przesuwnego zawierającego poziomy syganłu jest rozdzielana i przekazywana do odpowiednich komponentów (pasków). Zdjęcia Projektu:
|
|||||||||||||||||||||||||||||||||
fuse
Co patrzyłem na zakładki fuse bitów to na pewno bit JTAGEN=1,i teraz nie jestem pewien bit ckdiv8=1,cksel 3.1=1
proszę o odpowiedz
Re; fusy
Popatrz tutaj: http://mirley.firlej.org/files/ART_fuseM162_05B.gif
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
Witam mam taki problem mały
Witam
mam taki problem mały gdy uruchamiam wszystko jest dobrze strona startowa i przechodzi do menu pisze tam poziom glosy tony niskie itp.
Ale nie działa klawiatura i na ekranie jest temperatura 57C i obroty 2300 ale nic nie mam podłączone
Re: Wzmacniacz
Zwieraj za pomocą kabelka pin PE0 procesora do masy, czy obroty się zmieniają. Czujnik Ds masz podłączony?
UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.
tak mam podłączony czujnik ds
tak mam podłączony czujnik ds ale tez się dziwi ze wogule przyciski nie działała a bit jtag jest wyłączony a wiec port c powinien działać a co do zwarcia pinu pe0 nic się nie zmienia