Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Pytania, kody i porady dotyczące nie tylko Bascom.
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: kulamario » 01 lis 2018, 0:45

Witam
Jako ze sam rady nie daje proszę o pomoc w dopisaniu obsługi i ustawień RTC na PCF8583 do dołączonego kodu od TDA7439
Chciał bym aby zegar z data był wyświetlany cały czas a po przekręceniu enkodera ustawiany volume gdy naciśniemy enkoder wchodzimy w ustawienia TDA7439 tak jak do tej pory jest natomiast do ustawienia daty i zegara można by zrobić wejście po przez przytrzymanie przycisku od enkodera
Może któryś z kolegów dysponuje odpowiednia wiedza i pomoże ?
  1. $regfile = "m16def.dat"
  2. $crystal = 8000000
  3. $hwstack = 80
  4. $swstack = 80
  5. $framesize = 80
  6.  
  7. Config Portc.5 = Output : Relay Alias Portc.5 : Set Relay
  8.  
  9.  
  10.  
  11. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.1 , Db6 = Portd.7 , Db7 = Portd.0 , E = Portd.5 , Rs = Portd.6       'PCB
  12. Config Lcd = 16x2
  13.  
  14. 'Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0       'ZL3AVR
  15. 'Config Lcd = 20x4
  16.  
  17. initlcd
  18.  
  19. Cursor Off
  20. Cls
  21.  
  22. 'Locate 1 , 5
  23. 'Lcd "TDA7439 TEST"
  24. 'Locate 2 , 6
  25. 'Lcd " AUDIO"
  26. 'Wait 2
  27. 'Cls
  28.  
  29. Locate 1 , 2
  30. Lcd "SETUP TDA7439 "
  31. Locate 2 , 2
  32. Lcd "Wait a moment"
  33. Waitms 1500
  34.  
  35. 'Variable for Data to TDA7439
  36. '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  37. ' konfiguracja RC5
  38.  
  39. 'Config Rc5 = Pinc.3 , Timer = 2
  40.  
  41. 'Dim Adres As Byte , komenda As Byte
  42.  
  43. '----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  44. Dim Input_value As Byte                                        'Zmienna dla multipleksera wejsciowego
  45. Dim Input_gain_value As Byte                                    'Zmienna dla poziom wejscia
  46. Dim Volume_value As Byte                                       'Zmienna dla Volume
  47. Dim Bass_tone_value As Byte                                         'Zmienna dla Bas
  48. Dim Middle_tone_value As Byte                                       'Zmienna dla tony srodek
  49. Dim Heigh_tone_value As Byte                                       'Zmienna dla tony wysokie
  50. Dim Limit_value_max As Byte                        'Zmienna wartosci graniczna w gore
  51. Dim Limit_value_min As Byte                       'Zmienna wartosci graniczna w dól
  52.  
  53. Dim Balance_R As Byte                                       'Zmienna dla Balans R
  54. Dim Balance_L As Byte                                       'Zmienna dla Balans L
  55.  
  56. Dim Value As Byte                                            'Wartosc zapisana w rejestrze
  57.  
  58. Dim Adres_Tda7439 As Byte                                      'Adres i2c TDA
  59.  
  60. Dim Register As Byte                                        'Zdefiniuj rejestr, w którym zapisano wartosc
  61.  
  62.  
  63. Dim Press_button As Byte                                   'Zmienna do okreslenia nacisniecia klawisza, a tym samym mozliwosc wprowadzenia róznych ustawien
  64. Dim Functional_value As Byte                                   'Zmienna jest zdefiniowana dla wszystkich zmiennych poszczególnych ustawien
  65. Dim Held_var As Bit                                      'Zmienna wyswietla sie po nacisnieciu przycisku
  66. Dim Encoder_A As Bit                                          'Zmienna wskazuje, czy przycisk zostal nacisniety
  67. Dim Encoder_B As Bit                                        'Zmienna pokazuje, czy przycisk zostal nacisniety
  68. Dim Button As Bit                                 'Zmienna do okreslenia, czy nacisnieto przycisk wyboru
  69.  
  70. Dim Tmpin As Byte
  71. Dim Count As Word
  72. Dim Tmp_1 As Byte , Tmp_2 As Byte , Db As String * 5 , Tone As String * 6 , Vol_out As String * 7
  73.  
  74. Dim Tone1 As Byte
  75.  
  76. Dim Tone11 As Byte
  77.  
  78. Deflcdchar 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 32
  79. Deflcdchar 2 , 32 , 14 , 14 , 14 , 14 , 14 , 32 , 32
  80. Deflcdchar 3 , 4 , 14 , 14 , 14 , 14 , 14 , 4 , 32
  81. Deflcdchar 4 , 32 , 32 , 32 , 21 , 32 , 32 , 32 , 32
  82. Deflcdchar 5 , 6 , 14 , 30 , 30 , 30 , 14 , 6 , 32
  83.  
  84. Declare Sub Bar_vol(byval Vol_out As String , Byval Vol_val As byte , Byval Sel As Byte)   'bargraf od volume
  85.  
  86. Declare Sub Bar_Balans(byval Tone11 As String , Byval Tmp_11 As Byte)       'bargraf od balansu
  87.  
  88. Declare Sub bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte)                 'bargraf od ustawien tonow
  89.  
  90.  
  91. Declare Sub mute()
  92. Declare Sub Selection()
  93. Declare Sub Balance_left()
  94. Declare Sub Balance_right()
  95. Declare Sub Select_input()
  96.  
  97. Declare Sub Change_Settings()
  98. Declare Sub Setting_function()
  99.  
  100. Declare Sub High_tones()
  101. Declare Sub Inputgain()
  102. Declare Sub Volume()
  103. Declare Sub Bass()
  104. Declare Sub Middle_tones()
  105.  
  106. Declare Sub Button_test()
  107. Declare Sub Transfer()
  108. Declare Sub Main()
  109. Declare Sub Lcd_init()
  110. Declare Sub Tin(byval Tin_val As Byte)
  111.  
  112.  
  113.  
  114. 'Ports I2C ATMEGA
  115. '4K7 pullup SCL & SDA
  116.  
  117. Config Scl = Portc.0
  118. Config Sda = Portc.1
  119.  
  120. Config I2cdelay = 20
  121.  
  122.  
  123. 'Zdefiniuj dla przycisków sterujacych i zdefiniuj je jako wejscia
  124.  
  125. Config Pind.2 = Input : Portd.2 = 1                         'Encoder A
  126. Config Pind.3 = Input : Portd.3 = 1                         'Encoder B
  127.  
  128. Config Pinc.2 = Input : Portc.2 = 1 : switch Alias Pinc.2       'switch
  129.  
  130. 'Config Pinc.6 = Input : Portc.6 = 1 : Sspnd Alias Pinc.6    'SSPND
  131.  
  132. Config Debounce = 50
  133.  
  134. On Int0 Int0_isr
  135. Enable Int0
  136. Config Int0 = Falling
  137.  
  138. Enable Interrupts
  139. 'Standart Register
  140.  
  141.  
  142. Adres_Tda7439 = &H88                                           'adres chipa urzadzenia TDA7439
  143. Register = &B00000000                                       'Wybierz rejestr wejsciowy
  144. Input_value = 0                                                'Wybierz wejscie 1
  145. Functional_value = Input_value                                    'Wartosc poczatkowa rejestru multipleksera wejsciowego jest przypisana do wartosci funkcji
  146. Call Transfer                                            'Funkcja wywolania dla transferu danych
  147.  
  148. Adres_Tda7439 = &H88                                           'adres chipa urzadzenia TDA7439
  149. Register = &B00000001                                       'Podadres rejestru kontroli wzmocnienia wejscia
  150. Input_gain_value = 0
  151. Functional_value = Input_gain_value                                'Wybierz wzmocnienie wejscia (20db)
  152. Call Transfer                                            'Funkcja wywolania dla transferu danych
  153.  
  154. Adres_Tda7439 = &H88
  155. Register = &B00000010
  156. Volume_value = 35
  157. Functional_value = Volume_value                                   'Ustaw glosnosc na -10db
  158. Call Transfer                                            'Funkcja wywolania dla transferu danych
  159.  
  160. Adres_Tda7439 = &H88
  161. Register = &B00000011                                       'Rejestr  Bass
  162. Bass_tone_value = 7                                                 'Wybierz Bass 0db
  163. Functional_value = Bass_tone_value
  164. Call Transfer                                            'Funkcja wywolania dla transferu danych
  165.  
  166. Adres_Tda7439 = &H88
  167. Register = &B00000100                                       'Rejestr sopran
  168. Middle_tone_value = 7                                               'sopran 0db
  169. Functional_value = Middle_tone_value
  170. Call Transfer                                            'Funkcja wywolania dla transferu danych
  171.  
  172. Adres_Tda7439 = &H88
  173. Register = &B00000101                                       'Rejestr wysokie tony
  174. Heigh_tone_value = 7                                               'wysokie tony 0db
  175. Functional_value = Heigh_tone_value
  176. Call Transfer                                            'Funkcja wywolania dla transferu danych
  177.  
  178. Adres_Tda7439 = &H88
  179. Register = &B00000110                                       'Rejestr Balans prawy kanal                                        RIGHT SPEAKER
  180. Balance_R = 0                                        '0db Balans_R
  181. Functional_value = Balance_R
  182. Call Transfer                                            'Funkcja wywolania dla transferu danych
  183.  
  184. Adres_Tda7439 = &H88
  185. Register = &B00000111                                       'Rejestr Balans lewy kanal                                             LEFT SPEAKER
  186. Balance_L = 0
  187. Functional_value = Balance_L                             '0db Balans lewy
  188. Call Transfer                                            'Funkcja wywolania dla transferu danych
  189.  
  190. Press_button = 1                                           'Ustaw przycisk, aby ustawic domyslny
  191.  
  192.  
  193. 'test settings
  194. 'Hoehenvar = 7
  195. 'Mittenvar = 7
  196. 'Bassvar = 7
  197. 'Volumevar = 32
  198. 'Inputgainvar = 10
  199. 'Inputvar = 3
  200.  
  201. 'Wait 2
  202. Cls
  203. Display Off
  204. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  205. 'Funkcja aby sprawdzic stan przycisków
  206. Call Select_input
  207. Call Volume
  208. Display On
  209.  
  210. Do
  211.  
  212.  
  213.    If Count < 1001 Then Incr Count                             'menu exit time
  214.    If Count = 1000 Then                                        ' set to main volume
  215.       Press_button = 1
  216.       Call Volume
  217.    End If
  218.    Waitms 10
  219.  
  220. '   Getrc5(adres , komenda)
  221. '   If Adres = 0 and komenda = 12 Then
  222.  
  223. '   toggle relay
  224.  
  225. '   waitms 20
  226.  
  227.  
  228. '   End If
  229.   ' If Sspnd = 0 And Input_var <> 1 Then
  230.      ' Count = 0
  231.      ' Input_var = 1
  232.      ' Call Select_input()
  233.    'End If
  234.    Call Button_test
  235.  
  236. Loop
  237.  
  238. End
  239.  
  240. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  241. 'Funkcja do sprawdzania, czy zostal nacisniety przycisk
  242. Sub Button_test()
  243.  
  244.    Encoder_A = 0
  245.    Encoder_B = 0
  246.    Button = 0
  247.    If switch = 0 Then Call Selection
  248.  
  249.  
  250. End Sub
  251.  
  252. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  253. 'Funkcja do zmiany ustawien Bass Treble Middle itp.
  254. Sub Change_Settings()
  255.  
  256.  
  257.    If Button = 1 Then
  258.       Count = 0
  259.       If Press_button > 8 Then
  260.          Press_button = 1                                     'Po dotarciu na koniec, nacisnij klawisz resetowania
  261.       End If
  262.    End If
  263.  
  264.  
  265.    Select Case Press_button                                   'Przy pewnym stanie opcji wywolywania klawiatury
  266.       Case 1 : Call Volume
  267.       Case 2 : Call Select_input
  268.       Case 3 : Call Inputgain
  269.       Case 4 : Call Bass
  270.       Case 5 : Call Middle_tones
  271.       Case 6 : Call High_tones
  272.  
  273.  
  274.       Case 7 : Call Balance_right
  275.       Case 8 : Call Balance_left
  276.  
  277.  
  278.    End Select
  279.  
  280.    Button = 0                                        'Zresetuj przycisk wyboru
  281.    Waitms 80
  282. End Sub
  283.  
  284. '///////////////////////////////////////////////////////////////////////////////
  285. 'Funkcja wspólna dla wszystkich ustawien
  286.  
  287. Sub Setting_function()
  288.  
  289.  
  290.  
  291.    If  Encoder_A = 1  Then                                      'Sprawdz enkoder
  292.  
  293.       If Functional_value < Limit_value_max Then       'Zapobiegaj przepelnieniu
  294.          Functional_value = Functional_value + 1            'Zwieksz wartosc funkcji o 1
  295.          Call Transfer                             'Funkcja do transferu
  296.       End If
  297.    End If
  298.  
  299.    If Encoder_B = 1 Then
  300.  
  301.       If Functional_value > Limit_value_min Then
  302.          Functional_value = Functional_value - 1
  303.          Call Transfer
  304.       End If
  305.    End If
  306. End Sub
  307.  
  308.  
  309. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  310. 'Funkcja dla multipleksera wejsciowego
  311. Sub Select_input()
  312. 'Set In_shift
  313.    If Held_var = 0 Then                                     'Zapobiec po prostu zmianie wejsc poprzez przytrzymanie klawiszy
  314.       Limit_value_max = 3                                'Zapobiegaj przepelnieniu
  315.       Limit_value_min = 0
  316.       Register = &B00000000                                       'Wybierz rejestry dla multipleksera wejsciowego
  317.       Functional_value = Input_value                                    ' Wartosc funkcji jest przypisana do ustawien wejsc
  318.       Call Setting_function
  319.       Input_value = Functional_value
  320.       Tmpin = Input_value + 1                                        'Stara zmienna zostanie zastapiona nowa wartoscia
  321.       Cls
  322.       Locate 1 , 6
  323.       Lcd "INPUT"
  324.       Locate 2 , 1
  325.  
  326.       Select Case Input_value
  327.  
  328.          Case 3 : Lcd "      CD"
  329.          Case 2 : Lcd "      FM"
  330.          Case 1 : Lcd "    USB DAC"
  331.          Case 0 : Lcd "     PHONE"
  332.       End Select
  333.  
  334.       Waitms 300
  335.    End If
  336. End Sub
  337.  
  338.  
  339.  
  340.  
  341.  
  342. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  343. 'Funkcja do ustawiania czulosci wejsciowej
  344. Sub Inputgain()
  345.    Local Tmpa As Byte
  346.    Limit_value_max = 15                               'Ogranicz wzmocnienie wejsciowe do 30 db
  347.    Limit_value_min = 0
  348.    Register = &B00000001                                       'Wybierz rejestr dla regulacji czulosci
  349.    Functional_value = Input_gain_value                                'Wartosci funkcji przypisuje sie wejsciowa wartosc wzmocnienia
  350.  
  351.    Call Setting_function
  352.    Input_gain_value = Functional_value
  353.    Tmpa = Input_gain_value * 2
  354.    Call Tin(Input_gain_value)
  355. End Sub
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  364. 'Funkcja do zmiany glosnosci
  365.  
  366. Sub Volume()
  367.  
  368.    Local S_1 As String * 7
  369.    Local Vol_value As byte
  370.    Limit_value_max = 49                               'volume jest ograniczony do góry
  371.    Limit_value_min = 0
  372.    Register = &B00000010                                       'Wybierz rejestr dla glosnosci
  373.    Functional_value = Volume_value
  374.  
  375.    Call Setting_function
  376.  
  377.    Volume_value = Functional_value
  378.  
  379.  
  380.    Select Case Input_value
  381.  
  382.       Case 3 : S_1 = "CD"
  383.       Case 2 : S_1 = "FM"
  384.       Case 1 : S_1 = "USB DAC"
  385.       Case 0 : S_1 = "PHONE"
  386.  
  387.    End Select
  388.  
  389.  
  390.    Vol_value = Volume_value - 50
  391.    Vol_value = Not Vol_value
  392.  
  393.    Call Bar_vol(s_1 , Vol_value , 1)
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. End Sub
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  408. 'Funkcja podnoszenia / obnizania basów
  409. Sub Bass()
  410.    Local Tmpa As String * 6
  411.    Limit_value_max = 14
  412.    Limit_value_min = 0
  413.    Register = &B00000011                                       'Wybierz rejestr dla bass
  414.    Functional_value = Bass_tone_value
  415.    Tone1 = 1
  416.    Call Setting_function
  417.    Bass_tone_value = Functional_value
  418.    Call bargraph_settings( "BASS" , Bass_tone_value)
  419. End Sub
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  427. 'Funkcja podnoszenia / opuszczania srodkowych tonow
  428. Sub Middle_tones()
  429.    Local Tmpa As String * 6
  430.    Limit_value_max = 14
  431.    Limit_value_min = 0
  432.    Register = &B00000100
  433.    Functional_value = Middle_tone_value                           'Wybierz rejestr dla tonow srednich
  434.    Tone1 = 1
  435.    Call Setting_function
  436.    Middle_tone_value = Functional_value
  437.    Call bargraph_settings( "MIDDLE" , Middle_tone_value )
  438. End Sub
  439.  
  440.  
  441.  
  442.  
  443.  
  444. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  445. 'Funkcja podnoszenia / opuszczania wysokich tonow
  446. Sub High_tones()                                                'NOP
  447.    Local Tmpa As String * 6
  448.    Limit_value_max = 14
  449.    Limit_value_min = 0
  450.    Register = &B00000101                                       'Wybierz rejestr dla tonow wysokich
  451.    Functional_value = Heigh_tone_value
  452.    Tone1 = 1
  453.    Call Setting_function
  454.    Heigh_tone_value = Functional_value
  455.    Call bargraph_settings( "TREBLE" , Heigh_tone_value)
  456. End Sub
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  467. 'Funkcja do regulacji balansu prawego kanalu
  468. Sub Balance_right()
  469.    Local Tmpa As String * 7
  470.    Limit_value_max = 79                               'ograniczyc do -79db
  471.    Limit_value_min = 0
  472.    Register = &B00000110
  473.    Functional_value = Balance_R
  474.    Tone11 = 1
  475.    Call Setting_function
  476.    Balance_R = Functional_value
  477.  
  478.    Call Bar_Balans( "RIGHT " , Balance_R )
  479.  
  480.    'Cls
  481. '   Locate 1 , 1
  482. '   Lcd "BALANCE R "                                            '; Tmpin ; "  "
  483. '   Locate 2 , 1
  484. '   Lcd Balance_R ; "           "
  485. End Sub
  486.  
  487.  
  488.  
  489.  
  490.  
  491. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  492. 'Funkcja do regulacji balansu lewego kanalu
  493. Sub Balance_left()
  494.    Local Tmpa As String * 7
  495.    Limit_value_max = 79                               'ograniczyc do -79db
  496.    Limit_value_min = 0
  497.    Register = &B00000111
  498.    Functional_value = Balance_L
  499.    Tone11 = 1
  500.    Call Setting_function
  501.    Balance_L = Functional_value
  502.    Call Bar_Balans( "LEFT " , Balance_L )
  503.  
  504.  
  505.   ' Cls
  506. '   Locate 1 , 1
  507. '   Lcd "BALANCE L "                                            ' ; Tmpin ; "  "
  508. '   Locate 2 , 1
  509. '   Lcd Balance_L ; "           "
  510.  
  511. End Sub
  512.  
  513. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  514. 'Funkcja rozpoznawana po nacisnieciu przycisku wyboru
  515. Sub Selection()
  516.  
  517.    Button = 1
  518.    Incr Press_button
  519.    Call Change_Settings
  520.    Waitms 200
  521. End Sub
  522.  
  523. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  524. 'Funkcja do przesylania danych do TDA
  525. Sub Transfer()
  526.  
  527.    Value = Functional_value                                     'Wartosc funkcji jest zapisywana do zmiennej wyjsciowej                                            'Led ein
  528.    If Tone1 = 1 Then
  529.       Tone1 = 0
  530.       Select Case Value
  531.  
  532.  
  533.  
  534.  
  535.  
  536.       '   Case 0 : Value = 0
  537. '         Case 1 : Value = 1
  538. '         Case 2 : Value = 2
  539. '         Case 3 : Value = 3
  540. '         Case 4 : Value = 4
  541. '         Case 5 : Value = 5
  542. '         Case 6 : Value = 6
  543. '         Case 7 : Value = 7
  544. '         Case 8 : Value = 8'15
  545. '         Case 9 : Value = 9'14
  546. '         Case 10 : Value = 10'13
  547. '         Case 11 : Value = 11'12
  548. '         Case 12 : Value = 12'11
  549. '         Case 13 : Value = 13'10
  550. '         Case 14 : Value = 14'9
  551. '         Case 15 : Value = 15'8
  552.  
  553.  
  554.  
  555.          Case 0 : Value = 0
  556.          Case 1 : Value = 1
  557.          Case 2 : Value = 2
  558.          Case 3 : Value = 3
  559.          Case 4 : Value = 4
  560.          Case 5 : Value = 5
  561.          Case 6 : Value = 6
  562.          Case 7 : Value = 7
  563.          Case 8 : Value = 15
  564.          Case 9 : Value = 14
  565.          Case 10 : Value = 13
  566.          Case 11 : Value = 12
  567.          Case 12 : Value = 11
  568.          Case 13 : Value = 10
  569.          Case 14 : Value = 9
  570.          Case 15 : Value = 8
  571.  
  572.  
  573.  
  574.       End Select
  575.    End If
  576.  
  577.    I2cstart                                                 'Rozpocznij wysylanie
  578.    If Err = 0 Then
  579.       I2cwbyte Adres_Tda7439                                     'Wyslij na adres TDA
  580.       If Err = 0 Then
  581.          I2cwbyte Register                                      'Wybierz rejestr
  582.          I2cwbyte Value                                          'Zapisz wartosc w rejestrze
  583.          I2cstop                                                ' Stop
  584.       End If
  585.    End If
  586.    Waitms 20
  587.  
  588. End Sub
  589.  
  590. Sub Tin(byval Tin_val As Byte)
  591.    Cls
  592.    Select Case Tin_val
  593.       Case 0 : Db = " +0db"
  594.       Case 1 : Db = " +2db"
  595.       Case 2 : Db = " +4db"
  596.       Case 3 : Db = " +6db"
  597.       Case 4 : Db = " +8db"
  598.       Case 5 : Db = "+10db"
  599.       Case 6 : Db = "+12db"
  600.       Case 7 : Db = "+14db"
  601.       Case 8 : Db = "+16db"
  602.       Case 9 : Db = "+18db"
  603.       Case 10 : Db = "+20db"
  604.       Case 11 : Db = "+22db"
  605.       Case 12 : Db = "+24db"
  606.       Case 13 : Db = "+26db"
  607.       Case 14 : Db = "+28db"
  608.       Case 15 : Db = "+30db"
  609.    End Select
  610.    Tin_val = Tin_val + 1
  611.    Locate 1 , 1
  612.    Lcd "GAIN IN  "
  613.    Locate 1 , 12
  614.    Lcd Db
  615.    Locate 2 , 1
  616.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  617.    Locate 2 , Tin_val
  618.    Lcd Chr(2)
  619.  
  620. End Sub
  621.  
  622. Sub bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte)
  623.    Cls
  624.    Select Case Tmp_1
  625.       Case 0 : Db = "-14db"
  626.       Case 1 : Db = "-12db"
  627.       Case 2 : Db = "-10db"
  628.       Case 3 : Db = " -8db"
  629.       Case 4 : Db = " -6db"
  630.       Case 5 : Db = " -4db"
  631.       Case 6 : Db = " -2db"
  632.       Case 7 : Db = " -0db"
  633.       Case 8 : Db = " +2db"
  634.       Case 9 : Db = " +4db"
  635.       Case 10 : Db = " +6db"
  636.       Case 11 : Db = " +8db"
  637.       Case 12 : Db = "+10db"
  638.       Case 13 : Db = "+12db"
  639.       Case 14 : Db = "+14db"
  640.    End Select
  641.  
  642.    Tmp_2 = Tmp_1 + 1
  643.    Locate 1 , 1
  644.    Lcd Tone ; "  "
  645.    Locate 1 , 11
  646.    Lcd Db
  647.    Locate 2 , 1
  648.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(1) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  649.    Locate 2 , Tmp_2
  650.  
  651.    If Tmp_2 = 8 Then
  652.       Lcd Chr(3)
  653.    Else
  654.       Lcd Chr(2)
  655.    End If
  656. End Sub
  657.  
  658.  
  659.  
  660. Sub Bar_Balans(byval Tone11 As String , Byval Tmp_11 As Byte)
  661.  
  662.   Cls
  663.    Select Case Tmp_11
  664.       Case 0 : Db = "-100%"
  665.       Case 1 : Db = "-94%"
  666.       Case 2 : Db = "-88%"
  667.       Case 3 : Db = "-82%"
  668.       Case 4 : Db = "-76%"
  669.       Case 5 : Db = "-64%"
  670.       Case 6 : Db = "-58%"
  671.       Case 7 : Db = "-50%"
  672.       Case 8 : Db = "-42%"
  673.       Case 9 : Db = "-38%"
  674.       Case 10 : Db = "-32%"
  675.       Case 11 : Db = "-26%"
  676.       Case 12 : Db = "-18%"
  677.       Case 13 : Db = "-10%"
  678.       Case 14 : Db = "-0%"
  679.  
  680.  
  681.    End Select
  682.  
  683.    Tmp_2 = Tmp_11 + 1
  684.    Locate 1 , 1
  685.    Lcd Tone11 ; "  "
  686.    Locate 1 , 11
  687.    Lcd Db
  688.    Locate 2 , 1
  689.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  690.    Locate 2 , tmp_2
  691.  
  692.   ' If Tmp_2 = 8 Then
  693. '      Lcd Chr(3)
  694. '   Else
  695.       Lcd Chr(2)
  696.  
  697.     'End If
  698.  
  699. end sub
  700.  
  701.  
  702.  
  703.  
  704.  
  705. Sub Bar_vol(byval Vol_out As String , Byval Vol_val As single , Byval Sel As Byte)
  706.    Local Tt As Single
  707.    Cls
  708.    If Sel = 1 Then
  709.       Tt = Vol_val / 3
  710.  
  711.       Tmp_2 = Tt
  712.       Locate 1 , 1
  713.  
  714.       Lcd Vol_out ; " "                                          '; Tmpin
  715.       Locate 1 , 11
  716.       If Vol_val < 10 Then Lcd " "
  717.       Lcd " -" ; Vol_val ; "db"
  718.    End If
  719.  
  720.    If Sel = 2 Then
  721.       Tmp_2 = Vol_val + 1
  722.  
  723.       Locate 1 , 1
  724.       Lcd Vol_out
  725.       Locate 1 , 11
  726.       If Vol_val < 10 Then Lcd " "
  727.       Lcd "  " ; Vol_val ; "db"
  728.    End If
  729.  
  730.  
  731. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  732.    If vol_val = 0 then
  733.    Call mute()                                                                                       'moje mute
  734.    End if
  735. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  736.  
  737.  
  738.    Locate 2 , 1
  739.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  740.    Locate 2 , Tmp_2
  741.    Lcd Chr(2)
  742. End Sub
  743.  
  744. End
  745.  
  746.  
  747. Sub mute()
  748.  
  749. Adres_Tda7439 = &H88
  750.  
  751. Register = &B00000000
  752.  
  753. Call Transfer
  754.  
  755. End sub
  756.  
  757.  
  758.  
  759. Int0_isr:
  760.  
  761.    Disable Int0
  762.    If Pind.3 = 0 Then
  763.       Count = 0
  764.       If Press_button = 1 Or Press_button = 2 Then
  765.          Encoder_A = 1
  766.          Encoder_B = 0
  767.       Else
  768.          Encoder_A = 0
  769.          Encoder_B = 1
  770.       End If
  771.       Button = 0
  772.       Held_var = 0
  773.       Call Setting_function
  774.       Call Change_Settings
  775.  
  776.    Else
  777.       Count = 0
  778.       If Press_button = 1 Or Press_button = 2 Then
  779.          Encoder_A = 0
  780.          Encoder_B = 1
  781.       Else
  782.          Encoder_A = 1
  783.          Encoder_B = 0
  784.       End If
  785.       Button = 0
  786.       Held_var = 0
  787.       Call Setting_function
  788.       Call Change_Settings
  789.    End If
  790.  
  791.    Gifr = 64
  792.    Enable Int0
  793. Return
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: kulamario » 03 lis 2018, 1:07

Dopisałem troszkę pilota tz
volume up/down
power on/off z pilota i po przez przytrzymanie enkodera
przycisk enkodera w pilocie
mute ale tylko ON - nie umiem wrócić do muzyki ze by grała
doszedłem do tego jak zrobić ze by wyświetlacz gasł w 100%
ta linia załatwia sprawę

Kod: Zaznacz cały

 Ddrd = &B00000000

  1. $regfile = "m16def.dat"
  2. $crystal = 8000000                                          '11059200
  3. $swstack = 64
  4. $hwstack = 64
  5. $framesize = 200
  6.  
  7. Config Portc.5 = Output : Relay Alias Portc.5 : Set Relay
  8.  
  9.  
  10. Config Submode = New
  11.  
  12. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.1 , Db6 = Portd.7 , Db7 = Portd.0 , E = Portd.5 , Rs = Portd.6       'PCB
  13. Config Lcd = 16x2
  14.  
  15. 'Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0       'ZL3AVR
  16. 'Config Lcd = 20x4
  17.  
  18. Initlcd
  19.  
  20. Cursor Off
  21.  
  22. 'Waitms 1000
  23.  
  24. 'Variable for Data to TDA7439
  25. '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  26. ' konfiguracja RC5
  27.  
  28. Config Rc5 = Pinc.3 , Timer = 2 , Wait = 250
  29.  
  30. 'Config Rc5 = Pinc.3 , Timer = 2
  31.  
  32. Dim Address As Byte , Command As Byte
  33.  
  34.  
  35. '---------------------------------------------------------------------------------------------------------------------------------------------
  36.  
  37. Declare Sub Memory_on_off()
  38.  
  39. Declare Sub Pwr_on()
  40. Declare Sub Pwr_off()
  41.  
  42. Dim Pwr As Bit
  43. Pwr = 1
  44.  
  45. '----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  46. Dim Input_value As Byte                                     'Zmienna dla multipleksera wejsciowego
  47. Dim Input_gain_value As Byte                                'Zmienna dla poziom wejscia
  48. Dim Volume_value As Byte                                    'Zmienna dla Volume
  49. Dim Bass_tone_value As Byte                                 'Zmienna dla Bas
  50. Dim Middle_tone_value As Byte                               'Zmienna dla tony srodek
  51. Dim Heigh_tone_value As Byte                                'Zmienna dla tony wysokie
  52. Dim Limit_value_max As Byte                                 'Zmienna wartosci graniczna w gore
  53. Dim Limit_value_min As Byte                                 'Zmienna wartosci graniczna w dól
  54.  
  55. Dim Balance_r As Byte                                       'Zmienna dla Balans R
  56. Dim Balance_l As Byte                                       'Zmienna dla Balans L
  57.  
  58. Dim Value As Byte                                           'Wartosc zapisana w rejestrze
  59.  
  60. Dim Adres_tda7439 As Byte                                   'Adres i2c TDA
  61.  
  62. Dim Register As Byte                                        'Zdefiniuj rejestr, w którym zapisano wartosc
  63.  
  64.  
  65. Dim Press_button As Byte                                    'Zmienna do okreslenia nacisniecia klawisza, a tym samym mozliwosc wprowadzenia róznych ustawien
  66. Dim Functional_value As Byte                                'Zmienna jest zdefiniowana dla wszystkich zmiennych poszczególnych ustawien
  67. Dim Held_var As Bit                                         'Zmienna wyswietla sie po nacisnieciu przycisku
  68. Dim Encoder_a As Bit                                        'Zmienna wskazuje, czy przycisk zostal nacisniety
  69. Dim Encoder_b As Bit                                        'Zmienna pokazuje, czy przycisk zostal nacisniety
  70. Dim Button As Bit                                           'Zmienna do okreslenia, czy nacisnieto przycisk wyboru
  71.  
  72. Dim Tmpin As Byte
  73. Dim Count As Word
  74. Dim Tmp_1 As Byte , Tmp_2 As Byte , Db As String * 5 , Tone As String * 6 , Vol_out As String * 7
  75.  
  76. Dim Tone1 As Byte
  77.  
  78. Dim Tone11 As Byte                                          'Tone11 to jest napis z bufora right,left
  79.  
  80. Deflcdchar 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 32
  81. Deflcdchar 2 , 32 , 14 , 14 , 14 , 14 , 14 , 32 , 32
  82. Deflcdchar 3 , 4 , 14 , 14 , 14 , 14 , 14 , 4 , 32
  83. Deflcdchar 4 , 32 , 32 , 32 , 21 , 32 , 32 , 32 , 32
  84. Deflcdchar 5 , 6 , 14 , 30 , 30 , 30 , 14 , 6 , 32
  85.  
  86. Declare Sub Bar_vol(byval Vol_out As String , Byval Vol_val As Byte , Byval Sel As Byte)       'bargraf od volume
  87.  
  88. Declare Sub Bar_balans(byval Tone11 As String , Byval Tmp_11 As Byte)       'bargraf od balansu
  89.  
  90. Declare Sub Bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte)       'bargraf od ustawien tonow
  91.  
  92. Declare Sub Settings_tda7439()
  93. Declare Sub Mute()
  94. Declare Sub Selection()
  95. Declare Sub Balance_left()
  96. Declare Sub Balance_right()
  97. Declare Sub Select_input()
  98.  
  99. Declare Sub Change_settings()
  100. Declare Sub Setting_function()
  101.  
  102. Declare Sub High_tones()
  103. Declare Sub Inputgain()
  104. Declare Sub Volume()
  105. Declare Sub Bass()
  106. Declare Sub Middle_tones()
  107.  
  108. Declare Sub Button_test()
  109. Declare Sub Transfer()
  110. Declare Sub Main()
  111. Declare Sub Lcd_init()
  112. Declare Sub Tin(byval Tin_val As Byte)
  113.  
  114.  
  115.  
  116. 'Ports I2C ATMEGA
  117. '4K7 pullup SCL & SDA
  118.  
  119. Config Scl = Portc.0
  120. Config Sda = Portc.1
  121.  
  122. Config I2cdelay = 20
  123.  
  124. 'Zdefiniuj dla przycisków sterujacych i zdefiniuj je jako wejscia
  125. Dim Sw_cnt As Byte , Lock As Byte
  126. Config Pind.2 = Input : Portd.2 = 1                         'Encoder A
  127. Config Pind.3 = Input : Portd.3 = 1                         'Encoder B
  128. Config Pinc.2 = Input : Portc.2 = 1 : Switch Alias Pinc.2   'switch
  129.  
  130. Config Pinb.0 = Input : Portb.0 = 1 : on_off Alias Pinb.0   'switch on/off
  131.  
  132. Config Debounce = 50
  133. '---------------------------------------------------------------------------------
  134.  
  135. On Int0 Int0_isr
  136. Enable Int0
  137. Config Int0 = Falling
  138.  
  139. Enable Interrupts
  140.  
  141. 'Standart Register
  142.  
  143. Call Settings_tda7439()
  144.  
  145.  
  146. Press_button = 1                                            'Ustaw przycisk, aby ustawic domyslny
  147.  
  148. Cls
  149.  
  150. Locate 1 , 1
  151. Lcd " System TDA7439 "
  152. Locate 2 , 1
  153. Lcd "Wait a moment..."
  154.  
  155. Waitms 1500
  156. Cls
  157. Display Off
  158. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  159. 'Funkcja aby sprawdzic stan przycisków
  160. Call Select_input
  161. Call Volume
  162. Display On
  163.  
  164.  
  165.  
  166. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  167. 'Funkcja do sprawdzania, czy zostal nacisniety przycisk
  168. Sub Button_test()
  169.  
  170.    Encoder_a = 0
  171.    Encoder_b = 0
  172.    Button = 0
  173.  
  174.     If Tifr.ocf2 = 1 Then                                   'minê³o 10ms, flagê ustawia Timer
  175.       Tifr.ocf2 = 1                                         'flagi kasuje siê wpisuj¹c jeden, nie zero
  176.  
  177.  
  178.       If Switch = 0 Then                                    'jeœli wciœniêto przycisk
  179.          If Lock = 0 Then                                   'a jeszcze nie ma blokady
  180.             If Sw_cnt < 50 Then                             'tu jesteœmy co 10ms i jeœli jeszcze nie osi¹gneliœmy granicy
  181.                Incr Sw_cnt                                  'to dodajemy do licznika Sw_cnt
  182.             Else                                            'jeœ³i granica osi¹gniêta
  183.                Lock = 1                                     'zablokuj dodawanie a¿ do puszczenia przycisku
  184.                Call Memory_on_off()
  185.  
  186.                '->tu dajemy to co ma sie dziac po dlugim nacisnieciu
  187.  
  188.             End If
  189.          End If
  190.       Else                                                  'kiedy zwalniamy przycisk
  191.          If Lock = 0 Then                                   'a nie by³o to d³ugie wciœniêcie
  192.             If Sw_cnt > 3 Or Command = 82 Then Call Selection       'sprawdŸ czy to nie drganie styków 3x10ms = 30ms
  193.  
  194.          End If                                             '->zmieñ stan pierwszej diody
  195.          Lock = 0 : Sw_cnt = 0                              'wy³¹cz blokadê i zeruj licznik
  196.       End If
  197.  
  198.  
  199.    End If
  200.  
  201. End Sub
  202.  
  203. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  204. 'Funkcja do zmiany ustawien Bass Treble Middle itp.
  205. Sub Change_settings()
  206.  
  207.    If Button = 1 Then
  208.       Count = 0
  209.       If Press_button > 8 Then
  210.          Press_button = 1                                   'Po dotarciu na koniec, nacisnij klawisz resetowania
  211.       End If
  212.    End If
  213.  
  214.  
  215.    Select Case Press_button                                 'Przy pewnym stanie opcji wywolywania klawiatury
  216.       Case 1 : Call Volume
  217.       Case 2 : Call Select_input
  218.       Case 3 : Call Inputgain
  219.       Case 4 : Call Bass
  220.       Case 5 : Call Middle_tones
  221.       Case 6 : Call High_tones
  222.  
  223.  
  224.       Case 7 : Call Balance_right
  225.       Case 8 : Call Balance_left
  226.  
  227.  
  228.    End Select
  229.  
  230.    Button = 0                                               'Zresetuj przycisk wyboru
  231.    Waitms 80
  232. End Sub
  233.  
  234. '///////////////////////////////////////////////////////////////////////////////
  235. 'Funkcja wspólna dla wszystkich ustawien
  236.  
  237. Sub Setting_function()
  238.  
  239.  
  240.  
  241.    If Encoder_a = 1 Or Command = 17 Then    'Sprawdz enkoder
  242.       If Functional_value < Limit_value_max Then            'Zapobiegaj przepelnieniu
  243.          Functional_value = Functional_value + 1            'Zwieksz wartosc funkcji o 1
  244.          Call Transfer                                      'Funkcja do transferu
  245.       End If
  246.    End If
  247.  
  248.    If Encoder_b = 1 Or Command = 16 Then
  249.  
  250.       If Functional_value > Limit_value_min Then
  251.          Functional_value = Functional_value - 1
  252.          Call Transfer
  253.       End If
  254.    End If
  255. End Sub
  256.  
  257.  
  258. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  259. 'Funkcja dla multipleksera wejsciowego
  260.  
  261. Sub Select_input()
  262. 'Set In_shift
  263.    If Held_var = 0 Then                                     'Zapobiec po prostu zmianie wejsc poprzez przytrzymanie klawiszy
  264.       Limit_value_max = 3                                   'Zapobiegaj przepelnieniu
  265.       Limit_value_min = 0
  266.       Register = &B00000000                                 'Wybierz rejestry dla multipleksera wejsciowego
  267.       Functional_value = Input_value                        ' Wartosc funkcji jest przypisana do ustawien wejsc
  268.       Call Setting_function
  269.       Input_value = Functional_value
  270.       Tmpin = Input_value + 1                               'Stara zmienna zostanie zastapiona nowa wartoscia
  271.       Cls
  272.       Locate 1 , 6
  273.       Lcd "INPUT"
  274.       Locate 2 , 1
  275.  
  276.       Select Case Input_value
  277.  
  278.          Case 3 : Lcd "      CD"
  279.          Case 2 : Lcd "      FM"
  280.          Case 1 : Lcd "    USB DAC"
  281.          Case 0 : Lcd "     PHONE"
  282.       End Select
  283.  
  284.       Waitms 300
  285.    End If
  286. End Sub
  287.  
  288.  
  289.  
  290.  
  291.  
  292. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  293. 'Funkcja do ustawiania czulosci wejsciowej
  294.  
  295. Sub Inputgain()
  296.    Local Tmpa As Byte
  297.    Limit_value_max = 15                                     'Ogranicz wzmocnienie wejsciowe do 30 db
  298.    Limit_value_min = 0
  299.    Register = &B00000001                                    'Wybierz rejestr dla regulacji czulosci
  300.    Functional_value = Input_gain_value                      'Wartosci funkcji przypisuje sie wejsciowa wartosc wzmocnienia
  301.  
  302.    Call Setting_function
  303.    Input_gain_value = Functional_value
  304.    Tmpa = Input_gain_value * 2
  305.    Call Tin(input_gain_value)
  306. End Sub
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  315. 'Funkcja do zmiany glosnosci
  316.  
  317. Sub Volume()
  318.  
  319.    Local S_1 As String * 7
  320.    Local Vol_value As Byte
  321.    Limit_value_max = 49                                     'volume jest ograniczony do góry
  322.    Limit_value_min = 0
  323.    Register = &B00000010                                    'Wybierz rejestr dla glosnosci
  324.    Functional_value = Volume_value
  325.  
  326.    Call Setting_function
  327.  
  328.    Volume_value = Functional_value
  329.  
  330.  
  331.    Select Case Input_value
  332.  
  333.       Case 3 : S_1 = "CD"
  334.       Case 2 : S_1 = "FM"
  335.       Case 1 : S_1 = "USB DAC"
  336.       Case 0 : S_1 = "PHONE"
  337.  
  338.    End Select
  339.  
  340.  
  341.    Vol_value = Volume_value - 50
  342.    Vol_value = Not Vol_value
  343.  
  344.    Call Bar_vol(s_1 , Vol_value , 1)
  345.  
  346.  
  347. End Sub
  348.  
  349.  
  350. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  351. 'Funkcja basów
  352.  
  353. Sub Bass()
  354.    Local Tmpa As String * 6
  355.    Limit_value_max = 14
  356.    Limit_value_min = 0
  357.    Register = &B00000011                                    'Wybierz rejestr dla bass
  358.    Functional_value = Bass_tone_value
  359.    Tone1 = 1
  360.    Call Setting_function
  361.    Bass_tone_value = Functional_value
  362.    Call Bargraph_settings( "BASS" , Bass_tone_value)
  363. End Sub
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  371. 'Funkcja srodkowych tonow
  372.  
  373. Sub Middle_tones()
  374.    Local Tmpa As String * 6
  375.    Limit_value_max = 14
  376.    Limit_value_min = 0
  377.    Register = &B00000100
  378.    Functional_value = Middle_tone_value                     'Wybierz rejestr dla tonow srednich
  379.    Tone1 = 1
  380.    Call Setting_function
  381.    Middle_tone_value = Functional_value
  382.    Call Bargraph_settings( "MIDDLE" , Middle_tone_value )
  383.  
  384.  
  385.    'pinc.0=0
  386.    'pinc.1=0
  387.  
  388.    'reset relay
  389.  
  390.  
  391. End Sub
  392.  
  393.  
  394.  
  395.  
  396.  
  397. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  398. 'Funkcja wysokich tonow
  399.  
  400. Sub High_tones()                                            'NOP
  401.    Local Tmpa As String * 6
  402.    Limit_value_max = 14
  403.    Limit_value_min = 0
  404.    Register = &B00000101                                    'Wybierz rejestr dla tonow wysokich
  405.    Functional_value = Heigh_tone_value
  406.    Tone1 = 1
  407.    Call Setting_function
  408.    Heigh_tone_value = Functional_value
  409.    Call Bargraph_settings( "TREBLE" , Heigh_tone_value)
  410. End Sub
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  421. 'Funkcja do regulacji balansu prawego kanalu
  422.  
  423. Sub Balance_right()
  424.    Local Tmpa As String * 7
  425.    Limit_value_max = 79                                     'ograniczyc do -79db
  426.    Limit_value_min = 0
  427.    Register = &B00000110
  428.    Functional_value = Balance_r
  429.    Tone11 = 1                                               'Tone11 to jest napis z bufora right,left
  430.    Call Setting_function
  431.    Balance_r = Functional_value
  432.  
  433.    Call Bar_balans( "RIGHT " , Balance_r )
  434.  
  435.    'Cls
  436. '   Locate 1 , 1
  437. '   Lcd "BALANCE R "                                            '; Tmpin ; "  "
  438. '   Locate 2 , 1
  439. '   Lcd Balance_R ; "           "
  440. End Sub
  441.  
  442.  
  443.  
  444.  
  445.  
  446. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  447. 'Funkcja do regulacji balansu lewego kanalu
  448.  
  449. Sub Balance_left()
  450.    Local Tmpa As String * 7
  451.    Limit_value_max = 79                                     'ograniczyc do -79db
  452.    Limit_value_min = 0
  453.    Register = &B00000111
  454.    Functional_value = Balance_l
  455.    Tone11 = 1                                               'Tone11 to jest napis z bufora right,left
  456.    Call Setting_function
  457.    Balance_l = Functional_value
  458.    Call Bar_balans( "LEFT " , Balance_l )
  459.  
  460.  
  461.   ' Cls
  462. '   Locate 1 , 1
  463. '   Lcd "BALANCE L "                                            ' ; Tmpin ; "  "
  464. '   Locate 2 , 1
  465. '   Lcd Balance_L ; "           "
  466.  
  467. End Sub
  468.  
  469. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  470. 'Funkcja rozpoznawana po nacisnieciu przycisku wyboru
  471.  
  472. Sub Selection()
  473.  
  474.    Button = 1
  475.  
  476.    Incr Press_button
  477.  
  478.    Call Change_settings
  479.  
  480.    Waitms 200
  481.  
  482.  
  483. End Sub
  484.  
  485. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  486. 'Funkcja do przesylania danych do TDA
  487.  
  488. Sub Transfer()
  489.  
  490.    Value = Functional_value                                 'Wartosc funkcji jest zapisywana do zmiennej wyjsciowej                                            'Led ein
  491.    If Tone1 = 1 Then
  492.       Tone1 = 0
  493.       Select Case Value
  494.  
  495.          Case 0 : Value = 0
  496.          Case 1 : Value = 1
  497.          Case 2 : Value = 2
  498.          Case 3 : Value = 3
  499.          Case 4 : Value = 4
  500.          Case 5 : Value = 5
  501.          Case 6 : Value = 6
  502.          Case 7 : Value = 7
  503.          Case 8 : Value = 15
  504.          Case 9 : Value = 14
  505.          Case 10 : Value = 13
  506.          Case 11 : Value = 12
  507.          Case 12 : Value = 11
  508.          Case 13 : Value = 10
  509.          Case 14 : Value = 9
  510.          Case 15 : Value = 8
  511.  
  512.       End Select
  513.    End If
  514.  
  515.    I2cstart                                                 'Rozpocznij wysylanie
  516.    If Err = 0 Then
  517.       I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  518.       If Err = 0 Then
  519.          I2cwbyte Register                                  'Wybierz rejestr
  520.          I2cwbyte Value                                     'Zapisz wartosc w rejestrze
  521.          I2cstop                                            ' Stop
  522.       End If
  523.    End If
  524.    Waitms 20
  525.  
  526. End Sub
  527.  
  528.  
  529.  
  530.  
  531. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  532.  
  533. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  534.  
  535. Sub Pwr_on()
  536.  
  537.    start watchdog
  538.  
  539.    Waitms 100
  540.  
  541.    stop watchdog
  542.  
  543. End Sub
  544.  
  545.  
  546. '------------------------------------------------------------------------------------------------------------------------------------------
  547.  
  548.  
  549. Sub Pwr_off()
  550.  
  551.  
  552.  
  553.  
  554.    Cls
  555.  
  556.    Locate 1 , 1
  557.    Lcd "   System OFF   "
  558.  
  559. Waitms 1000
  560.  
  561.    Display Off
  562.  
  563.    Reset Relay
  564.  
  565.    'I2csend &H88 , &B11111111    'RR
  566.    'I2csend &H88 , &B10011111    'LF
  567.    'I2csend &H88 , &B10111111    'RF
  568.    'I2csend &H88 , &B11011111    'LR
  569.     'toggle pwr
  570.  
  571.  Ddrd = &B00000000
  572.  
  573.    End Sub
  574.  
  575.  
  576. '-------------------------------------------------------------------------------------------------------------------------------------------
  577.  
  578.  
  579. Sub Memory_on_off()
  580.  
  581.    Pwr = Not Pwr
  582.  
  583.    If Pwr = 1 Then
  584.  
  585.       Call Pwr_on()
  586.  
  587.    Else
  588.  
  589.       Call Pwr_off()
  590.  
  591.    End If
  592.  
  593. End Sub
  594.  
  595.  
  596.  
  597. '------------------------------------------------------------------------------------------------------------------------------------------
  598.  
  599.  
  600.  
  601. Sub Settings_tda7439()
  602.  
  603.  
  604.    Adres_tda7439 = &H88                                     'adres chipa urzadzenia TDA7439
  605.    Register = &B00000000                                    'Wybierz rejestr wejsciowy
  606.    Input_value = 0                                          'Wybierz wejscie 1
  607.    Functional_value = Input_value                           'Wartosc poczatkowa rejestru multipleksera wejsciowego jest przypisana do wartosci funkcji
  608.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  609.  
  610.    Adres_tda7439 = &H88                                     'adres chipa urzadzenia TDA7439
  611.    Register = &B00000001                                    'Podadres rejestru kontroli wzmocnienia wejscia
  612.    Input_gain_value = 2
  613.    Functional_value = Input_gain_value                      'Wybierz wzmocnienie wejscia (20db)
  614.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  615.  
  616.    Adres_tda7439 = &H88
  617.    Register = &B00000010
  618.    Volume_value = 45
  619.    Functional_value = Volume_value                          'Ustaw glosnosc na -10db
  620.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  621.  
  622.    Adres_tda7439 = &H88
  623.    Register = &B00000011                                    'Rejestr  Bass
  624.    Bass_tone_value = 9                                      'Wybierz Bass 0db
  625.    Functional_value = Bass_tone_value
  626.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  627.  
  628.    Adres_tda7439 = &H88
  629.    Register = &B00000100                                    'Rejestr srodek
  630.    Middle_tone_value = 7                                    'srodek 0db
  631.    Functional_value = Middle_tone_value
  632.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  633.  
  634.    Adres_tda7439 = &H88
  635.    Register = &B00000101                                    'Rejestr wysokie tony
  636.    Heigh_tone_value = 9                                     'wysokie tony 0db
  637.    Functional_value = Heigh_tone_value
  638.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  639.  
  640.    Adres_tda7439 = &H88
  641.    Register = &B00000110                                    'Rejestr Balans prawy kanal                                        RIGHT SPEAKER
  642.    Balance_r = 0                                            '0db Balans_R
  643.    Functional_value = Balance_r
  644.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  645.  
  646.    Adres_tda7439 = &H88
  647.    Register = &B00000111                                    'Rejestr Balans lewy kanal                                             LEFT SPEAKER
  648.    Balance_l = 0
  649.    Functional_value = Balance_l                             '0db Balans lewy
  650.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  651.  
  652.  
  653. End Sub
  654.  
  655.  
  656.  
  657. Do
  658.  
  659. if on_off = 0 then
  660. call Memory_on_off()
  661. end if
  662.  
  663.  
  664. '-----------------------------------------------------------------------------------------------------------------------REMOTe CONTROLER--------------
  665.    Getrc5(address , Command)                                'read if we have remote ir command
  666.  
  667.    If Address = 0 Then
  668.  
  669.       Command = Command And &B01111111
  670.  
  671.    End If
  672.  
  673.  
  674.    Select Case Command
  675.  
  676.       '---- 8codes for remote , change code to your suit ! ----------------
  677.  
  678.       'Case 87 : Call Selection()                         'remote command code for OK
  679.  
  680.       Case 16 : Call Volume()                             'remote command code for VOL +
  681.       Case 17 : Call Volume()                               'remote command code for VOL -
  682.  
  683.       Case 13 : Call Mute()
  684.       Case 12 : Call Memory_on_off()
  685.  
  686. '      case 16 : call Setting_function()
  687. '      case 17 : call Setting_function()
  688.  
  689. '         Case 16 : Call Mminus()                            'remote command code for Vol -
  690. '         Case 144 : Call Mminus()
  691. '         Case 12 : Call Monoff()                            'remote command code for On/Off
  692. '         Case 140 : Call Monoff()
  693. '         Case 13 : Call Loudness()                          'remote command code for  Loudness
  694.         ' Case 141 : Call Loudness()
  695.  
  696.  
  697.    End Select
  698.  
  699.  
  700.  
  701.    If Count < 151 Then Incr Count                           'menu exit time
  702.    If Count = 150 Then                                      ' set to main volume
  703.       Press_button = 1
  704.       Call Volume
  705.    End If
  706.  
  707.    Waitms 10
  708.  
  709.    Call Button_test
  710.  
  711. Loop
  712.  
  713. End
  714.  
  715.  
  716. Sub Tin(byval Tin_val As Byte)
  717.    Cls
  718.    Select Case Tin_val
  719.       Case 0 : Db = " +0db"
  720.       Case 1 : Db = " +2db"
  721.       Case 2 : Db = " +4db"
  722.       Case 3 : Db = " +6db"
  723.       Case 4 : Db = " +8db"
  724.       Case 5 : Db = "+10db"
  725.       Case 6 : Db = "+12db"
  726.       Case 7 : Db = "+14db"
  727.       Case 8 : Db = "+16db"
  728.       Case 9 : Db = "+18db"
  729.       Case 10 : Db = "+20db"
  730.       Case 11 : Db = "+22db"
  731.       Case 12 : Db = "+24db"
  732.       Case 13 : Db = "+26db"
  733.       Case 14 : Db = "+28db"
  734.       Case 15 : Db = "+30db"
  735.    End Select
  736.    Tin_val = Tin_val + 1
  737.    Locate 1 , 1
  738.    Lcd "GAIN IN  "
  739.    Locate 1 , 12
  740.    Lcd Db
  741.    Locate 2 , 1
  742.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  743.    Locate 2 , Tin_val
  744.    Lcd Chr(2)
  745.  
  746. End Sub
  747.  
  748. Sub Bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte)
  749.    Cls
  750.    Select Case Tmp_1
  751.       Case 0 : Db = "-14db"
  752.       Case 1 : Db = "-12db"
  753.       Case 2 : Db = "-10db"
  754.       Case 3 : Db = " -8db"
  755.       Case 4 : Db = " -6db"
  756.       Case 5 : Db = " -4db"
  757.       Case 6 : Db = " -2db"
  758.       Case 7 : Db = " -0db"
  759.       Case 8 : Db = " +2db"
  760.       Case 9 : Db = " +4db"
  761.       Case 10 : Db = " +6db"
  762.       Case 11 : Db = " +8db"
  763.       Case 12 : Db = "+10db"
  764.       Case 13 : Db = "+12db"
  765.       Case 14 : Db = "+14db"
  766.    End Select
  767.  
  768.    Tmp_2 = Tmp_1 + 1
  769.    Locate 1 , 1
  770.    Lcd Tone ; "  "
  771.    Locate 1 , 11
  772.    Lcd Db
  773.    Locate 2 , 1
  774.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(1) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  775.    Locate 2 , Tmp_2
  776.  
  777.    If Tmp_2 = 8 Then
  778.       Lcd Chr(3)
  779.    Else
  780.       Lcd Chr(2)
  781.    End If
  782. End Sub
  783.  
  784.  
  785.  
  786. Sub Bar_balans(byval Tone11 As String , Byval Tmp_11 As Byte)
  787.  
  788.    Local Help1 As Single
  789.  
  790.    Help1 = Tmp_11 / 5
  791.  
  792.    Cls
  793.    Select Case Help1                                        'Tmp_11
  794.       Case 0 : Db = "-100%"
  795.       Case 1 : Db = "-94%"
  796.       Case 2 : Db = "-88%"
  797.       Case 3 : Db = "-82%"
  798.       Case 4 : Db = "-76%"
  799.       Case 5 : Db = "-64%"
  800.       Case 6 : Db = "-58%"
  801.       Case 7 : Db = "-50%"
  802.       Case 8 : Db = "-42%"
  803.       Case 9 : Db = "-38%"
  804.       Case 10 : Db = "-32%"
  805.       Case 11 : Db = "-26%"
  806.       Case 12 : Db = "-18%"
  807.       Case 13 : Db = "-10%"
  808.       Case 14 : Db = "-0%"
  809.  
  810.  
  811.    End Select
  812.  
  813.    Tmp_2 = Help1 + 1
  814.    Locate 1 , 1
  815.    Lcd Tone11 ; "  "                                        'Tone11 to jest napis z bufora right,left
  816.    Locate 1 , 12
  817.    Lcd Db
  818.    Locate 2 , 1
  819.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  820.    Locate 2 , Tmp_2
  821.  
  822.    Lcd Chr(2)
  823.  
  824.  
  825.  
  826. End Sub
  827.  
  828.  
  829.  
  830.  
  831.  
  832. Sub Bar_vol(byval Vol_out As String , Byval Vol_val As Single , Byval Sel As Byte)
  833.  
  834.    Local Tt As Single
  835.  
  836.    Cls
  837.  
  838. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  839.    If Vol_val = 0 Then
  840.  
  841.    Call Mute()                                              'moje mute
  842.  
  843.    End If
  844.  
  845. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  846.  
  847.  
  848.  
  849.    If Sel = 1 Then
  850.       Tt = Vol_val / 3.0625
  851.  
  852.       Tmp_2 = Tt
  853.       Locate 1 , 1
  854.  
  855.       Lcd Vol_out ; " "                                     '; Tmpin
  856.       Locate 1 , 11
  857.       If Vol_val < 10 Then Lcd " "
  858.       Lcd " -" ; Vol_val ; "db"
  859.    End If
  860.  
  861.    If Sel = 2 Then
  862.       Tmp_2 = Vol_val + 1
  863.  
  864.       Locate 1 , 1
  865.       Lcd Vol_out
  866.       Locate 1 , 11
  867.       If Vol_val < 10 Then Lcd " "
  868.       Lcd "  " ; Vol_val ; "db"
  869.    End If
  870.  
  871.  
  872.    Locate 2 , 1
  873.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  874.    Locate 2 , Tmp_2
  875.    Lcd Chr(2)
  876.  
  877. End Sub
  878.  
  879.  
  880.  
  881.  
  882. End
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889. Sub Mute()
  890.  
  891. Adres_tda7439 = &H88
  892.  
  893. Register = &B00000000
  894.  
  895. cls
  896.  
  897. locate 1,1
  898.  
  899. lcd "     M U T E    "
  900.  
  901. waitms 500
  902.  
  903. cls
  904.  
  905.  
  906.   Value = Functional_value                                 'Wartosc funkcji jest zapisywana do zmiennej wyjsciowej                                            'Led ein
  907.    If Tone1 = 1 Then
  908.       Tone1 = 0
  909.       Select Case Value
  910.  
  911.          Case 0 : Value = 0
  912.          Case 1 : Value = 1
  913.          Case 2 : Value = 2
  914.          Case 3 : Value = 3
  915.          Case 4 : Value = 4
  916.          Case 5 : Value = 5
  917.          Case 6 : Value = 6
  918.          Case 7 : Value = 7
  919.          Case 8 : Value = 15
  920.          Case 9 : Value = 14
  921.          Case 10 : Value = 13
  922.          Case 11 : Value = 12
  923.          Case 12 : Value = 11
  924.          Case 13 : Value = 10
  925.          Case 14 : Value = 9
  926.          Case 15 : Value = 8
  927.  
  928.       End Select
  929.    End If
  930.  I2cstart                                                 'Rozpocznij wysylanie
  931.    If Err = 0 Then
  932.       I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  933.       If Err = 0 Then
  934.          I2cwbyte Register                                  'Wybierz rejestr
  935.          I2cwbyte Value                                     'Zapisz wartosc w rejestrze
  936.          I2cstop                                            ' Stop
  937.       End If
  938.    End If
  939.    Waitms 20
  940.  
  941. 'call volume
  942.  
  943. End Sub
  944.  
  945.  
  946.  
  947.  
  948. Int0_isr:
  949.  
  950.    Disable Int0
  951.  
  952.    If Pind.3 = 0 Then
  953.  
  954.       Count = 0
  955.  
  956.       If Press_button = 1 Or Press_button = 2 Then
  957.  
  958.          Encoder_a = 1
  959.          Encoder_b = 0
  960.  
  961.       Else
  962.  
  963.          Encoder_a = 0
  964.          Encoder_b = 1
  965.  
  966.       End If
  967.  
  968.  
  969.       Button = 0
  970.  
  971.       Held_var = 0
  972.  
  973.  
  974.  
  975.       Call Setting_function
  976.       Call Change_settings
  977.  
  978.  
  979.    Else
  980.  
  981.       Count = 0
  982.  
  983.       If Press_button = 1 Or Press_button = 2 Then
  984.  
  985.          Encoder_a = 0
  986.          Encoder_b = 1
  987.  
  988.       Else
  989.  
  990.          Encoder_a = 1
  991.          Encoder_b = 0
  992.  
  993.       End If
  994.  
  995.       Button = 0
  996.  
  997.       Held_var = 0
  998.  
  999.  
  1000.  
  1001.       Call Setting_function
  1002.       Call Change_settings
  1003.  
  1004.  
  1005.    End If
  1006.  
  1007.    Gifr = 64
  1008.  
  1009.  
  1010.    Enable Int0
  1011.  
  1012.  
  1013. Return
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: kulamario » 03 lis 2018, 23:42

Witam
Moze by mi ktoś podpowiedział jak zrobić pamięć ustawień do TDA ?
wiem ze można zapisywać w epromie od atmegi ale jak to zrobić ze by zapis był tylko po zmianie ustawień a odczyt na starcie programu
nie wiem tez jak zrobić powrót z mute z tym tez bym potrzebował podpowiedzi
Awatar użytkownika
niveasoft
Posty: 1215
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: niveasoft » 04 lis 2018, 3:51

Samo pamiętanie i odczytywanie z Eeprom ustawień wydaje się dość proste:
  1. 'multipurpose
  2. Dim Helpb As Byte
  3. 'TDA variables
  4. Dim Ee_mark As Eram Byte
  5. Dim Ustawienie_basu As Byte , Ustawienie_basu_ee As Eram Byte
  6.  
  7. 'wartosci poczatkowe zaraz po zaprogramowaniu Atmegi
  8. Helpb = Ee_mark
  9. If Helpb <> 0 Then
  10.  Ee_mark = 0                                                'zapamietaj że pamięć była już wstępnie programowana
  11.  
  12.   Ustawienie_basu_ee = 10
  13. End If
  14.  
  15. 'normalny odczyt z pamięci po starcie programu
  16. Ustawienie_basu = Ustawienie_basu_ee
  17.  
  18. 'teraz wyślij Ustawienia_basu do TDA
