Low cost & simple wide band VCO, LM7001 + 74HC04


Sudah lama tidak utak atik rangkaian RF jadi ingin nostalgia, teringat dulu waktu masih punya call sign YD6DEK, main di 100m (am), 80m (SSB) dan 2m (FM).. tiba2 jadi ingin membuat sendiri 80m SSB receiver..

receiver di design untuk bisa cover 2MHz – 7.5Mhz… harusnya ini sudah bisa cover 100m, 80m dan 40m? setelah membuka stok komponen yang ada maka dipilihlah frekwensi IF sebesar 8MHz (saya punya stok cukup banyak crystal 8MHz untuk ladder filter nanti)

oleh karena itu saya perlu VCO dengan range

2   + 8 = 10 MHz

7.5 + 8 = 15,5 MHz

lets start dengan VCO (mungkin nanti saya coba dengan Direct Digital Synthesizer .. import chips :(?)

mendesign VCO yang bisa lock di 10MHz-15.5MHz tidak mudah karena range ini cukup lebar.. setelah mencoba dengan beberapa rangkain VCO dengan BJT, MOSFET serta bereksperiment dengan banyak coil, ternyata pemanfaatan IC TTL 74HC04 memberikan hasil yg memuaskan (lihat skema di berikut)

untuk PLL saya menggunakan IC LM7001 ic ini sudah lawas tapi murah meriah dan ternyata saya masih menyimpan beberapa unit ini, mungkin next time saya coba dengan FLL yang di bangun dari ATMega8  (lihat gambar berikut)

IC PLL LM7001 di control oleh Microcontroller ATMega8 melalui 3 pin dengan mode SPI, 3 buat push button menjadi sarana pengaturan frekwensi UP, DOWN, STORE. UP/DOWN menaikan/menurunkan frekwensi 1 KHz, STORE menyimpan di EEPROM frekwensi terakhir. Untuk detil LM7001 dan chip lainnya silahkan di baca/download datasheet nya pada link di akhir tulisan ini.

‘*******************************************************************************
‘ 80M VCO
‘ PLL LM7001
‘ ATMega8
‘ 16×2 LCD
‘ 10MHz IF Freq
‘*******************************************************************************
$regfile = “m8def.dat”
$crystal = 8000000
$swstack = 32
$hwstack = 32
$framesize = 32
Declare Sub Send_command(byval Pmode As Word , Byval Value As Word )
Declare Sub Init_pll
Declare Sub Incr_pll
Declare Sub Decr_pll
Declare Sub Store_pll
Declare Sub Dsp_freq
‘*******************************************************************************
‘ config pin
‘*******************************************************************************
Config Lcdmode = Port
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Config Portd = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Config Pinb.0 = Input
Config Pinb.1 = Input
Config Pinb.2 = Input
Cen Alias Portd.7
Clk Alias Portd.6
Dat Alias Portd.5
‘*******************************************************************************
‘ Variable
‘*******************************************************************************
Dim I As Word
Dim J As Byte
Dim Pmode As Word
Dim Button As Byte
Dim Freq As Word
Dim Efreq As Eram Word At &H10
Dim Sfreq As Word
Dim Dfreq As Word
Dim Sdfreq As String * 5
‘*******************************************************************************
‘ main program
‘*******************************************************************************
Initialization:
   Waitms 100
   Reset Cen
   Reset Clk
   Reset Dat
   Set Portb.0
   Set Portb.1
   Set Portb.2
   Deflcdchar 0 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 32
   Deflcdchar 0 , 31 , 31 , 32 , 17 , 27 , 27 , 31 , 31                         ‘ antenna symb
   Deflcdchar 1 , 31 , 31 , 31 , 30 , 29 , 11 , 23 , 31                         ‘ memory
   Deflcdchar 2 , 14 , 16 , 12 , 2 , 30 , 9 , 9 , 9                             ‘ S/N
   Deflcdchar 4 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 32                         ‘ S1
   Deflcdchar 5 , 32 , 32 , 32 , 32 , 1 , 31 , 31 , 32                          ‘ S2
   Deflcdchar 6 , 32 , 32 , 32 , 7 , 31 , 31 , 31 , 32                          ‘ S3
   Deflcdchar 7 , 1 , 7 , 31 , 31 , 31 , 31 , 31 , 32                           ‘ S4
   Cls : Cursor Off
   Locate 1 , 1 : Lcd “80m RX SSB V1.0 “
   Locate 2 , 1 : Lcd “Jalapindai 2010 “
   Waitms 10
Main:
‘   Pmode = 704
‘   Pmode = 896
   Cls
   Locate 1 , 1 : Lcd ”             KHz”
   Locate 2 , 1 : Lcd ” jalapindai.com “
   Call Init_pll
   Call Dsp_freq
   Do
      Button = Pinb And &H07
      Select Case Button
         Case 3 : Call Store_pll
         Case 5 : Call Decr_pll
         Case 6 : Call Incr_pll
      End Select
   Loop
   Goto Main
 End
‘*******************************************************************************
‘ Init PLL
‘*******************************************************************************
Sub Init_pll
   Freq = Efreq
   If Freq = 65535 Then
      Freq = 10000
   End If
   Call Send_command(704 , Freq)
   Call Dsp_freq
   Locate 1 , 1 : Lcd Chr(1)
   Locate 1 , 2 : Lcd Chr(0)
End Sub
‘*******************************************************************************
‘ Incr_PLL
‘*******************************************************************************
Sub Incr_pll
   Incr Freq
   If Freq > 14500 Then
      Freq = 14500
   End If
   Call Send_command(704 , Freq)
   Call Dsp_freq
   Locate 1 , 1 : Lcd ” “
End Sub
‘*******************************************************************************
‘ Decr_PLL
‘*******************************************************************************
Sub Decr_pll
   Decr Freq
   If Freq < 10000 Then
      Freq = 10000
   End If
   Call Send_command(704 , Freq)
   Call Dsp_freq
   Locate 1 , 1 : Lcd ” “
End Sub
‘*******************************************************************************
‘ Store PLL
‘*******************************************************************************
Sub Store_pll
   If Sfreq <> Freq Then
      Efreq = Freq
      Sfreq = Efreq
   End If
   Locate 1 , 1 : Lcd Chr(1)
   Waitms 50
End Sub
‘*******************************************************************************
‘ Display PLL
‘*******************************************************************************
Sub Dsp_freq
   Dfreq = Freq – 8000
   Sdfreq = Str(dfreq)
   Sdfreq = Format(sdfreq , “0.000”)
   Locate 1 , 8 : Lcd Sdfreq
   Waitms 50
End Sub
 ‘*******************************************************************************
‘ Send Command
‘*******************************************************************************
Sub Send_command(byval Pmode As Word , Byval Value As Word)
   Set Cen
   Waitus 20
‘   Shiftout Dat , Clk , Cmode , 3 , 24 , 10
‘bit 0 to 13 (N value)
   For I = 0 To 13
      If Value.i = 1 Then
         Set Dat
      Else
         Reset Dat
      End If
      Waitus 10
      Set Clk
      Waitus 10
      Reset Clk
      Waitus 10
   Next I
‘bit 14-23 (mode)
   For I = 0 To 9
      If Pmode.i = 1 Then
         Set Dat
      Else
         Reset Dat
      End If
      Waitus 10
      Set Clk
      Waitus 10
      Reset Clk
      Waitus 10
   Next I
   Waitus 20
   Reset Cen
End Sub


Datasheet Link

LM7001
ATMega8
74HC04

47 thoughts on “Low cost & simple wide band VCO, LM7001 + 74HC04

  1. Maaf pak ganggu, mungkin ini ada hubungannya atau tidak dgn artikel anda, tapi saya betul 2 perlu bantuan. Saya punya digital tuner FM(radio) sedang bermasalah, dia tidak bisa terima gelombang stasiun radio radio FM di frekuensi centernya. sbg misal ada stasiun tradio dgn frek. 100.7 Mhz justru pada frek .itu suara tak keluar kalau diatas atau dibawahnya sedikit baru keluar suara tapi suara tidak bagus dan mono pastinya.Apakah ini ada hub. dgn IC LM 7001 yg rusak atau pada rank. demodulator FM-nya yaitu IC IC BA 1332? Mohon petunjuknya. TerimaKasih

  2. IC LM7001 adalah PPL IC yang biasanya bekerja mengendalikan osilator lokal, frekwensi osilator lokal ini di campurkan dengan frekwensi yg di terima dengan selisih 10.7 MHz untuk membentuk frekwensi antara (IF), sedangkan IC BA1332 adalah IC FM detectordan stereo encoder. Untuk masalah anda pastikan dahulu bahwa frekwensi osilator lokal sudah tepat pada + atau – 10.7MHz dari frekwensi yg ingin di tangkap. misalnya untuk menerima 100.7Mhz perlu osilator lokal pada frekwensi 90.0 MHz atau 111.4 MHz, bila ini sudah benar, baru kita pastikan IC decoder nya, periksa di pin 12 BA1332 ada frekwensi 19KHz..

  3. Pingback: 80m SSB Transmitter using MC3362, DDS AD9835 Local Oscillator, 10 MHz Crystal Filter « Diankurniawan's Blog

  4. Numpang baca ya boss,…
    Untuk chassing cuantik buanget beli di mana boss, itu lho alumunium-nya.

  5. Hello,

    Very impressive works, can you send me ATMEGA8 dource or hex code for development if possible?
    73’s de TA2LJ Hakan Guner

  6. Bang Dian beli LM7001 di mana ya and harganya brp?

  7. OM Dian,

    saya tertarik dengan low cost & simpe wide band VCO using LM7001 + &$HC04.

    Buat saya sih tidak perlu lebar. Yang saya butuhkan kestabilan. Saya membuat ararinha untuk 15m band, IF 10 MHz, dengan VFO 11.0-11.45.

    Saya ingin dengan bantuan PLL, saya bisa bermain digital mode.

    apakah ada skema rangkaian detailnya?

    de yc0nho

  8. om…boleh donk dikirim heksa atmega8nya ke email aku…. Mu belajar fm 60-80mhz tp bngung g ad yg ngajarin,,,,,,,,kbetulan aku lewat blogny om….buatku sgt menarik ,,,,,,,,,

    • Terima kasih mas Latif,
      maaf telat menjawab, untuk FM 60-80 sebaiknya pake VCO biasa (bjt/fet) + LM7001 sebagai PLLnya, utk hex nya boleh saya email atau saya upload disini

      Salam
      Dian Kurniawan

  9. Om Dian,apa IC TTL 74HC04 bisa diganti/sama dengan 74HC00 ?

    Trims

    Itok

  10. Salam sejahtera buat Om Dian…..

    Om, saya newbie…dan saya sedang membuat am 80 meter dengan menggunakan pll MC145162P dengan mikrokontroler Atmega8…

    Om, bisa dibantu dikirimkan hex file untuk Atmeg8 tersebut. Saya akan gunakan pada pll 80 meter seperti di blog Om Dian..

    bisa kirim ke email saya ya Om…

    Terimakasih dan saya tunggu balasannya…

  11. pak dian,
    bila ingin bekerja di frek 40m band apa saja yang harus dirubah ya?
    utk osc mungkin di bagian coil 5uh bisa dirubah.
    lalu utk frek kerja nya bagimana pak?
    apakah ada batasan dari program uC nya?
    bagian mana yang harus dirubah ya?

    • Inti rangkaian ini sebenarnya adalah LC osilator dengan memanfaatkan transistor logic didalam IC TTL sebagai penguat umpan balik, yang kemudian di kendalikan oleh IC PLL (LM7001).

      VCO ini saya desain untuk freq kerja 10-14.5MHz, silahkan dipilih frekwensi antara (IF) nya yang sesuai untuk kebutuhan cover 40m, akan tetapi bila menggunakan direct method VCO harus di turunkan frekwensi-nya sesuai dengan band yg diinginkan. Frekwensi resonan tidak dapat melebihi frekwensi kerja IC TTL.

      Program dirancang dengan tujuan yang sama untuk mengendalikan frekwensi VCO dari 10-15MHz dengan step 1KHz. Bila ingin digunakan pada frekwensi lain silahkan modifikasi nilai data yang di kirimkan pada IC PLL (LM7001). Silahkan modifikasi nilai variable Freq pada rutin ini_pll, incr_pll dan dec_pll. Nilai Freq ini bila dikalikan dengan 1000 langsung menunjukkan nilai frekwensi yang dikendalikan.

      semoga bermanfaat

  12. fast response! many thanks..
    pak dian, untuk mengoperasikan uC nya pakai kristal sendiri atau bisa numpang ke kristal pll ya? kalau mau terpisah pakai kristal berapa mhz pak? 8mhz sesuai program(cmiiw) atau bisa pakai 16mhz? saya ada beberapa kristal bekas 16 dan 12mhz.
    thanks,

  13. Met malam mas, mas dian mau tanya kalau nilai ini apa yah? 65535 freq kah? rumusnya seperti apa? makasih sebelumnya..

    • 65535 atau hexa nya FFFF adalah nilai default blank eeprom (16 bit), maksudnya kalau eeprom nya belum pernah save satu nilai pun (blank) maka pada saat restart akan masuk ke freq 10000

      • Terima kasih mas dian atas jawabanya! oh iya kalo mau tanya lagi code ini untuk merubah freq 88-108Mhz bisa gak mas? terus apa yang di rubah pada source code ini? maf yah mas sebelumnya banyak tanya. jadi saya punya tuner FM tapi pengen dikendalikan pakai PLL.

      • oh iya mas dian punya source codenya gak? terima kasih

      • source code ada diatas tinggal di sesuaikan nilai nya saja, utk FM sesuaikan dengan frekwensi IF dan sesuaikan step nya, tapi untuk mudahnya lihat database nya dulu jadi faham untuk mengubah source code nya

  14. om Dian, output RFdari pll ini yang diumpankan ke exiter SSB di bagian mana ya om??? maaf agak oot ni,…

  15. Pak sorcodenya di komplie kok error seperti ini kesalahan dimana ya mas : Error : 242 Line : 140 Source variable does not match the target variable [ 0|DFREQ – 8000] , in File : D:\2TOI\PLL dg Atmega 8\PLL.bas

  16. Pak, itu kalau mau ngasih indikator Locked/Unlocked nya dimana ya?
    trimakasih

  17. maaf om program yang di pakai untuk compile menggunakan software apa ya? terimakasih

  18. Bagus x homebrew nya klau buat 7.000-11.000 Mhz .buat ngebrik 7 ama 11 bisa kang.kira 2 brapa? Aditia hp.08994811333

  19. OM dian, bisakah lm7001 nya diganti dengan lc72131 ? apa ada yang perlu dirubah dari coding diatas ? terimakasih

  20. Salam kenal om dian setelah sekian lama saya cari blog yang saya cari ahirnya ketemu juga disini .saya sangat tertarik sekali dan ingin mencoba bikin pll yang mungkin bisa saya aplikasikan pada tuner fm yang range frekwensinya 70-110mhz.kalo berkenan saya minta bantuan file hexnya dikirim ke emailku afixnet12@gmail.com.terimakasih

  21. Salam kenal pak dian kurniawan blognya sangat menarik .saya ingin mencoba bikin pll seperti diatas akan saya aplikasikan buat tuning tuner fm.range frek 70-110mhz terus yg saya mau tanyakan apa aja yang perlu rubah.dan kalo bisa saya minta bantuan file hexnya bisa dikirim ke afixnet12@gmail.com terimakasih

  22. Artikel yang sangat menarik…
    maaf om boleh tanya ya :

    1. pmode = 704 atau pmode = 896 , angka pmode tsb diperoleh dari mana ya?

    2. pada perintah : If Value.i = 1 , penjelasannya gimana ya?

    maaf pertanyaan orang baru belajar om, terima kasih banyak….

Leave a reply to diankurniawan Cancel reply