(Bascom)Preamp na tda7318+atmega8535

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Awatar użytkownika
mdm150
Użytkownik
Posty: 108
Rejestracja: 25 kwie 2006, 0:14
Lokalizacja: Gajowniki
Kontakt:

(Bascom)Preamp na tda7318+atmega8535

Post autor: mdm150 » 24 lut 2012, 0:21

Mam zamiar zrobić preampa jak w temacie. Znalazłem na sieci gotowy program amplitunera na om5610+ te kostki jak w temacie.Ktoś potrafi w sensowny okroić program z obsługi modułu om5610, funkcja alarmu też jest mi zbędna.

Kod: Zaznacz cały

'--------------------------------------------------------------------------------------------------------
'   GAMP.bas - program sterownika amplitunera GAMP
'
'   kompliator: BASCOM-AVR ver.1.11.6.7
'   wersja: 2.1 FINAL!
'   autor: Bartłomiej Gross
'   mail: audiofilek@interia.pl
'   www: audiofilek.za.pl
'   NOT FOR COMMERCIAL USAGE!
'--------------------------------------------------------------------------------------------------------

 $regfile = "8535def.dat"
 $crystal = 8000000
 Config Lcd = 16 * 1a
 Config Lcdpin = Pin , Db4 = Pina.0 , Db5 = Pina.1 , Db6 = Pina.2 , Db7 = Pina.3 , E = Pina.4 , Rs = Pina.5
 Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down
 Config I2cdelay = 50
 Config Sda = Porta.7
 Config Scl = Porta.6
 Config Rc5 = Portb.7
 Config Clock = Soft , Gosub = Sectic

 Config Portb = Input                                                 ' Klawisze
 Config Pind.2 = Output                                               ' Czerwona
 Config Pind.3 = Output                                               ' Zielona
 Config Pind.6 = Output                                               ' Triac
 Config Pind.7 = Input                                                ' Kanał B impulsatora
 Config Pinc.0 = Input                                                ' Kanał A impulsatora
 Config Pinc.1 = Input                                                ' Przycisk impulsatora
 Config Pinc.2 = Input                                                ' OM5610 - STEREO
 Config Pinc.4 = Output                                               ' OM5610 - CLK
 Config Pinc.5 = Output                                               ' OM5610 - WREN

 B Alias Pinc.0                                                       ' Kanał B impulsatora
 A Alias Pind.7                                                       ' Kanał A impulsatora

 Enable Interrupts
 Stop Watchdog
 Cursor Off

 Const T4 = "   Bass: "
 Const T5 = " Treble: "
 Const T6 = " SLEEP"
 Const T7 = "  OFF"
 Const T8 = " 30 min."
 Const T9 = " 60 min."
 Const T10 = " 80 min."
 Const T14 = "    Mute"
 Const T15 = "  ON"
 Const T19 = "-14dB"
 Const T20 = "-12dB"
 Const T21 = "-10dB"
 Const T22 = " -8dB"
 Const T23 = " -6dB"
 Const T24 = " -4dB"
 Const T25 = " -2dB"
 Const T26 = " flat"
 Const T27 = " +2dB"
 Const T28 = " +4dB"
 Const T29 = " +6dB"
 Const T30 = " +8dB"
 Const T31 = "+10dB"
 Const T32 = "+12dB"
 Const T33 = "+14dB"

 Deflcdchar 1 , 14 , 21 , 21 , 23 , 17 , 17 , 14 , 32                 ' Znak zegara
 Cls                                                                  ' Wybór LCD DATA RAM

 Declare Sub Init                                                     ' Inicjalizacja
 Declare Sub Power_off                                                ' "STAND-BY"
 Declare Sub Power_on                                                 ' POWER ON
 Declare Sub Set_time                                                 ' Ustawianie czasu i alarmu
 Declare Sub Toggle_alarm                                             ' Alarm ON/OFF
 Declare Sub Change_input                                             ' Zmiana wejscia
 Declare Sub Audio_function                                           ' Funkcje audio
 Declare Sub Detect_encoder                                           ' Obsługa impulsatora
 Declare Sub Volume_up                                                ' Głośniej
 Declare Sub Volume_down                                              ' Ciszej
 Declare Sub Tune                                                     ' Ustawia stacje i
 Declare Sub Count_frequency                                          ' wyświetla na LCD
 Declare Sub Complet_reg                                              ' Kompletuje rejestr OM5610
 Declare Sub Tuner_function                                           ' Funkcje tunera
 Declare Sub Next_station                                             ' Następna stacja
 Declare Sub Prev_station                                             ' Poprzednia stacja
 Declare Sub Tuner_check                                              ' Sprawdza czy MONO lub STEREO
 Declare Sub Write_om                                                 ' Zapisuje rejestr OM5610
 Declare Sub Write_tda                                                ' Zapisuje dane do TDA7318
 Declare Sub Get_rc5                                                  ' Odbiera komendy RC5
 Declare Sub 100ms                                                    ' Opóźnienie 100ms
 Declare Sub 500ms                                                    ' Opóźnienie 500ms
 Declare Sub 5ms                                                      ' Opóźnienie 5ms
 Declare Sub Green                                                    ' Zielona LED
 Declare Sub Red                                                      ' Czerwona LED
 Declare Sub Yellow                                                   ' Żółta LED
 Declare Sub Count_bass_val                                           ' Liczy dB dla BASS
 Declare Sub Count_treble_val                                         ' Liczy dB dla TREBLE
 Declare Sub Muting_on                                                ' Wyciszenie wzmacniacza
 Declare Sub Muting_off                                               ' !Wyciszenie wzmacniacza

 Dim Sleep_f As Bit                                                   ' Sleep ON/OFF
 Dim Alarm_f As Bit                                                   ' Alarm ON/OFF
 Dim Mute_f As Bit                                                    ' Mute ON/OFF

 Dim Volume As Byte                                                   ' Wartość VOLUME
 Dim Vol_cd As Byte                                                   ' Wzmocnienie CD
 Dim Vol_tuner As Byte                                                ' Wzmocnienie TUNER
 Dim Vol_in1 As Byte                                                  ' Wzmocnienie IN 1
 Dim Vol_in2 As Byte                                                  ' Wzmocnienie IN 2
 Dim Bass As Byte                                                     ' Wartość BASS
 Dim Bass_cd As Byte                                                  ' BASS dla CD
 Dim Bass_tuner As Byte                                               ' BASS dla TUNER
 Dim Bass_in1 As Byte                                                 ' BASS dla IN 1
 Dim Bass_in2 As Byte                                                 ' BASS dla IN 2
 Dim Treble As Byte                                                   ' Wartość TREBLE
 Dim Treble_cd As Byte                                                ' TREBLE dla CD
 Dim Treble_tuner As Byte                                             ' TREBLE dla CD
 Dim Treble_in1 As Byte                                               ' TREBLE dla CD
 Dim Treble_in2 As Byte                                               ' TREBLE dla CD
 Dim Wejscie As Byte                                                  ' Numer wejścia

 Dim Bass_val As String * 5                                           ' Wartość BASS w dB [na LCD]
 Dim Treble_val As String * 5                                         ' Wartość TREBLE w dB [na LCD]

 Dim Alarm_m As Byte                                                  ' Minuty alarmu
 Dim Alarm_h As Byte                                                  ' Godziny alarmu
 Dim Alarm_h_bcd As Byte                                              ' Godziny alarmu w BCD
 Dim Alarm_m_bcd As Byte                                              ' Minuty alarmu w BCD
 Dim Alarm_nr_st As Byte                                              ' Numer stacji alarmu
 Dim Alarm_chr As String * 1                                          ' Znacznik ALARM [na LCD]
 Dim Sleep_time As Word                                               ' Wartość do zliczenia
 Dim Sleep_counter As Word                                            ' Licznik czasu

 Dim Station_number As Byte                                           ' Numer aktualnej stacji
 Dim Station(9) As Eram Word                                          ' Stacje w EEPROM
 Dim Frequency As Word                                                ' Do obliczania częstotliwości
 Dim Reg As Long                                                      ' Rejestr OM5610
 Dim F As Single
 Dim Freq As Integer
 Dim Tuner_nr_st As String * 1                                        ' Numer stacji [na LCD]
 Dim Tuner_freq As String * 5                                         ' Częstotliwość stacji [na LCD]
 Dim Tuner_stereo As String * 2                                       ' Znacznik STEREO [na LCD]
 Dim A_ As String * 2                                                 ' 1 znak dostrojenia [na LCD]
 Dim B_ As String * 2                                                 ' 2 znak dostrojenia [na LCD]

 Dim Adres As Byte                                                    ' Adres RC5
 Dim Komenda As Byte                                                  ' Komenda RC5
 Dim Idx As Byte                                                      ' Indeks bitów zmiennej OM_REG
 Dim Pwm As Byte
 Dim Pwm_temp As Byte
 Dim Audio_fun As Byte                                                ' Numer aktualnej funkcji audio
 Dim Sleep_nr As Byte                                                 ' Numer aktualnej wartości SLEEP
 Dim Eeprom As Eram Byte
 Dim St_temp As Byte
 Dim Temp_ As Byte
 Dim Temp As Byte
 Dim Temp_0 As Byte
 Dim Temp_1 As Word
 Dim Temp_2 As Byte
 Dim Temp_3 As Byte
 Dim Af As Bit
 Dim Alarm_on As Bit
 Dim Sleep_on As Bit

 Goto Init