W wersji Bascom 2081, którą można znaleźć, jedną z nowych funkcji jest to, że Eeprom może być uaktualniany tylko jeśli wartość się zmieniła. Piszesz u góry w kodzie:
  1. Const Updateeprom = 1
Będzie to działało tak samo jak mój kod poniżej:
  1. 'Jeśli w programie zmieniono ustawienia basu i powinny byc zapamiętane
  2. Helpb = Ustawienie_basu_ee                                  'odczytaj z pamięci
  3.  If Helpb <> Ustawienie_basu Then                           'jesli w pamięci jest coś innego
  4.   Ustawienie_basu_ee = Ustawienie_basu                      'to tylko wtedy zapamietaj
  5.  End If
Poniżej oficjalny opis:
- When Defining A Constant Named Updateeprom , The Eeprom Will Be Updated. Which Means That The Value Will Only Be Written When It Differs
Awatar użytkownika
niveasoft
Posty: 1215
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: niveasoft » 04 lis 2018, 4:27

Co do tego Mute... to chyba widzę jakiś błąd w Twoim programie.
Masz tam Sub Mute gdzie :
  1. Adres_tda7439 = &H88
  2. Register = &B00000000
, ale rejestr 0 nie wybiera Mute tylko wejścia i wartością 0 wybierasz wejście nr 4

Mute włącza się w rejestrze Speaker (są dwa R i L)
Tam pisze Speaker attenuate czyli osłabienie. 0dB osłabienia to najgłośniej a -79dB to Mute
Żeby wybrać Mute trzebaby chyba wysłać coś takiego
  1. 'MUTE ON
  2. Register = &B00010110                                       'Speaker attenuate R + bus increment
  3. Value = &B01111000
  4.  
  5.  I2cstart
  6.    If Err = 0 Then
  7.       I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  8.       If Err = 0 Then
  9.          I2cwbyte Register                                  'Speaker attenuate R + bus increment
  10.          I2cwbyte Value                                     'Mute R ON
  11.          I2cwbyte Value                                     'Mute L ON
  12.          I2cstop
  13.       End If
  14.    End If
  15.  
  16.  
  17.  
  18. 'MUTE OFF
  19. Register = &B00010110                                       'Speaker attenuate R + bus increment
  20. Value = &B00000000
  21.  
  22. I2cstart
  23.    If Err = 0 Then
  24.       I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  25.       If Err = 0 Then
  26.          I2cwbyte Register                                  'Speaker attenuate R + bus increment
  27.          I2cwbyte Value                                     'Mute R OFF
  28.          I2cwbyte Value                                     'Mute L OFF
  29.          I2cstop
  30.       End If
  31.    End If
  32.  
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: kulamario » 04 lis 2018, 8:00

Sprawdzę to
mówisz ze po wciśnięciu mute on mi zmienia źródło na czwarte ?
tylko ze sprawdzę to za tydzień bo jestem właśnie w drodze do polski
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: kulamario » 14 lis 2018, 13:30

Witam po krótkiej przerwie
Bartek sprawdziłem to co pisałeś no i masz racje moje mute zmienia źródło a nie wycisza
wsadziłem twoje procedury do kodu ale mam problem bo nie wiem jak zrobić ze by po pierwszym wciśnięciu przycisku mute on mi został w podprogramie mute_on i czekał na następne wciśnięcie przycisku mute aby wyjść i włączyć dźwięk
  1. 'TDA7439 - 3 listopad 20018    kulamario@yahoo.ie
  2.  
  3. 'dodany pilot
  4. 'volume up/down
  5. 'ON/OFF z pilota i guzika
  6. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  7. $regfile = "m16def.dat"
  8. $crystal = 8000000                                          '11059200
  9. $swstack = 64
  10. $hwstack = 64
  11. $framesize = 200
  12.  
  13. $include "Config_PCF8583.bas"
  14.  
  15. Config Portc.5 = Output : Relay Alias Portc.5 : Set Relay
  16.  
  17.  
  18. Config Submode = New
  19.  
  20. Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.1 , Db6 = Portd.7 , Db7 = Portd.0 , E = Portd.5 , Rs = Portd.6       'PCB
  21. Config Lcd = 16x2
  22.  
  23. 'Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0       'ZL3AVR
  24. 'Config Lcd = 20x4
  25.  
  26. Initlcd
  27.  
  28. Cursor Off
  29.  
  30. 'Waitms 1000
  31.  
  32. 'Variable for Data to TDA7439
  33. '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  34. ' konfiguracja RC5
  35.  
  36. Config Rc5 = Pinc.3 , Timer = 2 , Wait = 250
  37.  
  38. 'Config Rc5 = Pinc.3 , Timer = 2
  39.  
  40. Dim Address As Byte , Command As Byte
  41.  
  42. '------------------------------------------------------------------
  43.  
  44. Dim Second As Byte
  45. Dim Minute As Byte
  46. Dim Hour As Byte
  47. Dim Day As Byte
  48. Dim Month As Byte
  49. Dim Year As Word
  50. Dim Weekday As Byte
  51.  
  52. Dim Blad As Byte
  53. Dim Ilosc_dni As Byte
  54. Dim Rok_przestepny As Byte
  55.  
  56. ' pocz¹tkowe wartoœci
  57.  
  58. Second = 0                                                  ' 00:00:00
  59. Minute = 0
  60. Hour = 0
  61. Day = 1                                                     ' 01.01.2000
  62. Month = 1
  63. Year = 2000
  64. Weekday = 6                                                 ' sobota
  65.  
  66. '---------------------------------------------------------------------------------------------------------------------------------------------
  67.  
  68. Declare Sub Memory_on_off()
  69.  
  70. Declare Sub Pwr_on()
  71. Declare Sub Pwr_off()
  72.  
  73. Dim Pwr As Bit
  74. Pwr = 1
  75.  
  76. '----------------------------------------------------------------------------------------------------------------------------------------------------------------------
  77. Dim Input_value As Byte                                     'Zmienna dla multipleksera wejsciowego
  78. Dim Input_gain_value As Byte                                'Zmienna dla poziom wejscia
  79. Dim Volume_value As Byte                                    'Zmienna dla Volume
  80. Dim Bass_tone_value As Byte                                 'Zmienna dla Bas
  81. Dim Middle_tone_value As Byte                               'Zmienna dla tony srodek
  82. Dim Heigh_tone_value As Byte                                'Zmienna dla tony wysokie
  83. Dim Limit_value_max As Byte                                 'Zmienna wartosci graniczna w gore
  84. Dim Limit_value_min As Byte                                 'Zmienna wartosci graniczna w dól
  85.  
  86. Dim Balance_r As Byte                                       'Zmienna dla Balans R
  87. Dim Balance_l As Byte                                       'Zmienna dla Balans L
  88.  
  89. Dim Value As Byte                                           'Wartosc zapisana w rejestrze
  90.  
  91. Dim Adres_tda7439 As Byte                                   'Adres i2c TDA
  92.  
  93. Dim Register As Byte                                        'Zdefiniuj rejestr, w którym zapisano wartosc
  94.  
  95.  
  96. Dim Press_button As Byte                                    'Zmienna do okreslenia nacisniecia klawisza, a tym samym mozliwosc wprowadzenia róznych ustawien
  97. Dim Functional_value As Byte                                'Zmienna jest zdefiniowana dla wszystkich zmiennych poszczególnych ustawien
  98. Dim Held_var As Bit                                         'Zmienna wyswietla sie po nacisnieciu przycisku
  99. Dim Encoder_a As Bit                                        'Zmienna wskazuje, czy przycisk zostal nacisniety
  100. Dim Encoder_b As Bit                                        'Zmienna pokazuje, czy przycisk zostal nacisniety
  101. Dim Button As Bit                                           'Zmienna do okreslenia, czy nacisnieto przycisk wyboru
  102.  
  103. Dim Tmpin As Byte
  104. Dim Count As Word
  105. Dim Tmp_1 As Byte , Tmp_2 As Byte , Db As String * 5 , Tone As String * 6 , Vol_out As String * 7
  106.  
  107. Dim Tone1 As Byte
  108.  
  109. Dim Tone11 As Byte                                          'Tone11 to jest napis z bufora right,left
  110.  
  111. Deflcdchar 1 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 32
  112. Deflcdchar 2 , 32 , 14 , 14 , 14 , 14 , 14 , 32 , 32
  113. Deflcdchar 3 , 4 , 14 , 14 , 14 , 14 , 14 , 4 , 32
  114. Deflcdchar 4 , 32 , 32 , 32 , 21 , 32 , 32 , 32 , 32
  115. Deflcdchar 5 , 6 , 14 , 30 , 30 , 30 , 14 , 6 , 32
  116.  
  117. Declare Sub Bar_vol(byval Vol_out As String , Byval Vol_val As Byte , Byval Sel As Byte)       'bargraf od volume
  118.  
  119. Declare Sub Bar_balans(byval Tone11 As String , Byval Tmp_11 As Byte)       'bargraf od balansu
  120.  
  121. Declare Sub Bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte)       'bargraf od ustawien tonow
  122.  
  123. Declare Sub Settings_tda7439()
  124. Declare Sub Mute_on()
  125. declare sub mute_off()
  126. Declare Sub Selection()
  127. Declare Sub Balance_left()
  128. Declare Sub Balance_right()
  129. Declare Sub Select_input()
  130.  
  131. Declare Sub Change_settings()
  132. Declare Sub Setting_function()
  133.  
  134. Declare Sub High_tones()
  135. Declare Sub Inputgain()
  136. Declare Sub Volume()
  137. Declare Sub Bass()
  138. Declare Sub Middle_tones()
  139.  
  140. Declare Sub Button_test()
  141. Declare Sub Transfer()
  142. Declare Sub Main()
  143. Declare Sub Lcd_init()
  144. Declare Sub Tin(byval Tin_val As Byte)
  145.  
  146.  
  147.  
  148. 'Ports I2C ATMEGA
  149. '4K7 pullup SCL & SDA
  150.  
  151. Config Scl = Portc.0
  152. Config Sda = Portc.1
  153.  
  154. Config I2cdelay = 20
  155.  
  156. 'Zdefiniuj dla przycisków sterujacych i zdefiniuj je jako wejscia
  157. Dim Sw_cnt As Byte , Lock As Byte
  158. Config Pind.2 = Input : Portd.2 = 1                         'Encoder A
  159. Config Pind.3 = Input : Portd.3 = 1                         'Encoder B
  160. Config Pinc.2 = Input : Portc.2 = 1 : Switch Alias Pinc.2   'switch
  161.  
  162. Config Pinb.0 = Input : Portb.0 = 1 : on_off Alias Pinb.0   'switch on/off
  163.  
  164. Config Debounce = 50
  165. '---------------------------------------------------------------------------------
  166.  
  167. On Int0 Int0_isr
  168. Enable Int0
  169. Config Int0 = Falling
  170.  
  171. Enable Interrupts
  172.  
  173. 'Standart Register
  174.  
  175. Call Settings_tda7439()
  176.  
  177.  
  178. Press_button = 1                                            'Ustaw przycisk, aby ustawic domyslny
  179.  
  180. Cls
  181.  
  182. Locate 1 , 1
  183. Lcd " System TDA7439 "
  184. Locate 2 , 1
  185. Lcd "Wait a moment..."
  186.  
  187. Waitms 1500
  188. Cls
  189. Display Off
  190. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  191. 'Funkcja aby sprawdzic stan przycisków
  192.  
  193. Call Select_input
  194.  
  195.  
  196. 'Call Volume
  197.  
  198. Display On
  199.  
  200.  
  201. Blad = Pcf8583_storetime(second , Minute , Hour , Day , Month , Year)       ' zapis do Pcf8583
  202.  
  203.  
  204.  
  205. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  206. 'Funkcja do sprawdzania, czy zostal nacisniety przycisk
  207. Sub Button_test()
  208.  
  209.    Encoder_a = 0
  210.    Encoder_b = 0
  211.    Button = 0
  212.  
  213.    If Tifr.ocf2 = 1 Then                                   'minê³o 10ms, flagê ustawia Timer
  214.       Tifr.ocf2 = 1                                         'flagi kasuje siê wpisuj¹c jeden, nie zero
  215.  
  216.  
  217.       If Switch = 0 Then                                    'jeœli wciœniêto przycisk
  218.          If Lock = 0 Then                                   'a jeszcze nie ma blokady
  219.             If Sw_cnt < 50 Then                             'tu jesteœmy co 10ms i jeœli jeszcze nie osi¹gneliœmy granicy
  220.                Incr Sw_cnt                                  'to dodajemy do licznika Sw_cnt
  221.             Else                                            'jeœ³i granica osi¹gniêta
  222.                Lock = 1                                     'zablokuj dodawanie a¿ do puszczenia przycisku
  223.                Call Memory_on_off()
  224.  
  225.                '->tu dajemy to co ma sie dziac po dlugim nacisnieciu
  226.  
  227.             End If
  228.          End If
  229.       Else                                                  'kiedy zwalniamy przycisk
  230.          If Lock = 0 Then                                   'a nie by³o to d³ugie wciœniêcie
  231.             If Sw_cnt > 3 Or Command = 82 Then Call Selection       'sprawdŸ czy to nie drganie styków 3x10ms = 30ms
  232.  
  233.          End If                                             '->zmieñ stan pierwszej diody
  234.          Lock = 0 : Sw_cnt = 0                              'wy³¹cz blokadê i zeruj licznik
  235.       End If
  236.  
  237.  
  238.    End If
  239.  
  240. End Sub
  241.  
  242.  
  243. '---------------------------------------------------------------------------------------------------------------------------------------
  244.  
  245.  
  246.  
  247. '---------------------------------------------------------------------------------------------------------------------------------------
  248.  
  249. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  250. 'Funkcja do zmiany ustawien Bass Treble Middle itp.
  251. Sub Change_settings()
  252.  
  253.    If Button = 1 Then
  254.       Count = 0
  255.       If Press_button > 8 Then
  256.          Press_button = 1                                   'Po dotarciu na koniec, nacisnij klawisz resetowania
  257.       End If
  258.    End If
  259.  
  260.  
  261.    Select Case Press_button                                 'Przy pewnym stanie opcji wywolywania klawiatury
  262.       Case 1 : Call Volume
  263.       Case 2 : Call Select_input
  264.       Case 3 : Call Inputgain
  265.       Case 4 : Call Bass
  266.       Case 5 : Call Middle_tones
  267.       Case 6 : Call High_tones
  268.  
  269.  
  270.       Case 7 : Call Balance_right
  271.       Case 8 : Call Balance_left
  272.  
  273.  
  274.    End Select
  275.  
  276.    Button = 0                                               'Zresetuj przycisk wyboru
  277.    Waitms 80
  278. End Sub
  279.  
  280. '///////////////////////////////////////////////////////////////////////////////
  281. 'Funkcja wspólna dla wszystkich ustawien
  282.  
  283. Sub Setting_function()
  284.  
  285.  
  286.  
  287.    If Encoder_a = 1 Or Command = 17 Then    'Sprawdz enkoder
  288.       If Functional_value < Limit_value_max Then            'Zapobiegaj przepelnieniu
  289.          Functional_value = Functional_value + 1            'Zwieksz wartosc funkcji o 1
  290.          Call Transfer                                      'Funkcja do transferu
  291.       End If
  292.    End If
  293.  
  294.    If Encoder_b = 1 Or Command = 16 Then
  295.  
  296.       If Functional_value > Limit_value_min Then
  297.          Functional_value = Functional_value - 1
  298.          Call Transfer
  299.       End If
  300.    End If
  301. End Sub
  302.  
  303.  
  304. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  305. 'Funkcja dla multipleksera wejsciowego
  306.  
  307. Sub Select_input()
  308. 'Set In_shift
  309.    If Held_var = 0 Then                                     'Zapobiec po prostu zmianie wejsc poprzez przytrzymanie klawiszy
  310.       Limit_value_max = 3                                   'Zapobiegaj przepelnieniu
  311.       Limit_value_min = 0
  312.       Register = &B00000000                                 'Wybierz rejestry dla multipleksera wejsciowego
  313.       Functional_value = Input_value                        ' Wartosc funkcji jest przypisana do ustawien wejsc
  314.       Call Setting_function
  315.       Input_value = Functional_value
  316.       Tmpin = Input_value + 1                               'Stara zmienna zostanie zastapiona nowa wartoscia
  317.       Cls
  318.       Locate 1 , 6
  319.       Lcd "INPUT"
  320.       Locate 2 , 1
  321.  
  322.       Select Case Input_value
  323.  
  324.          Case 3 : Lcd "      CD"
  325.          Case 2 : Lcd "      FM"
  326.          Case 1 : Lcd "    USB DAC"
  327.          Case 0 : Lcd "     PHONE"
  328.       End Select
  329.  
  330.       Waitms 300
  331.    End If
  332. End Sub
  333.  
  334.  
  335.  
  336.  
  337.  
  338. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  339. 'Funkcja do ustawiania czulosci wejsciowej
  340.  
  341. Sub Inputgain()
  342.    Local Tmpa As Byte
  343.    Limit_value_max = 15                                     'Ogranicz wzmocnienie wejsciowe do 30 db
  344.    Limit_value_min = 0
  345.    Register = &B00000001                                    'Wybierz rejestr dla regulacji czulosci
  346.    Functional_value = Input_gain_value                      'Wartosci funkcji przypisuje sie wejsciowa wartosc wzmocnienia
  347.  
  348.    Call Setting_function
  349.    Input_gain_value = Functional_value
  350.    Tmpa = Input_gain_value * 2
  351.    Call Tin(input_gain_value)
  352. End Sub
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  361. 'Funkcja do zmiany glosnosci
  362.  
  363. Sub Volume()
  364.  
  365.    Local S_1 As String * 7
  366.    Local Vol_value As Byte
  367.    Limit_value_max = 49                                     'volume jest ograniczony do góry
  368.    Limit_value_min = 0
  369.    Register = &B00000010                                    'Wybierz rejestr dla glosnosci
  370.    Functional_value = Volume_value
  371.  
  372.    Call Setting_function
  373.  
  374.    Volume_value = Functional_value
  375.  
  376.  
  377.    Select Case Input_value
  378.  
  379.       Case 3 : S_1 = "CD"
  380.       Case 2 : S_1 = "FM"
  381.       Case 1 : S_1 = "USB DAC"
  382.       Case 0 : S_1 = "PHONE"
  383.  
  384.    End Select
  385.  
  386.  
  387.    Vol_value = Volume_value - 50
  388.    Vol_value = Not Vol_value
  389.  
  390.    Call Bar_vol(s_1 , Vol_value , 1)
  391.  
  392.    'writeeeprom Volume_value , 2
  393.  '-------------------------------------------------------------------------------------------------------------------------------------
  394.  
  395.   ' Blad = Pcf8583_gettime()                       ' odczytaj godzinê i date z uk³adu PCF8583 , funkcja zwraca kod b³êdu
  396.    '          If Blad = 2 Then                               ' je¿eli uszkodzona data
  397.  
  398.  
  399.     '               Locate 1 , 1 : Lcd "  USTAW ZEGAR!  "        ' wyœwietl komunikat
  400.      '              Locate 2 , 1 : Lcd Spc(16)
  401.                                                                                                           ' sprawdzanie PCF8583
  402.  
  403.       '       Elseif Blad = 1 Then                           ' je¿eli b³¹d magistrali I2C
  404.  
  405.  
  406.        '            Locate 1 , 1 : Lcd "B{003}{001}d:"           ' wyœwietl komunikat
  407.         '           Lcd Spc(11)
  408.          '          Locate 2 , 1 : Lcd "magistrala I2C  "
  409.  
  410.  
  411.           '   Elseif Blad = 0 Then                           ' je¿eli prawid³owo odczytane dane
  412.            '    Call Displaytime()                           ' wyœwietl zegar
  413.  
  414.             'end if
  415. '-------------------------------------------------------------------------------------------------------------------------------------
  416.  
  417. End Sub
  418.  
  419.  
  420. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  421. 'Funkcja basów
  422.  
  423. Sub Bass()
  424.    Local Tmpa As String * 6
  425.    Limit_value_max = 14
  426.    Limit_value_min = 0
  427.    Register = &B00000011                                    'Wybierz rejestr dla bass
  428.    Functional_value = Bass_tone_value
  429.    Tone1 = 1
  430.    Call Setting_function
  431.    Bass_tone_value = Functional_value
  432.    Call Bargraph_settings( "BASS" , Bass_tone_value)
  433. End Sub
  434.  
  435.  
  436.  
  437.  
  438.  
  439.  
  440. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  441. 'Funkcja srodkowych tonow
  442.  
  443. Sub Middle_tones()
  444.    Local Tmpa As String * 6
  445.    Limit_value_max = 14
  446.    Limit_value_min = 0
  447.    Register = &B00000100
  448.    Functional_value = Middle_tone_value                     'Wybierz rejestr dla tonow srednich
  449.    Tone1 = 1
  450.    Call Setting_function
  451.    Middle_tone_value = Functional_value
  452.    Call Bargraph_settings( "MIDDLE" , Middle_tone_value )
  453.  
  454.  
  455.    'pinc.0=0
  456.    'pinc.1=0
  457.  
  458.    'reset relay
  459.  
  460.  
  461. End Sub
  462.  
  463.  
  464.  
  465.  
  466.  
  467. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  468. 'Funkcja wysokich tonow
  469.  
  470. Sub High_tones()                                            'NOP
  471.    Local Tmpa As String * 6
  472.    Limit_value_max = 14
  473.    Limit_value_min = 0
  474.    Register = &B00000101                                    'Wybierz rejestr dla tonow wysokich
  475.    Functional_value = Heigh_tone_value
  476.    Tone1 = 1
  477.    Call Setting_function
  478.    Heigh_tone_value = Functional_value
  479.    Call Bargraph_settings( "TREBLE" , Heigh_tone_value)
  480. End Sub
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  491. 'Funkcja do regulacji balansu prawego kanalu
  492.  
  493. Sub Balance_right()
  494.    Local Tmpa As String * 7
  495.    Limit_value_max = 79                                     'ograniczyc do -79db
  496.    Limit_value_min = 0
  497.    Register = &B00000110
  498.    Functional_value = Balance_r
  499.    Tone11 = 1                                               'Tone11 to jest napis z bufora right,left
  500.    Call Setting_function
  501.    Balance_r = Functional_value
  502.  
  503.    Call Bar_balans( "RIGHT " , Balance_r )
  504.  
  505.    'Cls
  506. '   Locate 1 , 1
  507. '   Lcd "BALANCE R "                                            '; Tmpin ; "  "
  508. '   Locate 2 , 1
  509. '   Lcd Balance_R ; "           "
  510. End Sub
  511.  
  512.  
  513.  
  514.  
  515.  
  516. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  517. 'Funkcja do regulacji balansu lewego kanalu
  518.  
  519. Sub Balance_left()
  520.    Local Tmpa As String * 7
  521.    Limit_value_max = 79                                     'ograniczyc do -79db
  522.    Limit_value_min = 0
  523.    Register = &B00000111
  524.    Functional_value = Balance_l
  525.    Tone11 = 1                                               'Tone11 to jest napis z bufora right,left
  526.    Call Setting_function
  527.    Balance_l = Functional_value
  528.    Call Bar_balans( "LEFT " , Balance_l )
  529.  
  530.  
  531.   ' Cls
  532. '   Locate 1 , 1
  533. '   Lcd "BALANCE L "                                            ' ; Tmpin ; "  "
  534. '   Locate 2 , 1
  535. '   Lcd Balance_L ; "           "
  536.  
  537. End Sub
  538.  
  539. '////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  540. 'Funkcja rozpoznawana po nacisnieciu przycisku wyboru
  541.  
  542. Sub Selection()
  543.  
  544.    Button = 1
  545.  
  546.    Incr Press_button
  547.  
  548.    Call Change_settings
  549.  
  550.    Waitms 200
  551.  
  552.  
  553. End Sub
  554.  
  555. '///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  556. 'Funkcja do przesylania danych do TDA
  557.  
  558. Sub Transfer()
  559.  
  560.    Value = Functional_value                                 'Wartosc funkcji jest zapisywana do zmiennej wyjsciowej                                            'Led ein
  561.    If Tone1 = 1 Then
  562.       Tone1 = 0
  563.       Select Case Value
  564.  
  565.          Case 0 : Value = 0
  566.          Case 1 : Value = 1
  567.          Case 2 : Value = 2
  568.          Case 3 : Value = 3
  569.          Case 4 : Value = 4
  570.          Case 5 : Value = 5
  571.          Case 6 : Value = 6
  572.          Case 7 : Value = 7
  573.          Case 8 : Value = 15
  574.          Case 9 : Value = 14
  575.          Case 10 : Value = 13
  576.          Case 11 : Value = 12
  577.          Case 12 : Value = 11
  578.          Case 13 : Value = 10
  579.          Case 14 : Value = 9
  580.          Case 15 : Value = 8
  581.  
  582.       End Select
  583.    End If
  584.  
  585.    I2cstart                                                 'Rozpocznij wysylanie
  586.    If Err = 0 Then
  587.       I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  588.       If Err = 0 Then
  589.          I2cwbyte Register                                  'Wybierz rejestr
  590.          I2cwbyte Value                                     'Zapisz wartosc w rejestrze
  591.          I2cstop                                            ' Stop
  592.       End If
  593.    End If
  594.    Waitms 20
  595.  
  596.  
  597.  
  598.  
  599. End Sub
  600.  
  601.  
  602.  
  603.  
  604. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  605.  
  606. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  607.  
  608. Sub Pwr_on()
  609.  
  610.    start watchdog
  611.  
  612.    Waitms 100
  613.  
  614.    stop watchdog
  615.  
  616. End Sub
  617.  
  618.  
  619. '------------------------------------------------------------------------------------------------------------------------------------------
  620.  
  621.  
  622. Sub Pwr_off()
  623.  
  624.  
  625.  
  626.  
  627.    Cls
  628.  
  629.    Locate 1 , 1
  630.    Lcd "   System OFF   "
  631.  
  632.    Waitms 1000
  633.  
  634.    Display Off
  635.  
  636.    Reset Relay
  637.  
  638.    Ddrd = &B00000000
  639.  
  640. End Sub
  641.  
  642.  
  643. '-------------------------------------------------------------------------------------------------------------------------------------------
  644.  
  645.  
  646. Sub Memory_on_off()
  647.  
  648.    Pwr = Not Pwr
  649.  
  650.    If Pwr = 1 Then
  651.  
  652.       Call Pwr_on()
  653.  
  654.    Else
  655.  
  656.       Call Pwr_off()
  657.  
  658.    End If
  659.  
  660. End Sub
  661.  
  662.  
  663.  
  664. '------------------------------------------------------------------------------------------------------------------------------------------
  665.  
  666.  
  667.  
  668. Sub Settings_tda7439()
  669.  
  670.  
  671.    Adres_tda7439 = &H88                                     'adres chipa urzadzenia TDA7439
  672.    Register = &B00000000                                    'Wybierz rejestr wejsciowy
  673.    Input_value = 0                                          'Wybierz wejscie 1
  674.    Functional_value = Input_value                           'Wartosc poczatkowa rejestru multipleksera wejsciowego jest przypisana do wartosci funkcji
  675.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  676.  
  677.    Adres_tda7439 = &H88                                     'adres chipa urzadzenia TDA7439
  678.    Register = &B00000001                                    'Podadres rejestru kontroli wzmocnienia wejscia
  679.    Input_gain_value = 2
  680.    Functional_value = Input_gain_value                      'Wybierz wzmocnienie wejscia (20db)
  681.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  682.  
  683.    Adres_tda7439 = &H88
  684.    Register = &B00000010
  685.  
  686.    Volume_value = 45
  687.  
  688.    'readeeprom Volume_value , 2
  689.  
  690.  
  691.    Functional_value = Volume_value                          'Ustaw glosnosc na -10db
  692.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  693.  
  694.    Adres_tda7439 = &H88
  695.    Register = &B00000011                                    'Rejestr  Bass
  696.    Bass_tone_value = 9                                      'Wybierz Bass 0db
  697.    Functional_value = Bass_tone_value
  698.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  699.  
  700.    Adres_tda7439 = &H88
  701.    Register = &B00000100                                    'Rejestr srodek
  702.    Middle_tone_value = 7                                    'srodek 0db
  703.    Functional_value = Middle_tone_value
  704.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  705.  
  706.    Adres_tda7439 = &H88
  707.    Register = &B00000101                                    'Rejestr wysokie tony
  708.    Heigh_tone_value = 9                                     'wysokie tony 0db
  709.    Functional_value = Heigh_tone_value
  710.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  711.  
  712.    Adres_tda7439 = &H88
  713.    Register = &B00000110                                    'Rejestr Balans prawy kanal                                        RIGHT SPEAKER
  714.    Balance_r = 0                                            '0db Balans_R
  715.    Functional_value = Balance_r
  716.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  717.  
  718.    Adres_tda7439 = &H88
  719.    Register = &B00000111                                    'Rejestr Balans lewy kanal                                             LEFT SPEAKER
  720.    Balance_l = 0
  721.    Functional_value = Balance_l                             '0db Balans lewy
  722.    Call Transfer                                            'Funkcja wywolania dla transferu danych
  723.  
  724.  
  725. End Sub
  726.  
  727.  
  728.  
  729. Do
  730.  
  731.  
  732.    '-----------------------------------------------------------------------------------------------------------------------------------------------------
  733.  
  734.    if on_off = 0 then
  735.       call Memory_on_off()                                  'switch ON/OFF
  736.    end if
  737.  
  738.  
  739.  
  740.    '-----------------------------------------------------------------------------------------------------------------------REMOTe CONTROLER--------------
  741.  
  742.    Getrc5(address , Command)                                'read if we have remote ir command
  743.  
  744.    If Address = 0 Then
  745.  
  746.       Command = Command And &B01111111
  747.  
  748.    End If
  749.  
  750.  
  751.    Select Case Command
  752.  
  753.       '---- 8codes for remote , change code to your suit ! ----------------
  754.  
  755.       'Case 87 : Call Selection()                         'remote command code for OK
  756.  
  757.       Case 16 : Call Volume()                             'remote command code for VOL +
  758.       Case 17 : Call Volume()                               'remote command code for VOL -
  759.  
  760.       Case 13 : Call Mute_on()
  761.       Case 12 : Call Memory_on_off()
  762.  
  763. '      case 16 : call Setting_function()
  764. '      case 17 : call Setting_function()
  765.  
  766. '         Case 16 : Call Mminus()                            'remote command code for Vol -
  767. '         Case 144 : Call Mminus()
  768. '         Case 12 : Call Monoff()                            'remote command code for On/Off
  769. '         Case 140 : Call Monoff()
  770. '         Case 13 : Call Loudness()                          'remote command code for  Loudness
  771.         ' Case 141 : Call Loudness()
  772.  
  773.  
  774.    End Select
  775.  
  776.  
  777.  
  778.    If Count < 151 Then Incr Count                           'menu exit time
  779.    If Count = 150 Then                                      ' set to main volume
  780.       Press_button = 1
  781.       Call Volume
  782.    End If
  783.  
  784.    Waitms 10
  785.  
  786.    Call Button_test
  787.  
  788. Loop
  789.  
  790. End
  791.  
  792.  
  793. Sub Tin(byval Tin_val As Byte)
  794.    Cls
  795.    Select Case Tin_val
  796.       Case 0 : Db = " +0db"
  797.       Case 1 : Db = " +2db"
  798.       Case 2 : Db = " +4db"
  799.       Case 3 : Db = " +6db"
  800.       Case 4 : Db = " +8db"
  801.       Case 5 : Db = "+10db"
  802.       Case 6 : Db = "+12db"
  803.       Case 7 : Db = "+14db"
  804.       Case 8 : Db = "+16db"
  805.       Case 9 : Db = "+18db"
  806.       Case 10 : Db = "+20db"
  807.       Case 11 : Db = "+22db"
  808.       Case 12 : Db = "+24db"
  809.       Case 13 : Db = "+26db"
  810.       Case 14 : Db = "+28db"
  811.       Case 15 : Db = "+30db"
  812.    End Select
  813.    Tin_val = Tin_val + 1
  814.    Locate 1 , 1
  815.    Lcd "GAIN IN  "
  816.    Locate 1 , 12
  817.    Lcd Db
  818.    Locate 2 , 1
  819.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  820.    Locate 2 , Tin_val
  821.    Lcd Chr(2)
  822.  
  823. End Sub
  824.  
  825. Sub Bargraph_settings(byval Tone As String , Byval Tmp_1 As Byte)
  826.    Cls
  827.    Select Case Tmp_1
  828.       Case 0 : Db = "-14db"
  829.       Case 1 : Db = "-12db"
  830.       Case 2 : Db = "-10db"
  831.       Case 3 : Db = " -8db"
  832.       Case 4 : Db = " -6db"
  833.       Case 5 : Db = " -4db"
  834.       Case 6 : Db = " -2db"
  835.       Case 7 : Db = " -0db"
  836.       Case 8 : Db = " +2db"
  837.       Case 9 : Db = " +4db"
  838.       Case 10 : Db = " +6db"
  839.       Case 11 : Db = " +8db"
  840.       Case 12 : Db = "+10db"
  841.       Case 13 : Db = "+12db"
  842.       Case 14 : Db = "+14db"
  843.    End Select
  844.  
  845.    Tmp_2 = Tmp_1 + 1
  846.    Locate 1 , 1
  847.    Lcd Tone ; "  "
  848.    Locate 1 , 11
  849.    Lcd Db
  850.    Locate 2 , 1
  851.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(1) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  852.    Locate 2 , Tmp_2
  853.  
  854.    If Tmp_2 = 8 Then
  855.       Lcd Chr(3)
  856.    Else
  857.       Lcd Chr(2)
  858.    End If
  859. End Sub
  860.  
  861.  
  862.  
  863. Sub Bar_balans(byval Tone11 As String , Byval Tmp_11 As Byte)
  864.  
  865.    Local Help1 As Single
  866.  
  867.    Help1 = Tmp_11 / 5
  868.  
  869.    Cls
  870.    Select Case Help1                                        'Tmp_11
  871.       Case 0 : Db = "-100%"
  872.       Case 1 : Db = "-94%"
  873.       Case 2 : Db = "-88%"
  874.       Case 3 : Db = "-82%"
  875.       Case 4 : Db = "-76%"
  876.       Case 5 : Db = "-64%"
  877.       Case 6 : Db = "-58%"
  878.       Case 7 : Db = "-50%"
  879.       Case 8 : Db = "-42%"
  880.       Case 9 : Db = "-38%"
  881.       Case 10 : Db = "-32%"
  882.       Case 11 : Db = "-26%"
  883.       Case 12 : Db = "-18%"
  884.       Case 13 : Db = "-10%"
  885.       Case 14 : Db = "-0%"
  886.  
  887.  
  888.    End Select
  889.  
  890.    Tmp_2 = Help1 + 1
  891.    Locate 1 , 1
  892.    Lcd Tone11 ; "  "                                        'Tone11 to jest napis z bufora right,left
  893.    Locate 1 , 12
  894.    Lcd Db
  895.    Locate 2 , 1
  896.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  897.    Locate 2 , Tmp_2
  898.  
  899.    Lcd Chr(2)
  900.  
  901.  
  902.  
  903. End Sub
  904.  
  905.  
  906.  
  907.  
  908.  
  909. Sub Bar_vol(byval Vol_out As String , Byval Vol_val As Single , Byval Sel As Byte)
  910.  
  911.    Local Tt As Single
  912.  
  913.    Cls
  914.  
  915. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  916.    If Vol_val = 0 Then
  917.  
  918.       Call Mute_on()                                              'moje mute
  919.  
  920.    End If
  921.  
  922. '--------------------------------------------------------------------------------------------------------------------------------------------------------------------
  923.  
  924.  
  925.  
  926.    If Sel = 1 Then
  927.       Tt = Vol_val / 3.0625
  928.  
  929.       Tmp_2 = Tt
  930.       Locate 1 , 1
  931.  
  932.       Lcd Vol_out ; " "                                     '; Tmpin
  933.       Locate 1 , 11
  934.       If Vol_val < 10 Then Lcd " "
  935.       Lcd " -" ; Vol_val ; "db"
  936.    End If
  937.  
  938.    If Sel = 2 Then
  939.       Tmp_2 = Vol_val + 1
  940.  
  941.       Locate 1 , 1
  942.       Lcd Vol_out
  943.       Locate 1 , 11
  944.       If Vol_val < 10 Then Lcd " "
  945.       Lcd "  " ; Vol_val ; "db"
  946.    End If
  947.  
  948.  
  949.    Locate 2 , 1
  950.    Lcd Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4) ; Chr(4)
  951.    Locate 2 , Tmp_2
  952.    Lcd Chr(2)
  953.  
  954. End Sub
  955.  
  956.  
  957.  
  958.  
  959. End
  960.  
  961.  
  962. sub mute_on
  963.  
  964.     'MUTE ON
  965.     Register = &B00010110                                       'Speaker attenuate R + bus increment
  966.     Value = &B01111000
  967.  
  968.      I2cstart
  969.        If Err = 0 Then
  970.           I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  971.           If Err = 0 Then
  972.              I2cwbyte Register                                  'Speaker attenuate R + bus increment
  973.              I2cwbyte Value                                     'Mute R ON
  974.              I2cwbyte Value                                     'Mute L ON
  975.              I2cstop
  976.           End If
  977.        End If
  978.  
  979.  
  980.  
  981. end sub
  982.  
  983.  
  984. sub mute_off
  985.  
  986.     'MUTE OFF
  987.     Register = &B00010110                                       'Speaker attenuate R + bus increment
  988.     Value = &B00000000
  989.  
  990.     I2cstart
  991.        If Err = 0 Then
  992.           I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  993.           If Err = 0 Then
  994.              I2cwbyte Register                                  'Speaker attenuate R + bus increment
  995.              I2cwbyte Value                                     'Mute R OFF
  996.              I2cwbyte Value                                     'Mute L OFF
  997.              I2cstop
  998.           End If
  999.        End If
  1000.  
  1001. end sub
  1002.  
  1003. '-------------------------------------------------------------------------------
  1004.  
  1005. Sub Displaytime()
  1006.  
  1007.    Locate 1 , 1
  1008.    If Hour < 10 Then Lcd "0" : Lcd Hour ; ":"
  1009.    If Minute < 10 Then Lcd "0" : Lcd Minute ; ":"
  1010.    If Second < 10 Then Lcd "0" : Lcd Second
  1011.  
  1012.         Lcd Spc(16)                                         ' 16 spacji
  1013.  
  1014.  
  1015.    Locate 2 , 1
  1016.    Lcd Lookupstr(weekday , Weekdays) ; " "
  1017.    If Day < 10 Then Lcd "0" : Lcd Day ; "-"
  1018.    If Month < 10 Then Lcd "0" : Lcd Month ; "-" ; Year
  1019.    Lcd Spc(2)                                               ' 2 spacji
  1020.  
  1021. End Sub
  1022.  
  1023. '-------------------------------------------------------------------
  1024. Weekdays:
  1025. Data "Nie" , "Pon" , "Wto" , "Sro" , "Czw" , "Pt " , "Sob"
  1026.  
  1027. '-------------------------------------------------------------------
  1028. Monthlengths:
  1029. Data 0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31
  1030.  
  1031. '-------------------------------------------------------------------
  1032.  
  1033.  
  1034. Int0_isr:
  1035.  
  1036.    Disable Int0
  1037.  
  1038.    If Pind.3 = 0 Then
  1039.  
  1040.       Count = 0
  1041.  
  1042.       If Press_button = 1 Or Press_button = 2 Then
  1043.  
  1044.          Encoder_a = 1
  1045.          Encoder_b = 0
  1046.  
  1047.       Else
  1048.  
  1049.          Encoder_a = 0
  1050.          Encoder_b = 1
  1051.  
  1052.       End If
  1053.  
  1054.  
  1055.       Button = 0
  1056.  
  1057.       Held_var = 0
  1058.  
  1059.  
  1060.  
  1061.       Call Setting_function
  1062.       Call Change_settings
  1063.  
  1064.  
  1065.    Else
  1066.  
  1067.       Count = 0
  1068.  
  1069.       If Press_button = 1 Or Press_button = 2 Then
  1070.  
  1071.          Encoder_a = 0
  1072.          Encoder_b = 1
  1073.  
  1074.       Else
  1075.  
  1076.          Encoder_a = 1
  1077.          Encoder_b = 0
  1078.  
  1079.       End If
  1080.  
  1081.       Button = 0
  1082.  
  1083.       Held_var = 0
  1084.  
  1085.  
  1086.  
  1087.       Call Setting_function
  1088.       Call Change_settings
  1089.  
  1090.  
  1091.    End If
  1092.  
  1093.    Gifr = 64
  1094.  
  1095.  
  1096.    Enable Int0
  1097.  
  1098.  
  1099. Return
  1100.  
  1101.  
  1102.  
  1103. $include "PCF8583.bas"
Awatar użytkownika
niveasoft
Posty: 1215
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: niveasoft » 14 lis 2018, 13:42

Nie powinieneś nigdy zostawać w jakiejś procedurze i na coś czekać.
Program powinien być "event driven" czyli reagować jak coś się zdarzy a tak normalnie to czekać na zdarzenie.

Po pierwsze zrozum najprostszą funkcję flip czyli odwracanie stanu na przeciwny.

"If Cośtam = 0 Then Cośtam = 1 Else Cośtam = 0"

To jest kluczowe. Zawsze jak to wywołasz to zmienna Cośtam zmieni stan na przeciwny. Proszę przeczytaj jeszcze raz warunek wyżej.
Jeśli zmienna ma wartośc 1 to będzie miała 0.
Jeśli zmienna ma wartość 0 to będzie miała 1.

Teraz budujesz tylko sub do guzika Mute. Jak ktoś wcisnie mute na panelu to wołasz ten sub. Jak ktoś wcisnie Mute na pilocie wołasz ten sam sub. I on zawsze zmieni stan funkcji Mute na przeciwny.
  1. Sub Mute_on_off
  2.  
  3.    If Mute_func = 0 Then
  4.     Mute_func = 1
  5.  
  6.       'MUTE ON
  7.       Register = &B00010110                                       'Speaker attenuate R + bus increment
  8.       Value = &B01111000
  9.  
  10.        I2cstart
  11.          If Err = 0 Then
  12.             I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  13.             If Err = 0 Then
  14.                I2cwbyte Register                                  'Speaker attenuate R + bus increment
  15.                I2cwbyte Value                                     'Mute R ON
  16.                I2cwbyte Value                                     'Mute L ON
  17.                I2cstop
  18.             End If
  19.          End If
  20.  
  21.    Else
  22.     Mute_func = 0
  23.  
  24.  
  25.       'MUTE OFF
  26.       Register = &B00010110                                       'Speaker attenuate R + bus increment
  27.       Value = &B00000000
  28.  
  29.       I2cstart
  30.          If Err = 0 Then
  31.             I2cwbyte Adres_tda7439                                'Wyslij na adres TDA
  32.             If Err = 0 Then
  33.                I2cwbyte Register                                  'Speaker attenuate R + bus increment
  34.                I2cwbyte Value                                     'Mute R OFF
  35.                I2cwbyte Value                                     'Mute L OFF
  36.                I2cstop
  37.             End If
  38.          End If
  39.  
  40.    End If
  41.  
  42. End Sub
