Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Sterowanie generatorem dżwięku problem z stukaniem

kamil232
-
-
Posty:11
Rejestracja:15 kwie 2008, o 17:57
Lokalizacja:Warszawa
Sterowanie generatorem dżwięku problem z stukaniem

Postautor: kamil232 » 27 gru 2008, o 12:24

Witam.Niedawno udało mi się po części uruchomić generator dźwięku wyjęty ze starego 8 bitowego komputera.Sterowanie odbywa się poprzez równoległą 8 bitową szynę danych(cały port B mikrokontrolera Atmega 16)jest również 4 bitowa szyna adresowa (4 młodsze bity portu C).Generator tworzy dźwięki,lecz co chwilę pyka,ze względu na ponowne rozpoczęcie cyklu programu głównego.Przykładem tego jest to że gdy chcę zmienić poprzez klawiaturę wartość jakiejś zmiennej,to przy zmianie jej wartości następuje stuk w głośniku.Zjawisko to występuje również gdy klawiatura nie jest używana.
Może wiecie jak zniszczyć to stukanie,aby wykonywanie od nowa pętli głównej programu
tego nie powodowało.Poniżej daje kod programu którego wadą są właśnie stuki

Kod: Zaznacz cały

'*******************Konfiguracja portów******************** $regfile = "m16def.dat" $crystal = 16000000 Config Lcd = 40 * 2 Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5 Config Portb = Output 'szyna danych do pokeya Config Portc = Output '4 młodsze bity-szyna adresowa,4 starsze-nieużywane Config Pind.6 = Input 'nieużywany Config Pind.7 = Input 'nieużywany Config Pina.0 = Input 'wiersz 1 klawiatury Config Pina.1 = Input 'wiersz 2 klawiatury Config Pina.2 = Input 'wiersz 3 klawiatury Config Pina.3 = Input 'wiersz 4 klawiatury Config Pina.4 = Output 'kolumna 1 klawiatury Config Pina.5 = Output 'kolumna 2 klawiatury Config Pina.6 = Output 'kolumna 3 klawiatury Config Pina.7 = Output 'kolumna 4 klawiatury '*******************Przypisanie nazw wejściom portów**************************** W1 Alias Pina.0 '1 wiersz klawiatóry W2 Alias Pina.1 '2 wiersz klawiatóry W3 Alias Pina.2 '3 wiersz klawiatóry W4 Alias Pina.3 '4 wiersz klawiatóry '*******************Przypisanie nazw wyjściom portów**************************** Kol1 Alias Porta.4 '1 kolumna klawiatury Kol2 Alias Porta.5 '2 kolumna klawiatury Kol3 Alias Porta.6 '3 kolumna klawiatury Kol4 Alias Porta.7 '4 kolumna klawiatury '*******************Ustawienia stanów kolumn klawiatury************************* Set Kol1 'stan aktywny kolumny-wysoki Set Kol2 'stan aktywny kolumny-wysoki Set Kol3 'stan aktywny kolumny-wysoki Set Kol4 'stan aktywny kolumny-wysoki '***************Dołączanie rezystorów podciągających do wyjść procesora********* Set Porta.0 'dołączenie rezystora podciągającego Set Porta.1 'dołączenie rezystora podciągającego Set Porta.2 'dołączenie rezystora podciągającego Set Porta.3 'dołączenie rezystora podciągającego Set Portd.6 'dołączenie rezystora podciągającego Set Portd.7 'dołączenie rezystora podciągającego '******************Obsługa przerwania klawiatóry na timer0********************** Config Timer0 = Timer , Prescale = 64 'Konfiguracja timer0 On Timer0 Mult_kl 'timer0 obsłóguje podprogram "mult_kl" Enable Interrupts 'Odblokowanie przerwań Enable Timer0 Load Timer0 , 200 'Ładowanie timera0 liczbą 200 '************************************* Zmienne ********************************* Dim A As Byte 'zmienna dla rejestru AUDC1 Dim B As Byte 'zmienna dla rejestru AUDC2 Dim C As Byte 'zmienna dla rejestru AUDC3 Dim D As Byte 'zmienna dla rejestru AUDC4 Dim E As Byte 'zmienna dla rejestru Dim F As Byte 'zmienna dla rejestru Dim G As Byte 'zmienna dla rejestru Dim H As Byte 'zmienna dla rejestru Dim I As Byte 'zmienna licznikowa dla klawiatury Dim Adres As Byte 'zmienna licznikowa-określa wartość adresu Dim Przycisk As Byte 'zmienna przechowująca wartość naciśniętego klawisza Declare Sub Obsluga '*********************Pętla główna programu************************************* Cls Lcd " FRa FRa FRc FRd AMa AMb AMc AMd" Do Call Obsluga Gosub Wpis Loop End 'end program '*************************Obsługa rejestrów******************************** Sub Obsluga 'Obsługa wartości zmiennych i ich wysyłania pod dany adres For Adres = 1 To 8 'pętla wykonywana 8 razy(zwiększa o 1 wartość adresu pod który wyśle się dane) If Adres = 1 Then 'jeśli adres=1 to If Przycisk = 116 Then Incr A Elseif Przycisk = 164 Then Decr A End If If A = 16 Then A = 15 If A = 255 Then A = 0 End If End If Portc = 0 'wysłanie pod adres 0 wartości zmiennej A) Portb = A Locate 2 , 1 Lcd A End If If Adres = 2 Then 'Rejestr AUDC2 If Przycisk = 196 Then 'jeśli adres=2 to Incr B Elseif Przycisk = 228 Then Decr B End If If B = 255 Then B = 254 If B = 0 Then B = 1 End If End If Portc = 1 'wysłanie pod adres 1 wartości zmiennej B) Portb = B Locate 2 , 5 Lcd B End If If Adres = 3 Then If Przycisk = 114 Then 'Rejestr Incr C 'jeśli adres=3 to Elseif Przycisk = 162 Then Decr C End If If C = 255 Then C = 254 If C = 0 Then C = 1 End If End If Portc = 2 'wysłanie pod adres 2 wartości zmiennej C) Portb = C Locate 2 , 9 Lcd C End If If Adres = 4 Then If Przycisk = 194 Then 'Rejestr AUDC3 Incr D 'jeśli adres=4 to Elseif Przycisk = 226 Then Decr D End If If D = 255 Then D = 254 If D = 0 Then D = 1 End If End If Portc = 3 'wysłanie pod adres 3 wartości zmiennej D) Portb = D Locate 2 , 13 Lcd D End If If Adres = 5 Then 'jeśli adres=5 to If Przycisk = 115 Then 'rejestr Incr E Elseif Przycisk = 163 Then Decr E End If Portc = 4 Portb = E 'wysłanie pod adres 4 wartości zmiennej E) Locate 2 , 26 Lcd E End If If Adres = 6 Then If Przycisk = 195 Then 'Rejestr Incr F 'jeśli adres=6 to Elseif Przycisk = 227 Then Decr F End If Portc = 5 'wysłanie pod adres 5 wartości zmiennej F) Portb = F Locate 2 , 30 Lcd F End If If Adres = 7 Then 'jeśli adres=7 to If Przycisk = 113 Then 'Rejestr Incr G Elseif Przycisk = 161 Then Decr G End If Portc = 6 'wysłanie pod adres 6 wartości zmiennej G) Portb = G Locate 2 , 34 Lcd G End If If Adres = 8 Then 'jeśli adres=8 to If Przycisk = 193 Then 'Rejestr Incr H Elseif Przycisk = 225 Then Decr H End If Portc = 7 Portb = H 'wysłanie pod adres 7 wartości zmiennej H) Locate 2 , 37 Lcd H End If Next Adres End Sub '*********************Wysyłanie pod adres 1000 konfigurującego bajtu danych***** Wpis: Portc = &B00001000 'wysłanie pod adres 8 wartości 0) Portb = &B00000000 Return '**********************Obsługa klawiatury********************************************** Mult_kl: Load Timer0 , 200 Przycisk = 0 For I = 1 To 4 Select Case I Case 1: Set Kol4 Reset Kol1 Case 2: Set Kol1 Reset Kol2 Case 3: Set Kol2 Reset Kol3 Case 4: Set Kol3 Reset Kol4 End Select If W1 = 0 Then Przycisk = 1 Exit For Elseif W2 = 0 Then Przycisk = 2 Exit For Elseif W3 = 0 Then Przycisk = 3 Exit For Elseif W4 = 0 Then Przycisk = 4 Exit For End If Next I If Przycisk <> 0 Then I = Pina And &B11110000 Przycisk = I + Przycisk End If Return

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 85 gości