'--------------------------------------------------------------------------------------------------------

 Sub Init:

     Portd.6 = 0
     Wejscie = 91                                                     ' IN 2
     Volume = &B00100000                                              ' -40 dB
     Vol_cd = &B00100000                                              ' -40 dB
     Vol_tuner = &B00100000                                           ' -40 dB
     Vol_in1 = &B00100000                                             ' -40 dB
     Vol_in2 = &B00100000                                             ' -40 dB
     Bass = 110                                                       ' +2 dB
     Bass_cd = 110                                                    ' +2 dB
     Bass_tuner = 110                                                 ' +2 dB
     Bass_in1 = 110                                                   ' +2 dB
     Bass_in2 = 110                                                   ' +2 dB
     Treble = 126                                                     ' +2 dB
     Treble_cd = 126                                                  ' +2 dB
     Treble_tuner = 126                                               ' +2 dB
     Treble_in2 = 126                                                 ' +2 dB
     Treble_in1 = 126                                                 ' +2 dB
     Audio_fun = 1                                                    ' VOLUME
     Station_number = 1                                               ' Stacja 1
     Alarm_h = 0
     Alarm_m = 0
     Alarm_nr_st = 1                                                  ' Alarm na 1 stację

     If Eeprom <> 150 Then                                            ' Zapis stacji od EEPROM
      For Temp = 1 To 9
       Station(temp) = 7856                                           ' 87.5 MHz na wszystkie stacje
       Eeprom = 150
      Next
     End If

     Call Tune
     Call Count_frequency
     Call Tuner_check
     Call Count_bass_val
     Call Count_treble_val
     Call Change_input
     Goto Power_off

 End Sub

