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

[mega8][bascom] Przedwzmacniacz na I2C, nie robi nic...

Ture11 19 Lis 2011 22:09 1807 4
REKLAMA
  • #1 10158391
    Ture11
    Poziom 39  
    Witam.
    Dopiero wczoraj ruszyłem w kierunku obsługi I2C, poszło nieźle, ale problem pojawił się, gdy zacząłem próby komunikacji z TDA7440D. I tu klapa, zmienna err ciągle jest równa zero, komunikacja niby jest,ale sygnał nie przechodzi przez przewzmacniacz mimo "podania" przez i2c instrukcji do sterowania "vol" i "speaker attenuate". Zmieniam tylko te dwa parametry, bo one są standardowo ustawione na MUTE. Dodam tylko, że pod wejście włączane standardowo, tj. IN2 podpiąłem sygnał z komputera, do wyjścia wzmacniacz. Dodatkowo, gdy TDA jest odłączony od zasilania, to wzmacniacz buczy, natomiast przy podpinaniu zasilania na ułamek sekundy pojawia się dźwięk i wzmak przestaje buczeć. To sugeruje, że audio jest podpięte dobrze.

    Mój problem głównie polega na tym, że w datasheecie scalaka jest o szynie zwiększającej i nie zwiększającej (incremental bus / no incr. bus) i o parametrze ACK. Nie do końca wiem, co z nimi począć, a to, co napisałem w oparciu o datasheet, powinno działać, a nie działa. Scalak powinien działać, bo był ze sprawnego sprzętu.

    Docelowo napisałem coś takiego, gdzie:

    H88 - adres tda7440 wg. DS
    h2 - subadrs "Volume
    h6 - subadres "Speaker Att. "R"
    &b00000000 - w obu przypadkch 0 dB
    
    Do
    I2cstart
    I2cwbyte &H88
    I2cwbyte &H2
    I2cwbyte &B00000000 , Ack
    I2cstop
    Waitms 50
    I2cstart
    I2cwbyte &H88
    I2cwbyte &H6
    I2cwbyte &B00000000 , Ack
    I2cstop
    
    Waitms 50
    
    end
    
    Loop


    tylko raz wysyłam dane do tda, poza tym w formie "no incremental bus", więc wg. DS nie muszę wysyłać wszystkich parametrów, tylko wybrane. Coś jednak mi nie pasuje z tym ACK, nie wiem, czy to wpisywać w programie czy co z tym zrobić...

    Jeszcze mam jedno pytanie...
    Czy &bxxxxxxx10 = &b10? W Datasheecie mam pola zapełnione X-ami (z dopiskiem DON'T CARE", więc nie wiem, jak to zapisać...)

    Pozdrawiam/
  • REKLAMA
  • REKLAMA
  • #3 10161625
    Ture11
    Poziom 39  
    Dziękuje... Co prawda usunięcie parametru ACK w i2cwbyte nic mi nie zmieniło, ale dochodzę do wniosku, że wszystko jest wpisane popranie, a układ nadal nie działa... No nic, będę próbował coś robić dalej, na razie próbowałem go uruchomić w jego aplikacji (na płytce wieży Daewoo), może to jest przyczyna braku działania? Jeżeli zmienna Err = 0 to znaczy to, że układ jest poprawnie zaadresowany i odpowiada Masterowi sygnałem potwierdzenia? Czy jeśli wydałbym komendę nieznaną scalakowi, odpowiedział by zmienną err = 1, czy 0?
  • REKLAMA
  • Pomocny post
    #4 10163037
    Mundi1970
    Poziom 24  
    Jak masz pełną wersje Bascoma, to w katalogu Lib są źródła bibliotek w asemblerze. Tak po szybkim przeglądnięciu przypuszczam że zmienna Err jest ustawiany przy braku potwierdzania i zbyt długim czasie oczekiwania. W Bascomie są dwie biblioteki obsługujące I2C, domyślna biblioteka jest softwarowa i nie wykorzystuje interfejsu TWI. Jeżeli chce się wykorzystać bibliotekę która korzysta z TWI, w programie należy dopisać $LIB "I2C_TWI.LBX". Linie konfigurujemy poleceniem CONFIG SCL i CONFIG SDA. http://avrhelp.mcselec.com/index.html?i2c_twi.htm
  • #5 13739340
    Ture11
    Poziom 39  
    Muszę zamknąć temat. Co do powodu niedziałania - nie wiem, jakaś literówka chyba, bo po następnych próbach, chyba z rok później, wszystko zaczęło działać, pewnie z innym kodem, nie pamiętam.
REKLAMA