Forum: FPGA, VHDL & Co. Störgeräusche bei Bluetooth Modul


von L. Beier (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir aus dem Internet ein Modul mit dem CSRA64215 gekauft, da es 
I2S unterstützt. Als es heute angekommen ist, habe ich es erstmal an 
einen FPGA angeschlossen, der die Left Justified Daten von dem Modul als 
I2S an einen DAC weitergibt (In dem späteren Projekt sollen die Daten 
noch verarbeitet werden).
Die Daten von dem Modul werden richtig weitergegeben (Siehe CSR_L.jpg), 
jedoch sind einige Störgeräusche in den Audiodaten, wie man in CSR_O 
sehen kann.
Meine Fragen sind nun:
Hat jemand von euch schon Erfahrung mit dem Modul gemacht?
Hat jemand eine Idee was das Problem sein könnte?
Gibt es einen anderen Bluetooth Chip mit digitalem Ausgang, der auch als 
Modul erhältlich ist?

Vielen Dank im Voraus


Datenblatt: 
http://www.tinyosshop.com/datasheet/CSRA64215%20QFN%20Data%20Sheet.pdf

: Verschoben durch Moderator
von Gerald M. (gerald_m17)


Lesenswert?

Signale nicht richtig einsynchronisiert? Mal direkt ohne FPGA verbunden?

von L. Beier (Gast)


Lesenswert?

Danke für den Rat! Ich habe wirklich die Einsynchronisierung vergessen, 
da ich das Modul so schnell wie möglich testen wollte.

von L. Beier (Gast)


Lesenswert?

Ich habe jetzt sck, ws und sd einsynchronisiert und das Signal wurde 
besser. Jedoch sind immernoch Störgeräusche in dem Signal. Ich habe 
etwas rumprobiert und die Geräuche gehen nur weg, wenn man sck, ws und 
sd direkt wieder ausgibt.
Mein Programm für den DAC Ausgang hat eigentlich immer funktioniert. 
Also dürfte der Fehler bei dem Empfangen der Daten liegen.
Hier ist mein Code um die Daten zu empfangen:
1
process (clk)
2
begin
3
  if rising_edge(clk) then
4
      if (sck = '1' and l_sck = '0') then 
5
          if (ws /= l_ws) then
6
              rx_bit <= 24;
7
    else
8
              if (rx_bit > 0) then
9
            d (rx_bit-1) <= sd;
10
      rx_bit <= rx_bit - 1;
11
        else
12
      if (ws = '0') then
13
          bt_L <= d;
14
            else
15
                bt_R <= d;
16
            end if;
17
        end if;
18
          end if;
19
    l_ws <= ws;
20
      end if;
21
      l_sck <= sck;
22
  end if;
23
end process;

Ich benutze diesen Code, da er schon bei einem anderen ADC funktioniert 
hat.

Der DAC funktioniert hier:
1
sck_o <= sck;
2
ws_o <= ws;
3
sd_o <= sd;
4
5
sck <= insrS(2); --(1) hat nicht funktioniert
6
ws  <= insrW(2); 
7
sd  <= insrD(1);

Der DAC Code ist das: (sck ist hier eigentlich 3.125 MHZ)
1
if (sck = '0' and l_sck = '1') then
2
    if (tx_bit > 0) then
3
        din_d <= d (tx_bit-1);
4
    end if;
5
elsif (sck = '1' and l_sck = '0') then
6
    if (ws /= l_ws) then
7
        tx_bit <= 24;
8
        if (ws = '1') then
9
            d <= out_R;
10
        else
11
            d <= out_L;
12
  end if;
13
    else
14
        if (tx_bit > 0) then
15
            tx_bit <= tx_bit - 1;
16
        end if;
17
    end if;
18
    l_ws <= ws;
19
end if;

von L. Beier (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist noch der Ausgang (oben) und der Eingang (unten)

von L. Beier (Gast)


Lesenswert?

Ich hab die Lösung gefunden: In dem Signal waren Schwingungen drin, die 
das Signal gestört haben. Um das zu lösen habe ich diese Implementation 
gewählt.
1
process (clk) begin --Einsynchronisieren WE
2
  if rising_edge(clk) then
3
      if (insrW(1 downto 0) = "10" and ws_i = '1') then
4
          insrW <= "11" & ws_i;
5
      else
6
          insrW <= insrW(1 downto 0) & ws_i;
7
      end if;
8
  end if;
9
end process;
10
11
process (clk) begin --Einsynchronisieren SDBI
12
  if rising_edge(clk) then
13
      if (insrD(1 downto 0) = "10" and sd_bi = '1') then 
14
          insrD <= "11" & sd_bi;
15
      else
16
          insrD <= insrD(1 downto 0) & sd_bi;
17
      end if;
18
  end if;
19
end process;

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.