'------------------------------------------------

 Sub Power_off:

     Call Muting_on                                                   ' Wyciszenie
     Call 100ms
     Call 100ms
     Sleep_f = 0
     Sleep_nr = 0
     Sleep_time = 0
     Sleep_counter = 0
     Sleep_on = 0
     Pwm1a = 0
     Call Red                                                         ' Czerwona LED
     Reset Portd.6                                                    ' Wyłączenie wzmacniacza
     Cls

     Do

       Home : Lcd "    " ; Time$ ; "  " ; Alarm_chr                   ' Wyświetlanie czasu

       Call Get_rc5
       If Komenda = 12 Then Goto Power_on
       If Komenda = 31 Then Pwm1a = 255 Else Pwm1a = 0

       Set Portb.0
       Call 5ms
       If Pinb.0 = 1 Then Power_on                                    ' POWER

       Set Portb.6
       Call 5ms
       If Pinb.6 = 1 Then Toggle_alarm                                ' TOGGLE ALARM

       Set Portb.5
       Call 5ms
       If Pinb.5 = 1 Then Set_time                                    ' SET TIME

       If Alarm_on = 1 Then                                           ' Sprawdzanie alarmu
        Alarm_on = 0
        Wejscie = 73
        Volume = 29
        Station_number = Alarm_nr_st
        Call Tune
        Call Write_tda
        Goto Power_on
       End If

     Loop

 End Sub

'------------------------------------------------

 Sub Toggle_alarm:

     Toggle Alarm_f
     If Alarm_f = 1 Then
      Alarm_chr = Chr(1)
     Else
      Alarm_chr = " "
     End If
     Call 100ms

 End Sub

