Hallo Leute,
mal kurz zu meinem Projekt aktuell:
Mein Ziel ist es, ein Radio zu bauen. Es soll FM Empfangen können (mit
RDS). Dazu Bluetooth Audio und Aux Anschluss mit 2*15 Watt
Ausgangsleistung. Bedienbar über einen Rotary und ein LCD Display.
Ich habe als Grundlage einen Arduino, dem ich einen eigenen Header
verpasst habe.
Auf dem Header ist folgendes:
-DS1307 Uhrzeit-IC
-I2C Levelshifter
-Levelshifter für LCD Display
-ws2812 LED
-Header für LCD, Rotary, usw.
-Header für Brücke zur Audioplatine
Auf der Audioplatine sind folgende Sachen:
-TPA3140D2 Class-D AMP IC von TI
-TDA7439 Analoger Audio Prozessor von ST, angebunden an I2C
-XS3868 Bluetooth-Modul, angebunden an Arduino über Uart
-Si4703 Breakout-Board, angebunden an Arduino über I2C
Im Prinzip funktioniert alles, aber auch nichts.
Was bisher ohne Probleme funktioniert ist der Verstärker, der
Audioprozessor, das Display und der Rotaryencoder sowie der Button.
Radio hören über den Si4703 kann ich im Prinzip, allerdings ist der
Empfang extremst schlecht (empfange einen einzigsten Sender draußen im
Freien damit, dafür funktioniert aber dort auch der RDS Empfang).
Das Bluetooth Modul funktioniert und funktioniert mal nicht.
Es ist mehr oder weniger Zufall ob das XS3868 Modul via Bluetooth
sichtbar ist. Wenn es sichtbar ist, funktioniert es, wenn nicht dann
kann man sich halt auch nicht darauf verbinden.
Das DS1307 Modul funktioniert im Prinzip auch, allerdings liefert es
falsche Werte zurück sobald die Audioplatine angeschlossen ist.
I2C Adressen überschneiden sich keine, da habe ich nachgesehen.
Außerdem kommt es mir so vor als ob der Arduino wilde und
unkontrollierte Programmsprünge macht. Er führt z.B. gelegentlich die
Routine aus um einen neuen Sender zu suchen obwohl er das nicht soll.
Kann es sein dass es da zu Problemen kommt aber einer gewissen Tiefe an
verschachtelten Funktionsaufrufen?
Bilder und Schaltpläne habe ich angehängt, ich hoffe ihr habt ein paar
Ideen oder könnt mir ein paar Tipps bei der Fehlersuche geben.
Danke & Gruß
Markus
Mh mal kurzes Update:
Das Problem mit dem DS1307 konnte ich dadurch lösen dass ich das
Brückenkabel auf 1/3 der Größe reduziert habe. Seitdem läuft das
Auslesen der Uhrzeit korrekt.
Was das XS3868 angeht: Ich habe herausgefunden, dass wenn die Verbindung
zum Arduino Shield besteht via Brückenkabel funktioniert es problemlos.
Kann dann via provisorisch angelötetem USB-FTDI mit ihm kommunizieren.
Sobald das Brückenkabel drauf ist, startet er nur manchmal, scheint also
mit der Anbindung zum Shield zusammenzuhängen.
Habe die Uart Pegel mit dem Oszi mal durchkontrolliert, aber da waren
keine Auffälligkeiten.
Wenn der Radioempfang schlecht ist, würde ich zuerst die Stromversorgung
und dann die Antenne überprüfen.
Generell ist es schwierig, einen Mikrocontrolelr oder andere getaktete
Schaltungen in unmittelbarer Nähe zu einem Radioempfänger zu betreiben.
Eventuell wirst du da abschirmen müssen, wie es auch viele Handies und
Taschenradios tun.
Das ist der Code mit dem ich aktuell Teste. Ist aber noch nix
gescheites. Damit hatte ich noch rumprobiert bevor ich die Platinen
gemacht hatte und alles noch ein Testaufbau war.
Er springt öfters mal in diese Verzweigung rein
1
if(SeekWished==1)..
obwohl SeekWished niemals auf 1 gesetzt wurde.
Das mit dem Fm Tuner habe ich mir fast schon gedacht. Werde gleich mal
nen dicken Elko anlöten. Ansonsten gibt es nochmals eine Platine mit
einem EMI-Shield um den Tuner.
Das einzigste was mir jetzt noch rießen Rätsel bereitet ist, warum das
XS3868 nicht richtig starten will, wenn die Platinen verbunden sind.
Habe Testweise nur mal die I2C Leitungen + Masse an die Audioplatine
geführt, also ohne UART + 5V und selbst dann startet er nicht richtig.
Sind beide Platinen komplett getrennt startet der XS3868 immer korrekt.
Eine gemeinsame Masse dagegen macht ihm nichts aus.
Die I2C Leitungen haben doch aber 0 mit dem XS3868 etwas zu tun in der
Schaltung.