Kami mengeluarkan sinyal jarak jauh dari radio mobil dengan amplifier yang dikendalikan oleh i2c



Sinyal REMOTE (tegangan 12V, yang digunakan untuk menghidupkan amplifier eksternal ketika radio dihidupkan) tidak begitu mudah untuk dihapus dari perekam radio standar modern. Jika sebelumnya adalah mungkin untuk menggunakan kaki ST-BY dari chip amplifier, sekarang pengembang radio tidak menggunakan kaki ini karena chip amplifier yang dikontrol secara digital telah muncul.

Anda dapat mencari di papan sirkuit apakah ada tegangan yang muncul ketika radio dihidupkan, tetapi dalam kebanyakan kasus tidak cocok. Anda dapat terhubung ke kekuatan lampu latar layar, hanya dalam hal ini amplifier dapat menyala secara tak terjadwal - sebelum menyalakan amplifier built-in (yang disertai dengan klik di jalur) atau ketika menyesuaikan iklim atau ketika sensor parkir bekerja.

Saya akan mencoba menggambarkan cara lain keluar dari situasi pada contoh radio Swing standar di Skoda Octavia A7

Kami mempelajari perangkat


Penguat terminal adalah TDA7563, sinyal analog datang dengan SAF7741HV DSP.

TDA7563, ternyata, sangat populer di kalangan pengembang unit kepala karena chip ini memiliki kontrol digital dan diagnostik pada bus i2c, dan i2c telah digunakan di radio untuk waktu yang sangat lama. Microcircuit amplifier, ketika radio dihidupkan, atas perintah prosesor utama, menguji speaker, memberikan hasil tes sesuai dengan i2c - sirkuit terbuka / pendek ditentukan, yang memungkinkan unit radio untuk mengeluarkan kesalahan ini melalui peralatan diagnostik CAN. Microcircuit amplifier juga dimasukkan ke mode sleep oleh perintah i2c (kaki ST-BY dari amplifier tidak digunakan), yang sangat mempersulit penerimaan sinyal REMOTE.

Secara umum, seluruh radio dinyalakan terus-menerus, terlepas dari apakah itu aktif dan kunci kontak menyala. Hanya saja semua sirkuit mikro yang tidak perlu (termasuk amplifier) ​​diisi sampai dibutuhkan dan prosesor radio utama membangunkannya (dalam kasus kami).

Penerima radio menerima status menyalakan dimensi dan menyalakan kunci kontak melalui CAN. Tukar dengan tombol roda kemudi - via CAN ke unit gateway bus diagnostik, lalu - via LIN ke pengontrol tombol di roda kemudi.

Ide


Idenya adalah untuk meletakkan perangkat lain berdasarkan mikrokontroler sederhana dan murah di bus internal i2c, yang akan berpura-pura menjadi chip penguat dan mendengarkan semua perintah yang terbang ke dalamnya dari prosesor radio. Selain itu, i2c memungkinkan "mata-mata" kami untuk tetap tidak terlihat oleh prosesor radio. Amplifier built-in akan berfungsi seperti sebelumnya, dan sinyal REMOTE akan dihasilkan oleh mikrokontroler tepat ketika radio menyalakan amplifier bawaannya. Metode ini cocok untuk semua perekam kaset radio di mana chip TDA7563 digunakan atau kompatibel dengan itu melalui protokol pertukaran.

Perangkat itu sendiri dirakit selama akhir pekan di papan di mana, selain mikrokontroler, hanya ada 3 resistor dan 2 LED debug (opsional). Mikrokontroler dipilih dari perangkat yang tidak perlu, jadi untuk waktu yang lama saya tidak berpikir tentang memilih mikron.




Perangkat lunak pengontrol debug


Semuanya cukup sederhana. Kita hanya perlu mengimplementasikan i2c-slave dengan alamat seperti TDA7563 (0x6C) dan menunggu permintaan tulis. Selanjutnya, Anda perlu mengambil 2 Instruksi byte dari prosesor radio dan menganalisisnya. Bit yang menarik adalah Standby Off di byte IB2, Unmute Rear Channels dan Unmute Front Channels di byte IB1. Secara umum, ternyata radio tape recorder pertama-tama mengatur bit Standby Off dan dengan sedikit penundaan - Unmute Front Channels dan Unmute Rear Channels bits.