'------------------------------------------------

 Sub Set_time:

     Cls
     For Temp_2 = 0 To 20
       Home
       Lcd " Time: " ; Time$

       Set Portb.3                                                    ' PLUS [+]
       Call 5ms
       If Pinb.3 = 1 Then
        Incr _hour
        Temp_2 = 0
       End If
       If _hour = 24 Then _hour = 00
       Call 100ms

       Set Portb.4                                                    ' MINUS [-]
       Call 5ms
       If Pinb.4 = 1 Then
        Incr _min
        Temp_2 = 0
       End If
       If _min = 60 Then _min = 00
       Call 100ms

       Set Portb.5                                                    ' ENTER
       Call 5ms
       If Pinb.5 = 1 Then Goto Alarm_set
     Next

     Cls
     Exit Sub

  Alarm_set:

     Call 100ms
     Call 100ms
     Cls
     Do

       Alarm_m_bcd = Makebcd(alarm_m)
       Alarm_h_bcd = Makebcd(alarm_h)

       Home
       Lcd " Alarm: " ; Bcd(alarm_h_bcd) ; ":" ; Bcd(alarm_m_bcd)

       Set Portb.3                                                    ' PLUS [+]
       Call 5ms
       If Pinb.3 = 1 Then Incr Alarm_h
       If Alarm_h = 24 Then Alarm_h = 00
       Call 100ms

       Set Portb.4                                                    ' MINUS [-]
       Call 5ms
       If Pinb.4 = 1 Then Incr Alarm_m
       If Alarm_m = 60 Then Alarm_m = 00
       Call 100ms

       Set Portb.5                                                    ' ENTER
       Call 5ms
       If Pinb.5 = 1 Then Goto Alarm_st_set

     Loop

  Alarm_st_set:

     Call 100ms
     Call 100ms
     Cls
     Do

       Home
       Lcd " Station: " ; Alarm_nr_st

       Set Portb.3                                                    ' PLUS [+]
       Call 5ms
       If Pinb.3 = 1 Then Incr Alarm_nr_st
       If Alarm_nr_st = 10 Then Alarm_nr_st = 1
       Call 100ms

       Set Portb.5                                                    ' ENTER
       Call 5ms
       If Pinb.5 = 1 Then Exit Do

     Loop
     Cls

 End Sub

'------------------------------------------------

 Sub Power_on:

     Call 100ms
     Call 100ms
     Set Portd.6                                                      ' Włączenie wzmacniacza
     Call Green                                                       ' Zielona LED
     Pwm1a = Pwm_temp
     If Volume < &B00010000 Then                                      ' Redukcja wzmocnienia
      Volume = 24
      Call Write_tda
     End If
     Call Muting_off
     Cls

     Do

       Call Detect_encoder

       Home                                                           ' Wyświetlanie tekstów
       Select Case Wejscie
        Case 88 : Lcd "------ CD ------"
        Case 73 : Lcd " " ; A_ ; Station_number ; B_ ; " " ; Tuner_freq ; "MHz " ; Tuner_stereo
        Case 90 : Lcd "----- IN 1 -----"
        Case 91 : Lcd "----- IN 2 -----"
       End Select

       Call Detect_encoder                                            ' Obsługa impulsatora

       If Wejscie = 73 Then
          Set Portb.3
          Call 5ms
          If Pinb.3 = 1 Then Next_station                             ' Przycisk PLUS [+]

          Set Portb.4
          Call 5ms
          If Pinb.4 = 1 Then Prev_station                             ' Przycisk MINUS [-]

          Call Detect_encoder

          Set Portb.5
          Call 5ms
          If Pinb.5 = 1 Then Tuner_function                           ' Przycisk ENTER / SET TIME
          Call Tuner_check
       End If

       Call Detect_encoder

       Set Portb.0
       Call 5ms
       If Pinb.0 = 1 Then Goto Power_off                              ' Przycisk POWER

       Set Portb.1
       Call 5ms
       If Pinb.1 = 1 Then Audio_function                              ' Przycisk KOREKTOR

       Call Detect_encoder

       Set Portb.2
       Call 5ms
       If Pinb.2 = 1 Then Change_input                                ' Przycisk WEJSCIE

       Call Detect_encoder                                            ' Obsługa impulsatora

       Call Get_rc5
       Select Case Komenda
        Case 12 : Goto Power_off                                      ' POWER OFF
        Case 30 : Call Change_input                                   ' Wybór wejscia
        Case 16 : Call Volume_up                                      ' Głośniej
        Case 17 : Call Volume_down                                    ' Ciszej
        Case 13 : Toggle Mute_f                                       ' MUTE ON/OFF
                  If Mute_f = 1 Then
                   Call Muting_on
                   Cls : Lcd T14 ; T15
                   Call 500ms
                  Else
                    If Volume < &B00010000 Then                       ' Redukcja wzmocnienia
                     Volume = 24
                     Call Write_tda
                    End If
                   Call Muting_off
                   Cls : Lcd T14 ; T7
                   Call 500ms
                  End If
        Case 63 : Incr Sleep_nr                                       ' Ustawia czas SLEEP
                 If Sleep_nr = 6 Then Sleep_nr = 0
                 Select Case Sleep_nr
                  Case 0 : Sleep_f = 0                                'Sleep OFF
                           Call Green
                           Cls : Lcd T6 ; T7
                           Call 500ms
                  Case 1 : Sleep_f = 1                                'Sleep 30 min.
                           Call Yellow
                           Sleep_time = 1800                          ' w sekundach
                           Cls : Lcd T6 ; T8
                           Call 500ms
                  Case 2 : Sleep_f = 1                                'Sleep 60 min.
                           Call Yellow
                           Sleep_time = 3600                          ' w sekundach
                           Cls : Lcd T6 ; T9
                           Call 500ms
                  Case 3 : Sleep_f = 1                                'Sleep 80 min.
                           Call Yellow
                           Sleep_time = 4800                          ' w sekundach
                           Cls : Lcd T6 ; T10
                           Call 500ms
                 End Select
        Case 33 : If Wejscie = 73 Then Call Prev_station              ' Następna stacja
        Case 32 : If Wejscie = 73 Then Call Next_station              ' Poprzednia stacja
        Case 31 : Incr Pwm                                            ' Podświetlanie ON/OFF
                  If Pwm = 4 Then Pwm = 0
                  Select Case Pwm
                   Case 0 : Pwm1a = 0
                            Call 100ms
                            Pwm_temp = 0
                   Case 1 : Pwm1a = 80
                            Pwm_temp = 80
                            Call 100ms
                   Case 2 : Pwm1a = 150
                            Pwm_temp = 150
                            Call 100ms
                   Case 3 : Pwm1a = 255
                            Pwm_temp = 255
                            Call 100ms
                  End Select
       End Select

       Call Detect_encoder                                            ' Obsługa impulsatora

       If Sleep_on = 1 Then Goto Power_off

     Loop

 End Sub

