Cytat: Czyli jesli dobrze zrozumialem wysylajac do TDA
I2cstart
I2cwbyte 130
I2cwbyte 0
I2cwbyte 255
I2cstop
zwiekszam glosnosc lewego kanalu na maxa ?
Tak.
Cytat: I2cstart
I2cwbyte 130
I2cwbyte 8
I2cwbyte 206
I2cstop
W ten sposob wybieram wejscie 1 ?
Tak, między innymi wybierasz wejście...
Cytat: nie bardzo zrozumialem o co tu chodzi, tzn jak to wyslac :
B0 (bit0) - wejście 1 lub 0
Jeśli bit B0 ma wartość 0 to wybrane zostaje wejście 1, jeśli B0 = 1 to wejście drugie. Wysyła się to tak jak i inne wartości, rozumiem, że nie wiesz jak to przeliczyć. Więc tak: najpierw krótka lekcja nt. zapisu binarnego...
Bit B0 (inaczej LSB - czyli bit najmniej znaczący - to ten po prawej stronie liczby w zapisie binarnym) ma wartość 1, bit B1 ma wartość 2, B2 - 4, B3 - 8, B4 - 16, B5 - 32, B6 - 64 i B7 - 128 (MSB - bit najbardziej znaczący). Jest to zapis dwójkowy, a nazwa bieże się stąd, że wartość bitu to wynik podniesienia liczby 2 do potęgi x, gdzie x to nr bitu w liczbie binarnej. Jeśli na danej pozycji (dany bit) umieszczona jest 1 to jest on 'zapalony' - aktywny. Sumując do siebie wszystkie wartości dziesiętne zapalonych bitów otrzymujemy wartość liczby binarnej zapisaną dziesiętnie. Przykład:
Zapis binarny "11001010" należy odczytać (od prawej do lewej) tak:
b0=0 - bit nie aktywny = 0
b0=1 - bit aktywny = 2 dziesiętnie
b0=2 - bit nie aktywny = 0
b0=3 - bit aktywny = 8 dziesiętnie
b0=4 - bit nie aktywny = 0
b0=5 - bit nie aktywny = 0
b0=6 - bit nie aktywny = 64 dziesiętnie
b0=7 - bit aktywny = 128 dziesiętnie
Sumując wszystkie wartości dziesiętne otrzymujemy wynik 202.
Więc jeśli chcemy ustawić np bit B5 odpowiedzialny za funkcję MUTE (włączyć wyciszenie) to ten bit musi być aktywny, czyli B5=1. Zgodnie z tym co wyżej B5 ma wartość 32, więc do liczby wysyłanej należy dodać 32 lub odjąć, jeśli chcemy wyłączyć B5. Ale wymaga to wiedzy, jaka jest aktualnie wartość wysyłanej liczby. Aby nie komplikować arytmetyki rozwiązuje się to inaczej, a mianowicie zmienia pojedyńcze bity w całej liczbie, nie przejmując się ich wartością i takimi tam...
Wprowadzamy zmienną (np Tda_funct) i modelujemy pojedyńcze bity używając zapisu:
gdzie x to numer bitu,
przykładowo
włącza tylko i wyłącznie funkcję MUTE, nie ingerując w pozostałe bity odpowiedzialne za inne ustawienia.
Dalej:
Tda_funct.3 = 1
Tda_funct.4 = 1
włącza efekt Poszerzenie bazy stereo,
Tda_funct.3 = 1
Tda_funct.4 = 0
włącza efekt Stereo
Tda_funct.3 = 0
Tda_funct.4 = 1
włącza efekt PseudoStereo
Należy pamiętać, że TDA8425 przy ustawianiu rejestru nr 8 (sterującego) wymaga ustawienia dwóch najstarszych bitów (B7=1 i B6=1) więc
Tda_funct.7 = 1
Tda_funct.6 = 1
To samo dotyczy B1 i B2 (służą do mieszania kanałów wejść 1 i 2) czyli
Tda_funct.1 = 1
Tda_funct.2 = 1
Do zmiany pozostają bity B0, B3, B4, B5. A na upartego tylko B0 jako selektor wejść. Kończąc ten wywód podsumuję: ustawiamy bity w następujący sposób:
Tda_funct.7 = 1
Tda_funct.6 = 1
Tda_funct.5 = 0 'MUTE wyłączone
Tda_funct.4 = 0 'Stereo
Tda_funct.3 = 1 'Stereo
Tda_funct.2 = 1
Tda_funct.1 = 1
Tda_funct.0 = 0 'Wejście 1
Teraz trzeba to wysłać, więc:
I2cstart
I2cwbyte 130
I2cwbyte 8 'rejestr sterujący
I2cwbyte Tda_funct 'cała liczba 8bitowa "złożona" z 8 Tda_funct.x
I2cstop
Jeśli jeszcze coś nie jest jasne to pytaj, ale tutaj, a nie na pv.
Pzdr.