Żadnego czekania na wyłączenie funkcji Mute!
Awatar użytkownika
kulamario
Posty: 207
Rejestracja: 17 sie 2015, 20:05
Lokalizacja: Greystones
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: kulamario » 14 lis 2018, 13:56

Elegancko kolego mute już lata

dodałem tylko deklaracje

dim Mute_func as bit
Mute_func =0

a teraz jeszcze jedno - jak zrobić zmianę wartości bas czy sopran i inne z pilota bo w programie mam dopisane case 16 i case 17 pod przyciski pilota od volume i tylko volume działa a basu czy balansu nie zmienisz a enkoderem zmienisz wszystko
Awatar użytkownika
niveasoft
Posty: 1215
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Przedwzmacniacz na TDA7439 prośba o dopisanie ustawień zegara i pilota

Post autor: niveasoft » 14 lis 2018, 14:44

Lepiej jest zadeklarować Byte a nie Bit "Dim Mute_func As Byte"
Nigdy nie musisz pisać początkowych Mute_finc = 0 bo Bascom ma taką procedurę zerowania wszystkich zadeklarowanych zmiennych i po Reset zawsze wszystkie w RAM mają 0 chyba że napiszesz u góry $noramclear ;)
Co do basu, wysokich i balansu to nie wiadomo czy masz pilot z osobnymi przyciskami czy pilotem chcesz wybierać funkcje jak przyciskiem enkodera...
Trzeba być precyzyjnym ;)
ODPOWIEDZ