'------------------------------------------------

 Sub Change_input:                                                    ' Zmiana wejścia

     Call Muting_on

     Select Case Wejscie
      Case 88 : Wejscie = 73
      Case 73 : Wejscie = 90
      Case 90 : Incr Wejscie
      Case 91 : Wejscie = 88
     End Select

     Select Case Wejscie                                              ' Zapisanie wartości
       Case 88 : Volume = Vol_cd
                 Bass = Bass_cd
                 Treble = Treble_cd
       Case 73 : Volume = Vol_tuner
                 Bass = Bass_tuner
                 Treble = Treble_tuner
       Case 90 : Volume = Vol_in1
                 Bass = Bass_in1
                 Treble = Treble_in1
       Case 91 : Volume = Vol_in2
                 Bass = Bass_in2
                 Treble = Treble_in2
     End Select

     Call Write_tda
     Call Count_bass_val
     Call Count_treble_val
     Call Muting_off
     Call 100ms
     Cls

 End Sub

'------------------------------------------------

 Sub Audio_function:                                                  ' Funkcje audio

     Incr Audio_fun
     If Audio_fun = 4 Then Audio_fun = 2
     Cls

     If Audio_fun = 2 Then                                            ' BASS
      For Temp = 0 To 200
       Home : Lcd T4 ; Bass_val
       Call Detect_encoder
       Debounce Pinb.1 , 1 , Audio_function , Sub
      Next
     End If

     If Audio_fun = 3 Then                                            ' TREBLE
      For Temp = 0 To 200
       Home : Lcd T5 ; Treble_val
       Call Detect_encoder
       Debounce Pinb.1 , 1 , Audio_function , Sub
      Next
     End If

   Audio_fun = 1                                                      ' Na koniec aktywne VOLUME
   Cls

 End Sub

'------------------------------------------------

 Sub Volume_up:                                                       ' Głośniej

     Decr Volume
     If Volume > 63 Then Volume = 0
     Call Write_tda
     Select Case Wejscie                                              ' Zapisanie wartości
      Case 88 : Vol_cd = Volume
      Case 73 : Vol_tuner = Volume
      Case 90 : Vol_in1 = Volume
      Case 91 : Vol_in2 = Volume
     End Select

 End Sub

