Arduino VHF-FM PLL Controller LC72131 & LC72xxx
السلام عليكم
Ini adalah contoh kode sumber Arduino untuk mengendalikan IC PLL LC72131 yang dikeluarkan oleh Sanyo. Biasanya IC ini terdapat pada blok tuner terintegrasi. Kode sumber ini juga bisa digunakan untuk mengendalikan IC PLL yang masih sekelompok LC72xxx atau bisa juga ic lain yang memakai protokol komunikasi Sanyo CCB. Oleh karena itu disarankan untuk baca lembar data ic yang akan digunakan dikarenakan registernya berbeda.
Skema pengkabelan :
------------------------------------------------------------------------------------------------------------
//Program Sederhana untuk mengendalikan IC LC72131 yang terpasang didalam tuner mitsumi
//Kontrol UP DOWN Lewat perintah serial . 1=Up, 2=DOWN, 3=MUTE
//Library harus menggunakan library custom. unduh melalui tautan dibawah
// https://drive.google.com/file/d/12FD0O9TcsrQ7HzocvRwnkS76gKKTAai4/view?usp=sharing
#include <inttypes.h>
#include <SanyoCCB.h>
// LC72131 IN1, byte 0
#define IN10_R3 7
#define IN10_R2 6
#define IN10_R1 5
#define IN10_R0 4
#define IN10_XS 3
#define IN10_CTE 2
#define IN10_DVS 1
#define IN10_SNS 0
// LC72131 IN2, byte 0
#define IN20_TEST2 7
#define IN20_TEST1 6
#define IN20_TEST0 5
#define IN20_IFS 4
#define IN20_DLC 3
#define IN20_TBC 2
#define IN20_GT1 1
#define IN20_GT0 0
// LC72131 IN2, byte 1
#define IN21_DZ1 7
#define IN21_DZ0 6
#define IN21_UL1 5
#define IN21_UL0 4
#define IN21_DOC2 3
#define IN21_DOC1 2
#define IN21_DOC0 1
#define IN21_DNC 0
// LC72131 IN2, byte 2
#define IN22_BO4 7
#define IN22_BO3 6
#define IN22_BO2 5
#define IN22_BO1 4
#define IN22_IO2 3
#define IN22_IO1 2
#define IN22_IOC2 1
#define IN22_IOC1 0
// LC72131 DO0, byte 0
#define DO0_IN2 7
#define DO0_IN1 6
#define DO0_UL 4
SanyoCCB PLL(A2, A3, A4, A5); // DO,CL,DI,CE
byte pll_in1[3];
byte pll_in2[3];
unsigned long frekuensi = 102200; // frekuensi KHz
unsigned long tuned = 0; boolean a;
byte n;
void LC72131_init() {
memset(pll_in1, 0, 3);
memset(pll_in2, 0, 3);
bitSet(pll_in2[0], IN20_IFS);
bitSet(pll_in2[1], IN21_UL0);
bitSet(pll_in2[2], IN22_BO2);
bitSet(pll_in1[0], IN10_XS); // Menggunakan xtal 7.2Mhz,kalo menggunakan xtal 4.5Mhz ini di hilangkan saja
}
void LC72131_SetMode() {
bitWrite(pll_in1[0], IN10_R0, 0); //
bitWrite(pll_in1[0], IN10_R1, 1); // Referensi(step)= 50Khz lihat datasheet (ref*2)
bitWrite(pll_in1[0], IN10_R2, 0); //
bitWrite(pll_in1[0], IN10_R3, 0); //
bitWrite(pll_in1[0], IN10_DVS, 1); // Mode FM. Mode SW diganti : bitWrite(pll_in1[0], IN10_SNS, 1); Untuk mode AM dihapus
bitWrite(pll_in2[0], IN20_GT0, 0); //
bitWrite(pll_in2[0], IN20_GT1, 1); //
bitWrite(pll_in2[1], IN21_DZ0, 1); //
bitWrite(pll_in2[1], IN21_DZ1, 0); //
bitWrite(pll_in2[2], IN22_BO1, 0); // FM mode pada tuner mitsumi
bitWrite(pll_in2[2], IN22_BO2, 1); // MUTE mode pada tuner mitsumi
bitWrite(pll_in2[2], IN22_BO3, 1); // mono 1 stereo=0 mode pada tuner mitsumi
PLL.write(0x82, pll_in1, 3);
PLL.write(0x92, pll_in2, 3);
}
//tuning
uint8_t LC72131_Tune(uint32_t frequency) {
uint16_t fpd = 0;
uint8_t i = 0;
uint8_t r[3];
fpd = (frequency+10700)/50; //Untuk penggunaan pemancar fpd = (frequency/50);
//Program Frekuensi Divider (fpd)
bitClear(pll_in1[0], IN10_CTE);
pll_in1[1] = byte(fpd >> 8);
pll_in1[2] = byte(fpd & 0x00ff);
PLL.write(0x82, pll_in1, 3);
bitSet(pll_in1[0], IN10_CTE);
PLL.write(0x82, pll_in1, 3);
// PLL lock(DO0_UL == 1)
while(i < 20) {
PLL.read(0xa2, r, 3);
PLL.read(0xa2, r, 3);
i = (bitRead(r[0], DO0_UL)) ? 100 : i + 1;
}
return 0;
}
void mute(boolean b){
if(b==true){
bitSet(pll_in2[2], IN22_BO2);}
if(b==false){
bitClear(pll_in2[2], IN22_BO2);
}
PLL.write(0x92, pll_in2, 3);
}
uint8_t data(){
byte a;
a=Serial.read();
if(a=='1'){return 1;}
if(a=='2'){return 2;}
if(a=='3'){return 3;}
return 0;
a=0;
}
void setup() {
Serial.begin(9600);
PLL.init();
delay(1000);
LC72131_init();
LC72131_SetMode();
tuned = LC72131_Tune(frekuensi); //atur frekuensi
}
void loop() {
n = data();
if(n != 0){
switch (n){
case 1:
frekuensi=frekuensi+100;
break;
case 2:
frekuensi=frekuensi-100;
break;
case 3:
a=!a; mute(a);
Serial.println(pll_in2[2],BIN);
break;}
if(frekuensi > 108000) frekuensi = 76000;
if(frekuensi < 76000) frekuensi = 108000;
tuned = LC72131_Tune(frekuensi);
Serial.println((frekuensi) );
}
}
------------------------------------------------------------------------------------------------------------
Berikut tabel yang berkaitan untuk setting mode FM pada perintah void LC72131_SetMode() {:
Contoh perhitungan frekuensi yang akan dikirimkan ke IC LC72131:
CATATAN : Kode sumber diatas memakai library custom yang saya ubah agar pin sesuai. Unduh Library custom.
Demikian Semoga bermanfaat buat belajar PLL.
4 Komentar untuk "Arduino VHF-FM PLL Controller LC72131"
Nah, ini mantab kodenya OM Arif, sebagai penambah khasanah cara memprogram IC PLL LC72131.
Rudik Wid.
Sudah dirangkai, tenyata keluar noise saja, apanya ya Om ?
السلام عليكم ورحمة الله وبركاته
I am a hobbyist, I need help from you brothers programming the SN761672A and the LC72131. Thanks a lot