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

[Zlecę] Potrzebuję wyciągnąć w trybie soft. informacje z WM8804

dio 18 Mar 2023 12:55 429 5
REKLAMA
  • #1 20495653
    dio
    Poziom 11  
    Chcę uzyskać z sygnału SPDIF informację jaka aktualna jest częstotliwość, z tego co czytam w nocie to w trybie soft można to uzyskać.
  • REKLAMA
  • #2 20501133
    __Grzegorz__
    Poziom 30  
    Trzeba odczytać 4 najmłodsze bity z rejestru R16 scalaka WM8804 (RXCHAN4, Indicated Sampling Frequency)) i zinterpretować je wg tabelki ze strony 6 normy IEC60958-3
    [Zlecę] Potrzebuję wyciągnąć w trybie soft. informacje z WM8804
    Dodatkowo można odczytać 4 najstarsze bity z rejestru R17 (RXCHAN5, Original sampling Frequency) i zinterpretować to wg tabelki na stronie 7 normy IEC.
  • REKLAMA
  • #3 20502222
    dio
    Poziom 11  
    No i właśnie do tego potrzebuje kogoś kto to ogarnie. Chodzi o prosty układ który w zależności od aktualnej częstotliwości zapali określonego przypisanego led-a.
    Oczywiście za zleconą robotę zapłacę.
  • REKLAMA
  • #4 20502641
    __Grzegorz__
    Poziom 30  
    Nie potrzebujesz już programisty / elektonika. :)
    Ogarnia to nawet sztuczna inteligencja.
    ChatGPT dał radę, sprawdzimy co potrafi elektrodowy pomocnik:

    @ElektrodaBot
    Napisz program na Arduino, który odczyta rejestr R16 po szynie I2C ze scalaka WM8804.
    Niech podłączony LED zapali się, gdy wartość młodszego nibbla odczytanego rejestru wyniesie b0100.
    Niech będzie zgaszony w przeciwnym wypadku.
  • REKLAMA
  • #5 20502646
    ElektrodaBot
    AI od OpenAI ChatGPT4
    __Grzegorz__ napisał:
    Napisz program na Arduino, który odczyta rejestr R16 po szynie I2C ze scalaka WM8804.
    Niech podłączony LED zapali się, gdy wartość młodszego nibbla odczytanego rejestru wyniesie b0100.
    Niech będzie zgaszony w przeciwnym wypadku.
    Oto program na Arduino, który odczyta rejestr R16 po szynie I2C ze scalaka WM8804 i zapali LED, gdy wartość młodszego nibbla odczytanego rejestru wyniesie b0100:

    ```cpp
    #include <Wire.h>

    const uint8_t WM8804_ADDR = 0x3b; // adres WM8804 na szynie I2C
    const uint8_t LED_PIN = 13; // pin LED

    void setup() {
    Wire.begin();
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, LOW);
    }

    void loop() {
    Wire.beginTransmission(WM8804_ADDR);
    Wire.write(0x10); // adres rejestru R16
    Wire.endTransmission(false); // nie przerywaj transmisji

    Wire.requestFrom(WM8804_ADDR, 1); // odczytaj 1 bajt

    if (Wire.available()) {
    uint8_t r16 = Wire.read(); // odczytaj bajt

    if ((r16 & 0x0F) == 0x04) { // młodszy nibbel == b0100
    digitalWrite(LED_PIN, HIGH); // zapal LED
    } else {
    digitalWrite(LED_PIN, LOW); // zgasi LED
    }
    }

    delay(100); // odczekaj 100ms
    }
    ```

    Program ten najpierw inicjuje połączenie I2C i ustawia pin LED jako wyjście. W pętli programu odczytuje rejestr R16 z WM8804, odczytuje młodszy nibbel i zapala LED, jeśli jest równy b0100, lub gasi LED w przeciwnym wypadku. Pętla oczekuje 100 milisekund przed kolejnym odczytem.
    Możesz mnie wywołać w każdym temacie pisząc @ElektrodaBot. Zastrzeżenie: Niektóre odpowiedzi udzielone przez ElektrodaBota mogą być niedokładne. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi ElektrodaBota powinny być zweryfikowane przez użytkownika. OpenAI może monitorować i zapisywać informacje wprowadzane po wywołaniu ElektrodaBota.
  • #6 20502655
    __Grzegorz__
    Poziom 30  
    Teraz zostaje zakupić dowolne arduino i 4 kabelki, spiąć się ze scalakiem (zasilanie, masa, I2C_SDA i I2C_SCL),
    wgrać program i cieszyć się działającym układem :)

    nibble równy 0100 odpowiada częstotliwości 48kHz. Chcesz aby była reakcja na inną częstotliwość - mień wartośc tego nibbla na inna wartośc z tabelki.
REKLAMA