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:

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

Post autor: kulamario » 14 lis 2018, 15:08

Pilot mam od tv philips wiec przycisków jest sporo
Ale to nie problem problem jest dla mnie w tym ze nie wiem jak ten program jest napisany ze w opcjach przesuwa mi wartości a na ekranie głównym steruje volume próbowałem już dopisać ustawienia pod inne przyciski ale nadal mi coś nie chodzi jak powinno
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 » 16 lis 2018, 0:36

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

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

Post autor: marekszy » 17 lis 2018, 17:10

16 i 17 masz przypisane tylko do volume (call volume) ,a pokombinuj z 'call x' i wtedy gdy volume to x=volume, gdy bass to x = bass itd
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 » 17 lis 2018, 17:28

Zgadza się 16 i 17 to volume i to chodzi pięknie
a case 85 i 86 ma mi ustawienia zmieniac a nie chodzi
jak to zapisać ze by działało wiesz może ?
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

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

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

Nigdy nie miałem serca do świecidełek i dlatego nie lubię oprogramowywać diod LED i efektów świetlnych..ale jak muszę to pisze :D
Sterowniki audio lubiłem kiedyś, ale tez mi przeszło :P ...ale przy sobocie po robocie włączyłem radio i myślę, że mam pomysł ;)

Zobacz czy to nie pomoże. Dopisz Button = 1 przed wywołaniem funkcji "Change_settings() " a nie "Setting_function()" czyli:
  1.  
  2. Case 85
  3.  Button = 1
  4.  Call Change_settings()      'lewo
  5. Case 86
  6.  Button = 1
  7.  Call Change_settings()       'prawo
marekszy
Posty: 99
Rejestracja: 20 lis 2016, 20:21

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

Post autor: marekszy » 17 lis 2018, 17:51

Właśnie chciałem pisać aby odnieść się do przycisku
Awatar użytkownika
niveasoft
Posty: 1213
Rejestracja: 17 sie 2015, 12:13
Kontakt:

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

Post autor: niveasoft » 17 lis 2018, 17:57

Najlepiej byłoby napisać w kodzie że :
Dim Kontroler As Byte
Const W_lewo = 1
Const W_prawo = 2
Const Select_okay = 3

Potem w programie i pilot i enkoder może ustawić, na przykład "Kontroler = W_prawo"
A na końcu pętli piszesz Kontroler = 0

To by cały program uprościło...
O tym juz pisałem jak mieć przyciski, enkoder i pilota w jednym ..i to tutaj na Forum.

...a tak to trzeba się wczytać w kod i wcale się jeszcze ten mój pomysł nie musi sprawdzić :D
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 » 18 lis 2018, 12:11

Bartek miałeś racje
call Change_settings()
Działa normalnie na dopisanych przyciskach z pilota 85 i 86
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 » 20 lis 2018, 2:37

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

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

Post autor: pimowo » 20 lis 2018, 11:05

kulamario pisze:jak zrobić zapamiętywanie ustawień - bo za każdym razem kiedy program rusza przechodzi przez Call Settings_tda7439()
a to ustawia defaultowe ustawienia TDA
Możesz wszytkie dane zapisać do eeprom.
Zobacz na forum bo gdzieś tu Bartek podawał przepis na to.

EDYTA
Zobacz TUTAJ "Obsługa wartości przechowywanych w Eeprom"
ODPOWIEDZ