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

TDA8425: Błąd sterowania w Bascomie, jak poprawnie użyć ack/nack?

tom1eczek 07 Gru 2006 11:31 3899 10
REKLAMA
  • #1 3304256
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    Napisałem wczoraj, ale program nie działa, mnie ma poleceń ack i nack bo kompilator Bascoma twierdzi, że jest w nich błąd, gdyby ktoś z was mógł je dopisać tam, gdzie są potrzebne.
    Jak napisałem tak:
    i2cwbyte 00000000 , ack
    to w tej linijce był błąd
    i2cwbyte vol , ack tu tez był błąd
    a jeśli chodzi o spacje przed i po przecinku to Bascom dostawia je sam.

    Parametr głośności do wysłania podany jest liczbą dziesiętną, a nie dwójkową (tak pokazano w katalogu). Nie wiem czy o przeszkadza czy nie.
    Wysyłam również notę katalogowa TDA8425.
    jak zamieniać liczby z dziesiętnych na dwójkowe?

    Config Lcd = 24 * 2
    Config Lcdpin = Pin , Db4 = P1.4 , Db5 = P1.5 , Db6 = P1.6 , Db7 = P1.7 , E = P1.3 , Rs = P1.2
    Cursor Off
    Config Scl = 3.0 'stawienia I2C
    Config Sda = 3.1
    Declare Sub Disp 'deklaracja podprog
    Dim Fun As Byte 'deklaracja zmiennych
    Dim Vol As Byte
    Vol = 220

    Set P3.7 'poczatkowe ustawianie portow
    Set P1.0
    Reset P3.5
    Reset P3.2
    Reset P3.3
    Reset P3.4

    Call Disp

    I2cstart 'poczatkowe ustawianie
    I2cwbyte 160 'basu sopranu na pozycje srodkowe
    I2cwbyte 00000000
    I2cwbyte Vol
    I2cwbyte 00000001
    I2cwbyte Vol
    I2cwbyte 00001000
    I2cwbyte 11001010
    I2cwbyte 00000010
    I2cwbyte 11110110
    I2cwbyte 00000011
    I2cwbyte 11110110 'wylaczenie mute i przelaczenie wejsc
    I2cstop

    Do
    If P3.5 = 1 Then 'przyzszly przelacznik miedzy funkcjami
    If Fun = 3 Then 'odlicza za kazdym nac +1 do trzech
    Fun = 0
    Else
    Fun = Fun + 1
    Call Disp
    Waitms 200
    End If
    End If

    If P3.7 = 0 Then 'jesli nacisnieto klawisz "+"
    If Vol = 254 Then 'jesli zmienna jest rowna 254
    Call Disp ' (czyli max skali volume)
    Else 'to tylko wyswietl obecna zmienna
    Vol = Vol + 1
    Call Disp
    I2cstart
    I2cwbyte 160
    I2cwbyte 00000000
    I2cwbyte Vol
    I2cwbyte 00000001
    I2cwbyte Vol
    I2cstop
    Waitms 200
    End If
    End If

    If P1.0 = 0 Then 'jesli nacisnieto klawisz "-"
    If Vol = 220 Then 'jesli zmienna jest rowna 254
    Call Disp ' (czyli min skali volume)
    Else 'to tylko wyswietl obecna zmienna
    Vol = Vol - 1
    Call Disp
    I2cstart
    I2cwbyte 130
    I2cwbyte 00000000
    I2cwbyte Vol
    I2cwbyte 00000001
    I2cwbyte Vol
    I2cstop
    Waitms 200
    End If
    End If
    Loop

    Sub Disp 'obsluga lcd i tyle
    Cls
    Lcd "FUNC " ; Fun ; " GLOS " ; Vol
    Locate 1 , 16
    Lcd Vol
    Locate 2 , 1
    Lcd "OPE +P3.7 -P1.0 funcP3.5"
    End Sub

    End

    Proszę o dopisanie jak te komendy utrzymania transmisji się pisze, oraz komendę do przeliczania liczb dziesiętnych->dwójkowe.
    tomek
    Załączniki:
    • tda8425.pdf (312.75 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 3305244
    Mol
    Poziom 31  
    Posty: 1168
    Pomógł: 152
    Ocena: 103
    Robiłem kiedyś ten przedwzmacniacz , nawet działał ,
    tylko niewiem dlaczego ten twój ma adres 160 , a mój miał adres 130?
  • REKLAMA
  • #3 3307521
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    witaj, napisałem a wlasciwie przepisalem program wykrywajcy wszystkie urzadzenia I2C. nic nie wykrył, czemu?? magistrala jest dobrze podłączona, scalak pracuje (no mozna powiedziec, ze nie pracuje wogle) w aplikacji producenta. powienien pobierac 45mA a pobiera 25mA.

    Czy liczby wpisywane do jego rejestrow musza byc binarne czy moga byc dziesietne a kompilator je przekształci?? A jakie Ty wpisywałes, mógłbys wkleic kod programu a najlepiej dac *.bas jako załącznik, tak abym mógł go przesledzic??

    Moze liczby musza byc bin, jakie polecenie sluzy do zamiany decy>bin??
    Fakt, nie moze dzialac jesli nie wykrywa scalaka...
  • REKLAMA
  • #4 3308826
    Mol
    Poziom 31  
    Posty: 1168
    Pomógł: 152
    Ocena: 103
    Program pisałem na FastAVR , liczby wpisywałem binarnie bo akurat było mi tak wygodniej , choć nie wszystkie .Zobaczę czy jeszcze gdzieś mam ten program to ci go podeślę.


    Niestety nie mam już tego programu

    Cytat:
    Config Scl = 3.0 'stawienia I2C
    Config Sda = 3.1

    To jest raczej źle . P3.0 i P3.1 chyba powinno być.
  • #5 3318605
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    tak tu moze być błąd ktorego nie zgłasza kompilator. to dlatego ze P wpisuje mi sie automatycznie, po sekundzie zwłoki. a widoczie pisałem szybko. dzis sprawdze, poprawie itd.

    W dalszym ciagu mam pytanie jak przekształcac liczby decy>bin

    Gdzie można zdobyc tda7318 i to jeszcze w obudowie DIP?? moja technologia produkcji płytek nie pozwala na stosowanie SMD.
  • REKLAMA
  • #6 3319748
    Mol
    Poziom 31  
    Posty: 1168
    Pomógł: 152
    Ocena: 103
    Tda 7318 mają np. w TME (może trochę jast drogi) , nie przekształcałem w programie liczb z decy na bin , Volume regulowałem zmienną z zakresu 0 - 63 . Do TDA 7318 możesz dostwić korektor 5 pasmowy na TDA7317.
  • #7 3322050
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    Poprawiłem i wzbogaciłem program, składa sie teraz z bloków; 1 deklaracji zmiennych, podprogramu, lcd, ustawienia portow uC, ustawienie poczatkowych ustawien TDA8425 przez i2c. 2 petli do...loop w ktorej zawarte sa instrukcjie przelaczania funkcji po kolei volume+, bass+, treble+ i dlugosci trwania waitms w kazdym z wczesniejszych blokow. W tej samej petli lecz pozniej zawarte sa instrukcje dla "ujemnego" klawisza (volume- itd.) 3 Na koniec podprogram obslugi wyswietlacza lcd, odwolania do niego sa w calym programie.

    Niestety jednak moje dzielo, podczas regulacji glosnosci stopniowo dodaje basy, a po skonczeniu sie skali wraca na minimum i dodaje znowu. skok na min nastepuje na liczbie 240. Przy czym regulacja basow i wysokich (na zmiennych LO i Hi wogle nie działa). Działa tylko jeden kanał, drugi milczy. sprawdzałem czy zamiast wpisania adresu przy reg drugiego kanału nie wpisałem adr basu, ale to jest dobrze.

    Byc moze spowodowane jest to brakiem komend ACK ktore jako błąd traktował kompilator. Składnia [np. i2cwbyte 00001111 , Ack] zamiast ack lub nack wpisywałem takze liczbe 8 lub 9 i tez było zle. Czy ktoś mógłby to przegryźć?? naprzykład wklejając zamieszczony kod do swojego bascoma, usawic kwarc i dopisac komendy

    Config Lcd = 24 * 2
    Config Lcdpin = Pin , Db4 = P1.4 , Db5 = P1.5 , Db6 = P1.6 , Db7 = P1.7 , E = P1.3 , Rs = P1.2
    Cursor Off
    Config Sda = P3.1
    Config Scl = P3.0 'stawienia I2C
    Declare Sub Disp 'deklaracja podprog
    Dim Fun As Byte 'deklaracja zmiennych
    Dim Vol As Byte
    Dim Hi As Byte
    Dim Lo As Byte
    Dim Czek As Byte
    Czek = 200
    Vol = 240
    Lo = 246
    Hi = 246

    Set P3.7 'poczatkowe ustawianie portow
    Set P1.0
    Reset P3.5
    Reset P3.2
    Reset P3.3
    Reset P3.4

    I2cstart 'poczatkowe ustawianie
    I2cwbyte 130 'basu sopranu na pozycje srodkowe
    I2cwbyte 00000000
    I2cwbyte Vol
    I2cwbyte 00000001
    I2cwbyte Vol
    I2cwbyte 00001000
    I2cwbyte 11001010
    I2cwbyte 00000010
    I2cwbyte 11110110
    I2cwbyte 00000011
    I2cwbyte 11110110 'wylaczenie mute i przelaczenie wejsc
    I2cstop

    Call Disp
    Do

    If P3.5 = 1 Then 'przelacznik miedzy funkcjami
    If Fun = 4 Then
    Fun = 0
    Waitms Czek
    Else
    Fun = Fun + 1 'odlicza za kazdym nac +1 do trzech
    Call Disp
    Waitms Czek
    End If
    End If


    If P3.7 = 0 Then 'jesli nacisnieto klawisz "+"

    If Fun = 1 Then 'funkcja 1 czyli GLOSNOSC
    If Vol = 255 Then
    Call Disp
    Waitms Czek
    Else
    Vol = Vol + 1
    Call Disp
    I2cstart
    I2cwbyte 130
    I2cwbyte 00000000
    I2cwbyte Vol
    I2cwbyte 00000001
    I2cwbyte Vol
    I2cstop
    Waitms Czek
    End If
    End If

    If Fun = 2 Then 'funkcja 2 czyli BASS
    If Lo = 250 Then
    Call Disp
    Waitms Czek
    Else
    Lo = Lo + 1
    Call Disp
    I2cstart
    I2cwbyte 130
    I2cwbyte 00000010
    I2cwbyte Lo
    I2cstop
    Waitms Czek
    End If
    End If

    If Fun = 3 Then 'funkcja 3 czyli TREBLE
    If Hi = 250 Then
    Call Disp
    Waitms Czek
    Else
    Hi = Hi + 1
    Call Disp
    I2cstart
    I2cwbyte 130
    I2cwbyte 00000011
    I2cwbyte Hi
    I2cstop
    Waitms Czek
    End If
    End If

    If Fun = 4 Then 'funkcja 3 czyli TREBLE
    If Czek > 250 Then
    Call Disp
    Waitms Czek
    Else
    Czek = Czek + 5
    Call Disp
    Waitms Czek
    End If
    End If

    End If

    If P1.0 = 0 Then 'jesli nacisnieto klawisz "-"

    If Fun = 1 Then 'funkcja 1 czyli GLOSNOSC
    If Vol = 192 Then
    Call Disp
    Waitms Czek
    Else
    Vol = Vol - 1
    Call Disp
    I2cstart
    I2cwbyte 130
    I2cwbyte 00000000
    I2cwbyte Vol
    I2cwbyte 00000001
    I2cwbyte Vol
    I2cstop
    Waitms Czek
    End If
    End If

    If Fun = 2 Then 'funkcja 2 czyli BASS
    If Lo = 242 Then
    Call Disp
    Waitms Czek
    Else
    Lo = Lo - 1
    Call Disp
    I2cstart
    I2cwbyte 130
    I2cwbyte 00000010
    I2cwbyte Lo
    I2cstop
    Waitms Czek
    End If
    End If

    If Fun = 3 Then 'funkcja 3 czyli TREBLE
    If Hi = 242 Then
    Call Disp
    Waitms Czek
    Else
    Hi = Hi - 1
    Call Disp
    I2cstart
    I2cwbyte 130
    I2cwbyte 00000011
    I2cwbyte Hi
    I2cstop
    Waitms Czek
    End If
    End If

    If Fun = 4 Then 'funkcja 3 czyli TREBLE
    If Czek < 5 Then
    Call Disp
    Waitms Czek
    Else
    Czek = Czek - 5
    Call Disp
    Waitms Czek
    End If
    End If

    End If
    Loop

    Sub Disp 'obsluga lcd i tyle
    Cls
    Lcd "FUNC " ; Fun ; " opoznienie " ; Czek
    Locate 2 , 1
    Lcd "VOL " ; Vol ; " LO " ; Lo ; " HI " ; Hi
    End Sub

    End

    ten tda7318 to taki troche offtopic, ale dzieki znalazłem: Ilość: 1+ Cena: 25.90 PLN | Ilość: 3+ Cena: 22.90 PLN | Ilość: 10+ Cena: 19.90 PLN.
    Czy jest jakis lepszy scalak w tej cenie??
    tda7317 Ilość: 1+ Cena: 5.99 PLN | Ilość: 3+ Cena: 5.50 PLN | Ilość: 10+ Cena: 4.39 PLN
    Ilość: 25+ Cena: 3.99 PLN
  • #8 3323441
    Mol
    Poziom 31  
    Posty: 1168
    Pomógł: 152
    Ocena: 103
    Vol jak wcześniej napisałem to zakres od 0 -63 , a ty na dzieńdobry ustawiasz 240.Użyj windowsowego kalkulatora do przeliczenia wartości binarnych , które są w PDFie , na wartości dziesiętne , które wpisujesz do programu.Kalkulator musisz przełączyć w tryb naukowy
    w górnym menu.
  • #9 3326063
    tom1eczek
    Poziom 20  
    Posty: 523
    Pomógł: 30
    Ocena: 21
    W katalogu jest napisane ze glosnosc reguluje sie 6 mlodszymi bitami. ich wartosc rzeczywiscie waha się 0-63. dwa najstarsze bity (dopelnienie do 8 bit) w regulcji to dwie jedynki czyli 11XXXXXX. wartosc wstepna to 192. i jest to minimum głośnosci, max głosnosci to 255, zapisane na 8 bitach.

    Jest taka funkcja makebcd i z liczb bcd robi dziesietne. jaka funkcja słuzy do zamiany dziecietnych na binarne??

    Do tego mam pytanie czemu nie działa ACK, i czemu basy się regulują same?? czemu działa jeden kanał. wg mnie brak kanału i bas to jakas podmieniona funkcja czy co??
    dzis w domu zamienie regulacje jednego kanału i basu ze sobą, może w kat jesy błąd.
  • #10 3327354
    Mol
    Poziom 31  
    Posty: 1168
    Pomógł: 152
    Ocena: 103
    Możesz przetestować Funkcję BIN()

    A = 25
    C = 14
    D = 14
    B1 = switch functions
    Sub Write
    I2cstart
    I2cwbyte 130
    I2cwbyte 0
    I2cwbyte A ; Głośność kanał L ; zakres 0 - 63
    I2cwbyte A ; Głośność kanał R ; zakres 0 - 63
    I2cwbyte C ; Bass ; zakres 0 - 15
    I2cwbyte D ; Treble ; zakres 0 - 15
    I2cstop
    Waitms 10
    I2cstart
    I2cwbyte 130
    I2cwbyte 8
    I2cwbyte B1 ; switch functions
    I2cstop
    Waitms 10
    endsub

    Po wysłaniu pierwszej zmiennej A (kanał L), TDA automatycznie zwiększa rejestr i następna zmienna A jest wpisywana do rejestru sterującego kanałem R , TDA zwiększa rejestr o 1 i zmienna C jest wpisywana do rejestru sterującego basem , TDA zwiększa rejestr o 1 i zmienna D jest wpisywana do rejestru sterującego wysokimi.Ostatni rejestr (zmienna B1) steruje funkcjami w TDA. Możesz sobie napisać krótki program tylko do testu i załadować go kilka razy , zmieniając tylko wartości zmiennych A,C,D,B1 i zobaczysz co się dzieje .Zrób jeden podprogram (np. taki jak ten powyżej) i po każdej zmianie w programie jakiejś zmiennej , zrób skok do tego podprogramu , zaoszczędzisz miejsce i czas . Do testu użyj zmiennych z zakresu które ci podałem (ale tylko do testu) .Sory że się upieram przy swoim , ale z tego co pamiętam , to na początku też miałem problem żeby go wysterować. Co do wartości tych zmiennych to oczywiście mogę sie mylić , ale spróbować możesz. Help do bascoma po polsku jest na sieci , gdybyś nie miał to ci mogę na maila podesłać.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemów z implementacją sterowania układem TDA8425 za pomocą Bascoma i magistrali I2C, w szczególności błędów związanych z użyciem poleceń ack/nack oraz konwersją wartości głośności z systemu dziesiętnego na binarny. Użytkownik zgłasza błędy kompilatora przy próbach użycia ack/nack w poleceniach i2cwbyte oraz nieprawidłowe działanie regulacji głośności i basów, w tym automatyczne zmiany basów i działanie tylko jednego kanału. Wskazano, że zakres wartości głośności to 0-63 (6 młodszych bitów), a wartości powyżej 63 (np. 240) są nieprawidłowe. Zalecane jest użycie kalkulatora w trybie naukowym do konwersji wartości binarnych z dokumentacji na dziesiętne. Podano przykładowy fragment kodu pokazujący prawidłowe wysyłanie danych do rejestrów TDA8425 przez I2C bez konieczności ręcznego stosowania ack/nack, gdyż funkcje I2C w Bascom automatycznie je obsługują. Poruszono także kwestie adresu I2C układu (np. 130 lub 160) oraz pytania o dostępność układu TDA7318 w obudowie DIP. Wskazano, że do konwersji dziesiętnych na binarne można użyć funkcji BIN() w Bascom. Podsumowując, poprawne sterowanie TDA8425 wymaga stosowania wartości w odpowiednim zakresie, prawidłowego adresu I2C oraz zrozumienia automatycznej obsługi ack/nack przez Bascom.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA