logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Bascom Atmega8 i2c TDA7420

Łukasz leper 02 Gru 2008 07:30 2493 16
REKLAMA
  • #1 5807594
    Łukasz leper
    Poziom 12  
    Witam połączyłem atmege8 z tda7420 i nie wiem jak nim sterować. Czy mógł by ktoś napisać kawałek kodu żeby sterować tym tda . Tu jest nota Link. Wiem że adres tda to &B10001001 ale nie wiem co wpisać sub address bo jest tam X X T I a3 a2 a1 a0 pomóżcie please :roll: aha i jeszcze niewiem co wpisać zamiast x jak nie ma ani zer ani jedynek np.
    Volume &Bxxxx0001
  • REKLAMA
  • #2 5807669
    karlos79
    Poziom 33  
    Witam
    Najpierw wysyłasz adres układu :

    Następnie wysyłasz subadres.
    Tam gdzie masz X - to po prostu są nie znaczące bity, możesz wysłać co kolwiek.
    Jeśli I ustawisz "1", to uruchomisz autoinkrementację subadresu. Dokładniej bity A3 do A0.
    Jeśli wyślesz taką ramkę:

    to będziesz regulować głośność.
    Nie wiem czy dobrze Ci wyjaśniłem, ale ja bym tak kombinował z tym układem.
    Pozdrawiam
  • #3 5807690
    Łukasz leper
    Poziom 12  
    Ok dzięki a jak jest puste pole?
  • REKLAMA
  • #4 5807698
    karlos79
    Poziom 33  
    Witam
    To nie jest puste pole w pierwszym wierszu tabeli masz napisane XXXID3D2D1D0 :)
    Zostawiasz pierwszy półbajt bez zmian- zmieniasz tylko młodsze pół bajtu.
    Pozdrawiam
  • REKLAMA
  • #5 5807706
    Łukasz leper
    Poziom 12  
    Co jest źle w tym kodzie?
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Scl = Portc.5
    Config Sda = Portc.4
    
    
    Do
    ' BASS
    I2cstart
    I2cwbyte &B10001001 Ack
    I2cwbyte &B00000011 Ack
    I2cwbyte &B00100111 Nack
    I2cstop
    
    Waitms 50
    ' TREB
    I2cstart
    I2cwbyte &B10001001 Ack
    I2cwbyte &B00000010 Nack
    I2cwbyte &B00010010 Ack
    I2cstop
    
    Waitms 50
    ' VOLUME
    I2cstart
    I2cwbyte &B10001001 Ack
    I2cwbyte &B00000001 Ack
    I2cwbyte &B10000001 Nack
    I2cstop
    
    Waitms 50
    'MUX
    I2cstart
    I2cwbyte &B10001001 Ack
    I2cwbyte &B10000000 Ack
    I2cwbyte &B00010111 Nack
    I2cstop
    Waitms 50
    
    
    
    loop
    End
  • #6 5807720
    karlos79
    Poziom 33  
    Witam
    To już będzie trzeci ciąg bitów który wysyłasz do układu.
    Najpierw adres, potem subadres, no i dane.
    Na stronie 15 noty masz tabelę "VOLUME"
    W/g tego co tam napisali masz:
    
     &B00000000' poziom 0Db
     &B00000001' poziom 1 Db
    

    Daj znać czy to działa.
    Ta nota nie jest tak doskonała jak noty Philipsa i ciężko doszukać się w niej informacji.
    W powyższym kodzie po wysłaniu każdego bajtu musisz odbierać potwierdzenie ACK
    Pozdrawiam
  • #7 5807734
    Łukasz leper
    Poziom 12  
    Próbuje na wszystkie sposoby i dźwięk się nie zmienia cały czas tak samo trzeszczy
  • #8 5807736
    karlos79
    Poziom 33  
    Witam
    Że tak się zapytam jeszcze dla ścisłości.
    Rezystory podciągające na liniach SCL i SDA są??
    Pozdrawiam
  • #9 5807743
    Łukasz leper
    Poziom 12  
    Tak są i2c działa sprawdziłem tym
    'Przeszukiwanie magistrali I2C w poszukiwaniu adresów urządzeń.
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    
    Dim Adres As Byte                                           'zmienna adres
    
    Config Scl = Portc.5
    Config Sda = Portc.4
    Cursor Off
    
    Cls
    For Adres = 0 To 255
    I2cstart                                                    'start magistrali
    I2cwbyte Adres                                              'wysyła 1 bajt, (zapytanie o odpowiedź)
    I2cstop                                                     'koniec transmisji
    
    If Err = 0 Then                                             'jeśli odpowiedziało to
    Cls
    Lcd "Uklad pod:" ; Adres ; "  "
    Wait 2
    End If
    
    Next Adres
    
    Cls
    Lcd "Koniec szukania"
    End

    i wyświetliło adresy 136 i 137
  • #10 5807757
    karlos79
    Poziom 33  
    Witam
    No to już jakiś punkt zaczepienia jest :)
    Proponuję dokładniej wczytać się w notę katalogową układu.
    Może też w sieci coś jest n/t temat.
    Podeślij mi cały kod, wieczorem postaram się coś wykombinować.
    Pozdrawiam
  • REKLAMA
  • #11 5807762
    Łukasz leper
    Poziom 12  
    Tylko że nie ma kodu na razie próbuję uruchomić tą kostkę a później dopiero będę myślał o pisaniu kodu. Dopisałem do kodu żeby pokazywał err
    i nie pokazuje błędu jak wpisze &B10001000 jako adres
  • Pomocny post
    #12 5808016
    karlos79
    Poziom 33  
    Witam
    Sprawdź to:
    
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Scl = Portc.5
    Config Sda = Portc.4 
    
    dim adresw as byte ' adres do zapisu
    dim adresr as pyte ' adres do odczytu
    
     
    adresw = &B10001001
    adresr = &B10001000
    
    do 
    
    '
    I2cstart 
    I2cwbyte adresw ack
    I2cwbyte &B00000001 ack' Volume bez autoinkrementacji subadresu
    I2cwbyte &B00000101 ack' 5Db
    I2cstop
    wait 10' czekaj 10 sekund
    I2Cstart
    I2cwbyte adresw ack
    I2cwbyte &B00000001 ack' Volume bez autoinkrementacji subadresu
    I2cwbyte &B00000000 ack' 0Db
    I2cstop
    wait 10' czekaj 10 sekund
    

    Pozdrawiam
  • #13 5808056
    Łukasz leper
    Poziom 12  
    Dzięki karlos79 za pomoc bez ciebie bym tego nie uruchomił :D tylko strasznie słaby sygnał około 0.30v wiecie może jak go wzmocnić?
  • #14 5808667
    karlos79
    Poziom 33  
    Witam
    Rozumiem, że mój kod zadziałał tak?
    Musisz jeszcze ustawić inne funkcje tego scalaka.
    Pokombinuj z opcją Preamplifier attenuation.
    Znaczenie słowa attenuation masz tutaj
    http://pl.wiktionary.org/wiki/attenuation
    Na 14 stronie noty masz tabelkę "input selektor" tam też może coś być.
    Na którą nogę wprowadzasz sygnał, on ma kilka wejść.
    Zobacz na schemat blokowy scalaka.
    Pozdrawiam
  • #15 5809305
    Łukasz leper
    Poziom 12  
    Napisałem taki kod
    $regfile = "m8def.dat"
    $crystal = 8000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portd.4 , E = Portd.3 , Rs = Portd.2
    
    Config Scl = Portc.5
    Config Sda = Portc.4
    
    
    'Mux
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000000
    I2cwbyte 0
    I2cstop
    
    Waitms 50
    
    
    'Volume
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000001
    I2cwbyte 0
    I2cstop
    
    Waitms 50
    
    
    'Treble
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000010
    I2cwbyte 18
    I2cstop
    
    Waitms 50
    
    
    'Bass
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000011
    I2cwbyte 10
    I2cstop
    
    Waitms 50
    
    
    'Speaker Attenuator LF
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000100
    I2cwbyte 3
    I2cstop
    '
    Waitms 50
    
    
    'Speaker Attenuator RF
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000101
    I2cwbyte 0
    I2cstop
    
    Waitms 50
    
    
    'Speaker Attenuator LR
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000110
    I2cwbyte 3
    I2cstop
    
    Waitms 50
    
    
    'Speaker Attenuator RR
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00000111
    I2cwbyte 0
    I2cstop
    
    Waitms 50
    
    
    'Mute & Beep
    'I2cstart
    'I2cwbyte 136
    'I2cwbyte &B00001000
    'I2cwbyte 0
    'I2cstop
    
    'Waitms 50
    
    
    'Stereodecoder
    'I2cstart
    'I2cwbyte 136
    'I2cwbyte &B00001001
    'I2cwbyte 0
    'I2cstop
    
    'Waitms 50
    
    
    'Noise Blanker 1
    'I2cstart
    'I2cwbyte 136
    'I2cwbyte &B00001010
    'I2cwbyte 0
    'I2cstop
    
    'Waitms 50
    
    
    'Noise Blanker 2
    'I2cstart
    'I2cwbyte 136
    'I2cwbyte &B00001011
    'I2cwbyte
    'I2cstop
    
    'Waitms 50
    
    
    'AMS
    'I2cstart
    'I2cwbyte 136
    'I2cwbyte &B00001100
    'I2cwbyte
    'I2cstop
    
    'Waitms 50
    
    
    'Dolby Level Control
    'I2cstart
    'I2cwbyte 136
    'I2cwbyte &B00001101
    'I2cwbyte
    'I2cstop
    
    'Waitms 50
    
    
    'Metal Resistance Control
    'I2cstart
    'I2cwbyte 136
    'I2cwbyte &B00001110
    'I2cwbyte
    'I2cstop
    
    'Waitms 50
    
    
    'Preamplifier Attenuation
    I2cstart
    I2cwbyte 136
    I2cwbyte &B00001111
    I2cwbyte 3
    I2cstop
    
    Waitms 50
    
    
    Cursor Off
    Cls
    Lcd Err
    
    
    

    Dźwięk z pc wchodzi na nogi tda 54.CD_L- 53.CD_R- a wychodzi nogami 36.OUT_FL 34.OUT_FR i idzie do głośników od pc które grają jak by nie miały wzmacniacza w środku. Przez jakie kondensatory(pojemność) powinno się wpuszczać dźwięk do tda ?
  • #16 5810581
    karlos79
    Poziom 33  
    Witam
    Przed ustawieniem czegokolwiek ustaw jeszcze input selektor.
    Zrób to tak:
    
    I2cstart
    I2cwbyte 136 
    I2cwbyte &B00000000' MUX czyli selektor wejściowy lub 'multiplekser(patrz schemat blokowy układu)
    I2Cwbyte &B00000000' poziom wzmocnienia
    I2CWbyte &B00000000' Full dif CD, pokombinuj tutaj.
    'Dane masz w tabeli na str.14.
    I2cstop
    

    Gdzie kupiłeś ten scalak i ile kosztował, zaczyna mnie interesować ta zabaweczka :)
    Pozdrawiam
  • #17 5811602
    Łukasz leper
    Poziom 12  
    Ten układ mam na płycie od radia samochodowego kenwood w którym spalona była końcówka a ja wpiołem się do niego i połączyłem z atmegą.
    W wejściami kombinuje, ale zauważyłem że jak podłącze do nogi 62.cref to normalnie słychać sygnał tylko że nie da się regulować i jest mono :| na wyjściu wpinam się za kondensatory które szły na końcówkę. Układ chyba jest uszkodzony bo ma na wejściu 4,2V bez podłączonego dźwięku chyba że tak ma być ?
REKLAMA