'------------------------------------------------

 Sub Volume_down:                                                     ' Ciszej

     Incr Volume
     If Volume > 63 Then Volume = 63
     Call Write_tda
     Select Case Wejscie                                              ' Zapisanie wartości
      Case 88 : Vol_cd = Volume
      Case 73 : Vol_tuner = Volume
      Case 90 : Vol_in1 = Volume
      Case 91 : Vol_in2 = Volume
     End Select

 End Sub

'------------------------------------------------

 Sub Write_tda:                                                       ' Zapis do TDA7318

     I2cstart
     I2cwbyte &B10001000
     I2cwbyte Volume
     I2cwbyte Bass
     I2cwbyte Treble
     I2cwbyte Wejscie
     I2cstop

 End Sub

'------------------------------------------------

 Sub Muting_on:

     I2cstart
     I2cwbyte &B10001000
     I2cwbyte 159
     I2cwbyte 191
     I2cstop

 End Sub

'------------------------------------------------

 Sub Muting_off:

     I2cstart
     I2cwbyte &B10001000
     I2cwbyte 128
     I2cwbyte 160
     I2cstop

 End Sub

'------------------------------------------------

 Sub Tune:                                                            ' Dostraja tuner do wybranej stacji

     Frequency = Station(station_number)
     Call Complet_reg
     Call Write_om
     Call Count_frequency

 End Sub

'------------------------------------------------

 Sub Count_frequency:                                                 ' Oblicza częstotliwość tunera

     F = Frequency
     F = F - 856
     F = F * 125
     F = F / 1000
     Freq = F

     Tuner_freq = Str(freq)

     If Freq > 999 Then Tuner_freq = Format(tuner_freq , "000.0")
     If Freq < 1000 Then Tuner_freq = Format(tuner_freq , " 00.0")

 End Sub

'------------------------------------------------

 Sub Tuner_check:                                                     ' Sprawdza dostrojenie tunera

     Reset Portc.5
     Set Portc.4
     If Pinc.2 = 0 Then
      A_ = ">" : B_ = "<"
     Else
      A_ = "<" : B_ = ">"
     End If

     Reset Portc.5
     Reset Portc.4
     If Pinc.2 = 0 Then
      Tuner_stereo = "St"
     Else
      Tuner_stereo = "Mo"
     End If

 End Sub

'------------------------------------------------

 Sub Complet_reg:

     Reg = Frequency

 End Sub

'------------------------------------------------

 Sub Write_om:                                                        ' Zapis do OM5610

     Config Pinc.3 = Output
     Set Portc.5
     For Idx = 24 To 0 Step -1
      Portc.3 = Reg.idx
      Set Portc.4 : Waitus 10 : Reset Portc.4
      Waitus 20
     Next
     Reset Portc.5

 End Sub

'---------------------------------------------

 Sub Next_station:                                                    ' Następna stacja

     Incr Station_number
     If Station_number = 10 Then Station_number = 1
     Call Tune
     Call 100ms

 End Sub

'------------------------------------------------

 Sub Prev_station:                                                    ' Poprzednia stacja

     Decr Station_number
     If Station_number = 0 Then Station_number = 9
     Call Tune
     Call 100ms

 End Sub

'---------------------------------------------------

 Sub Tuner_function:                                                  ' Strojenie stacji

     Cls
     Lcd "  Tuning: +/-"
     Call 500ms

 Preset:

     For Temp_3 = 222 To 0 Step -1
      Call Count_frequency
      Call Tuner_check
      Home : Lcd " " ; A_ ; Station_number ; B_ ; " " ; Tuner_freq ; "MHz " ; Tuner_stereo
      Set Portb.3
      If Pinb.3 = 1 Then Goto Up
      Set Portb.4
      If Pinb.4 = 1 Then Goto Down
      Set Portb.5
      If Pinb.5 = 1 Then Goto Save_station
     Next

     Goto Ends_1

 Down:                                                                ' Strojenie w dół
      Frequency = Frequency - 1
      If Frequency = 7855 Then Frequency = 9497
      Call Complet_reg
      Call Write_om
      Temp_3 = 0
      Waitms 50
      Goto Preset

 Up:                                                                  ' Strojenie w górę
     Frequency = Frequency + 1
     If Frequency = 9497 Then Frequency = 7856
     Call Complet_reg
     Call Write_om
     Temp_3 = 0
     Waitms 50
     Goto Preset

 Save_station:                                                        ' Zapisywanie stacji

     St_temp = 1
     Call 100ms
     Call 100ms
     Cls

     Do

      Home : Lcd "  Save as: " ; St_temp

      Set Portb.3                                                     '
      Call 5ms
      If Pinb.3 = 1 Then Incr St_temp
      If St_temp = 10 Then St_temp = 1
      Call 100ms
      Call 100ms

      Set Portb.4
      Call 5ms
      If Pinb.4 = 1 Then Decr St_temp
      If St_temp = 0 Then St_temp = 9
      Call 100ms
      Call 100ms

      Set Portb.5
      Call 5ms
      If Pinb.5 = 1 Then Goto Ends

     Loop

 Ends:

      Station(st_temp) = Frequency
      Station_number = St_temp
      Call Tune
      Call Count_frequency
      Exit Sub

 Ends_1:

      Call Tune
      Call Count_frequency

 End Sub