Saya menggambarkan byte perintah dalam bentuk struktur bit, yang saya tempatkan dalam satu kesatuan bersama dengan array 2 byte, sehingga ketika mengisi buffer, saya akan mengaksesnya byte-by-bye, dan ketika menguraikan perintah, memiliki akses yang mudah ke bit:

Perintah Terima Deskripsi Buffer
typedef struct
{
unsigned char CD_10 :1;
unsigned char UnmuteRearChannels :1;
unsigned char UnmuteFrontChannels :1;
unsigned char RearChannelGain12db :1;
unsigned char FrontChannelGain12db :1;
unsigned char OffsetDetectionEnable :1;
unsigned char DiagnosticEnable :1;
unsigned char NotUsed1 :1;
} tIB1;

typedef struct
{
unsigned char HighEfficiencyMode_Left :1;
unsigned char HighEfficiencyMode_Right :1;
unsigned char CurrentDetectionDiagnosticEnable:1;
unsigned char LineDriverModeDiagnostic :1;
unsigned char StandbyOff :1;
unsigned char FastMuting :1;
unsigned char NotUsed1 :1;
unsigned char NotUsed2 :1;
} tIB2;

typedef union
{
struct
{
tIB1 IB1;
tIB2 IB2;
} IBs;
char Bytes[2];
} tTWI_Buff;


Dan ini adalah bagaimana perintah memeriksa terlihat (saya memeriksa bit Standby Off dan Unmute Front Channels):

Kode
void CheckTWIbuff(void)
{
if ((TWI_Buff.IBs.IB2.StandbyOff) && (TWI_Buff.IBs.IB1.UnmuteFrontChannels))
REMOTE_ON();
else
REMOTE_OFF();
}


Untuk mencegah mata-mata mengganggu membaca keadaan dari TDA7563, kami akan mengeluarkan byte = 0xFF selama operasi baca dari budak, sehingga TDA dapat menarik garis SDA ke tanah pada saat yang tepat dan mata-mata tidak mengganggu itu.
I2c interrupt handler
#pragma vector=TWI_vect
__interrupt void TWI_ISR()
{
switch (TWSR & 0xF8)
{
//===
case 0xa8: // , , Data.
case 0xb8: // Data, ACK.
case 0xc0: // Data, NACK.
TWDR = 0xFF;
break;
//===
case 0x60: // , , Data.
TWI_Buff_Idx = 0;
LED_Flash(5000);
break;
case 0x80: // Data, .
case 0x88: // Data, .
TWI_Buff.Bytes[TWI_Buff_Idx++] = TWDR;
break;
case 0xa0: // STOP RESTART.
CheckTWIbuff();
break;
case 0xF8:
case 0x00:
Init_Twi();
break;
default:
break;
}

TWCR |= (1 << TWINT); // .
}

Seluruh proyek dapat diunduh dari sini . Pada prinsipnya, kode ini mudah diperbaiki untuk penguat ms apa pun dengan kontrol i2c. (bertemu TDF8546, misalnya).

Pengontrol saya tidur 99% dari waktu dalam mode Power-down. Bangun ketika mengakses alamat i2c-nya (menggunakan perangkat keras TWI), menerima perintah, menganalisisnya, jika perlu output 1 ke output REMOTE_3.3, berkedip LED debug kedua (D2) dan tertidur lagi.

Proses debug:



Kami mengumpulkan


Ketika firmware gagal, Anda dapat mulai memasang radio.

Biaya yang saya tempelkan ke tuner layar:



Karena Saya tidak punya tempat untuk transistor di papan tulis, membentuk tegangan 12V dari pengontrol REMOTE_3.3, saya hanya mengambil 78R12 yang dikendalikan oleh level logika. Juga menambahkan sekering N10 terintegrasi pada 0,4A.



TDA7563 terhubung ke bus i2c radio di kaki: Radio


telah dirakit. Kabel biru berharga



Sama, tetapi di radio berbeda dan dalam format video:

All Articles