'---------------------------------------------------

 Sub Detect_encoder:                                                  ' Obsługa impulsatora

     For Temp_1 = 700 To 0 Step -1

         Set A : Set B
         If A = 1 And B = 1 Then Af = 1                               'impulsator w pozycji - zwarte
         If A = 0 And B = 0 Then Af = 0                               'impulsator w pozycji - rozwarte

         If A = 0 And B = 1 Then                                      'rozpoczety ruch impulsatora
          If Af = 1 Then                                              'jezeli byl zwarty to
           Do
            If B = 0 Then Exit Do                                     'poczekaj az B = 0
           Loop
           Goto Prawo                                                 'rozpoznany ruch w prawo
          Else                                                        'jezeli byl rozwarty to
           Do
            If A = 1 Then Exit Do                                     'poczekaj az A = 1
           Loop
           Goto Lewo                                                  'rozpoznany ruch w lewo
          End If
         End If

         If A = 1 And B = 0 Then                                      'rozpoczety ruch impulsatora
          If Af = 1 Then                                              'jezeli byl zwarty to
           Do
            If A = 0 Then Exit Do                                     'poczekaj az A = 0
           Loop
           Goto Lewo                                                  'rozpoznany ruch w lewo
          Else                                                        'jezeli byl rozwarty to
           Do
            If B = 1 Then Exit Do                                     'poczekaj az B = 1
           Loop
           Goto Prawo                                                 'rozpoznany ruch w prawo
          End If
         End If

     Next
     Exit Sub

 Prawo:                                                               ' W górę!

        Temp = 0

        Select Case Audio_fun
         Case 1 : Call Volume_up                                      ' Wzmocnienie
                  Call Volume_up
         Case 2 : Select Case Bass
                   Case Is < 103 : Incr Bass
                                   If Bass = 103 Then Bass = 111
                   Case Is > 103 : Decr Bass
                                   If Bass = 103 Then Bass = 104
                  End Select
                  Select Case Wejscie                                 ' Zapisanie wartości
                   Case 88 : Bass_cd = Bass
                   Case 73 : Bass_tuner = Bass
                   Case 90 : Bass_in1 = Bass
                   Case 91 : Bass_in2 = Bass
                  End Select
                  Call Count_bass_val
          Case 3 : Select Case Treble
                    Case Is < 119 : Incr Treble
                                    If Treble = 119 Then Treble = 127
                    Case Is > 119 : Decr Treble
                                    If Treble = 119 Then Treble = 120
                   End Select
                   Select Case Wejscie                                ' Zapisanie wartości
                    Case 88 : Treble_cd = Treble
                    Case 73 : Treble_tuner = Treble
                    Case 90 : Treble_in1 = Treble
                    Case 91 : Treble_in2 = Treble
                   End Select
                   Call Count_treble_val
        End Select
        Call Write_tda
        Exit Sub                                                      ' Zapis do TDA7318

 Lewo:                                                                ' W dół!

       Temp = 0

        Select Case Audio_fun
         Case 1 : Call Volume_down                                    ' Wzmocnienie
                  Call Volume_down
         Case 2 : If Bass > 103 Then Incr Bass
                  If Bass < 103 Then Decr Bass
                  If Bass = 112 Then Bass = 102
                  If Bass = 95 Then Bass = 96
                  Select Case Wejscie                                 ' Zapisanie wartości
                   Case 88 : Bass_cd = Bass
                   Case 73 : Bass_tuner = Bass
                   Case 90 : Bass_in1 = Bass
                   Case 91 : Bass_in2 = Bass
                  End Select
                  Call Count_bass_val
         Case 3 : If Treble > 119 Then Incr Treble
                  If Treble < 119 Then Decr Treble
                  If Treble = 128 Then Treble = 118
                  If Treble = 111 Then Treble = 112
                  Select Case Wejscie                                 ' Zapisanie wartości
                   Case 88 : Treble_cd = Treble
                   Case 73 : Treble_tuner = Treble
                   Case 90 : Treble_in1 = Treble
                   Case 91 : Treble_in2 = Treble
                  End Select
                  Call Count_treble_val
        End Select
        Call Write_tda

 End Sub

'---------------------------------------------------

  Sub Count_bass_val:

      Select Case Bass
       Case 96 : Bass_val = T19                                       ' -14
       Case 97 : Bass_val = T20
       Case 98 : Bass_val = T21
       Case 99 : Bass_val = T22
       Case 100 : Bass_val = T23
       Case 101 : Bass_val = T24
       Case 102 : Bass_val = T25
       Case 111 : Bass_val = T26                                      ' flat
       Case 110 : Bass_val = T27
       Case 109 : Bass_val = T28
       Case 108 : Bass_val = T29
       Case 107 : Bass_val = T30
       Case 106 : Bass_val = T31
       Case 105 : Bass_val = T32
       Case 104 : Bass_val = T33                                      ' +14
      End Select

 End Sub

'---------------------------------------------------

 Sub Count_treble_val:

     Select Case Treble
      Case 112 : Treble_val = T19                                     ' -14
      Case 113 : Treble_val = T20
      Case 114 : Treble_val = T21
      Case 115 : Treble_val = T22
      Case 116 : Treble_val = T23
      Case 117 : Treble_val = T24
      Case 118 : Treble_val = T25
      Case 127 : Treble_val = T26                                     ' flat
      Case 126 : Treble_val = T27
      Case 125 : Treble_val = T28
      Case 124 : Treble_val = T29
      Case 123 : Treble_val = T30
      Case 122 : Treble_val = T31
      Case 121 : Treble_val = T32
      Case 120 : Treble_val = T33                                     ' +14
     End Select

 End Sub

'---------------------------------------------------

 Sub 100ms:

     Waitms 100

 End Sub

'---------------------------------------------------

 Sub 500ms:

     Waitms 500

 End Sub

'---------------------------------------------------

 Sub 5ms:

     Waitms 5

 End Sub

'---------------------------------------------------

 Sub Green:                                                           ' LED na zielono

     Set Portd.3 : Reset Portd.2

 End Sub

'---------------------------------------------------

 Sub Red:                                                             ' LED na czerwono

     Set Portd.2 : Reset Portd.3

 End Sub

'---------------------------------------------------

 Sub Yellow:                                                          ' LED na żółto

     Set Portd.2 : Set Portd.3

 End Sub

'---------------------------------------------------

 Sub Get_rc5:                                                         ' Odbiera kod z pilota

     Getrc5(adres , Komenda)                                          ' Odbiór RC5
     Komenda = Komenda And &B10111111

 End Sub

'---------------------------------------------------

 Sectic:

        If Alarm_f = 1 Then                                           ' Sprawdzanie alarmu
         If Alarm_h = _hour And Alarm_m = _min Then Alarm_on = 1 Else Alarm_on = 0
        End If

        If Sleep_f = 1 Then                                           ' Sprawdzanie czasu SLEEP
         Incr Sleep_counter
         If Sleep_counter = Sleep_time Then Sleep_on = 1
        End If

 Return

'--------------------------------------------------- 
Z góry dzięki za pomoc.
[/code]

Awatar użytkownika
Pikczu
Użytkownik
Posty: 754
Rejestracja: 18 lip 2005, 18:33
Lokalizacja: Dublin
Kontakt:

Post autor: Pikczu » 25 lut 2012, 13:27

A samemu to nic ???
Za przeproszeniem masz jakieś skrzywione wyobrażenie o otaczającym świecie.
Podajesz kod na forum który ma kilkadziesiąt linii i myślisz że ktoś go przeanalizuje bez schematu urządzenia. Specjalnie dla Ciebie bo ty masz kaprys?
Sorry ale jak nie umiesz napisać programu do twojego projektu to się za niego nie bierz.
Całkowicie inną odpowiedz byś uzyskał gdy kod byłby choć w części napisany przez Ciebie.

Po siedź kilka godzin w symulatorze i przeanalizuj kod, po zmieniaj co potrzeba i wróć.
Z własnym wkładem pracy.

ODPOWIEDZ