Gönderen Konu: Ardunio Nano- si5351  (Okunma sayısı 2417 defa)

Çevrimdışı TA3IHD

Ardunio Nano- si5351
« : 23 Aralık 2017, 11:05:52 »
Yazı biraz uzun, ancak, evde HF alıcı-verici QRP yapan arkadaşların sonuna kadar okumasını tavsiye ederim.
Sorumu hemen sorayım:

**1- Ardunio programlanıyormu?
**2-(Bence elbette programlanıyor) Nasıl?  pic enegreleri için malum bir aparatımız var, bundada böylebir aparatmı var, yoksa doğrudan bilgisayaramı bağlanıyor.
**3- Veya benim bilmediğim başka bir metot mu var?
 
Arkadaşlar, henüz ardunio'yu kavrayamadım, ancak bir programlanabilir "control unit" olduğunu düşünüyorum.

Tıpkı DDS de kullandığımız pic16F84  veya 16F628  gibi.  Bu entegreleri programlayıp DDS e kumanda edip, DDS in ürettiği VFO sinyalini program dahilinde istediğimiz gibi değiştirebildiğimiz gibi.

Tıpkı bunun gibi, programlanabilir "pic" entegreler yerine sanırım "Ardunio" ları  kullanıyoruz. Bunlarıda programlıyoruz.

Yukarıda yazdığım girişten sonra aşağıda paylaştığım "ardunio- si5351" ikilisinin, kullandığımız "ad9850 DDS" inden daha kapsamlı olduğunu gördüm.
Şöyle: Bu ikili aynı anda ve birbirinden bağımsız hem VFO sinyali, hem BFO sinyali üretiyor, bu BFO sinyalini değiştirebildiğimiz gibi LSB,USB,CW, AM modlarına ayarlayabiliyoruz. LU5DJV nin devresinde her ne kadar ekranda LSB-USB-CW görünsede sadece ekran görüntüsü olarak kalıyor.
Burada ise VFO ve BFO birbirinden tamamen bağımsız üretiliyor ve kumanda ediliyor.
Söz konusu internet adresinde detaylı bilgiler  verilmiş. Ardunio Nano ve si5351 ikilisi oldukça basit ve ucuz görünüyor.
Ardunio'nun programıda mevcut.  cevap ve görüşlerinizi bekliyorum. 73

https://vk3hn.wordpress.com/2017/02/02/arduino-and-si5351-dds-vfobfo/

Çevrimdışı TA3ALS

Ynt: Ardunio Nano- si5351
« Yanıtla #1 : 23 Aralık 2017, 13:17:12 »
Kullanımda en önemli olan şey programın işlevselliği.
 Si5351a birbirinden bağımsız üç adet çıkışı var, kare dalga üretiyor ve diyot mikserleri doğrudan sürecek kadar güçlü. Bu bir avantaj, zira kaliteli alıcıların girişinde mutlaka yüksek seviyeli, diyot yada fet ile yapılmış pasif mikser kullanmak gerekiyor.
Ben ut5qbc tarafından tasarlanmış olan sentezleyicinin ver.4 sürümünden iki adet yaptım. en sıkıntılı yanı zor lehimlenmesi. çünkü havya ile lehimlerken kolayca bozulabiliyor.
değerlendirmelerim burada;
http://www.telsizciler.org/index.php/topic,37546.msg128280.html#msg128280
Selamlar...



Çevrimdışı TA1JA

Ynt: Ardunio Nano- si5351
« Yanıtla #2 : 23 Aralık 2017, 13:47:53 »
Hulusi Bey,

Arduino modelleri, üzerinde genellikle Atmel mikrokontrolcü bulunduran kartlardır. Üretimde mikrokontrolcüye bootloader yüklenmiş olduğundan,
modeline göre seri port veya usb üzerinden programlayabilirsiniz. Bazı modellerinde (mini pro gibi) usb/ttl devresi olmadığından, yine piyasada bulunan usb-ttl çeviriciler ile seri port üzerinden programlayabilirsiniz.

aşağıdaki linkten arduino IDE'yi indirip kurmanız ve ayarlardan, seri port ve kullandığınız modeli seçmeniz, program yüklemek için yeterlidir.

https://www.arduino.cc/en/Main/Software

73

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #3 : 12 Ocak 2018, 14:34:20 »
arkadaşlar, resimlerde "arduino nano"  ve  "si5351"  ikilisini aldım.
Arduino programını kurdum "RESİMDE" görülen görüntüde, program görüntüsünde, görüntünün  sol üstünde 5 adet kutucuk var, en soldaki, ok aşağı kutucuğu tıklayınca program yüklendi görünüyor. DOĞRUMUDUR? YÜKLEME BÖYLE Mİ OLUYOR?

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #4 : 12 Ocak 2018, 14:35:57 »
.

Çevrimdışı TA1JA

Ynt: Ardunio Nano- si5351
« Yanıtla #5 : 12 Ocak 2018, 17:07:11 »

sol taraftan 2.butona basacaksınız. (sağa ok)
Menüden, Sketch/upload komutunu  veya CTRL + U kısayolunu kullanabilirsiniz.

Aşağıda (resimde uploading yazan yerde) "yükleniyor..." yazacak, bittiğinde de "yüklendi" yazacak. (bendeki windows ingilizce olduğundan, bundan tam emin değilim)
Ama alttaki alanda kırmızı bir yazı görmemeniz lazım.


Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #6 : 12 Ocak 2018, 22:22:14 »
Murat bey, malesef aynı işlemi yapınca "karta yüklenirken sorun oluştu" ibaresi çıkıyor. Resimdeki gibi.

Birde yine araçlar menüsünde  port yazıyor, ancak port yazısı silik çıkıyor. yani arduino nun bağlıolduğu portu göremiyormuyuz acaba?
Hangi porta bağlı olduğunu nasıl görürüzacaba?

Çevrimdışı TA2NC

Ynt: Ardunio Nano- si5351
« Yanıtla #7 : 12 Ocak 2018, 22:37:12 »
Araclar ports kismina geldiginizde mevcut com portlar icinde arduino'nun bagli oldugunu gormeniz lazim
com yazisi silik ise ornegin herhangi bir baglanti olmayan com portu secilmistir programinizda. dogru com portu secin.

ayrica  board (bendeki ingilizce) kismindan dogru model arduino'nun da secili oldugundan emin olun..

Çevrimdışı TA1JA

Ynt: Ardunio Nano- si5351
« Yanıtla #8 : 13 Ocak 2018, 00:39:58 »
Donatililarda seri port sekmesinden portu gorebilirsiniz. Tabi nano'yu taktiginizda surucusu dogru olarak yuklenmis ise. Genelde otomatik yuklenir ancak yuklenmemisse arduino/driver klasorunu gostererek elle yukleyebilirsiniz.
Oguzhan beyin de soyledigi gibi, arduinodan da, model ve port secmelisiniz.

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #9 : 14 Ocak 2018, 13:02:25 »
Arduino programının yükledikten sonra si5351 için  hazırlanmış softwair'i  arduino program sayfasına kopyeledim.
sonra sayfadan arduino nano'yu seçtim, ancak port kısmı silik olduğu için port seçme imkanı yok.
Sonra arduino cihazını USB lerden birine taktım. ancak hani bellek tekarsın, "yükleniyor" yazar, bir süre sonra yüklenir ve bellek çalışmaya başlar ya, bunda öyle bir hareket yok. yalnız, takınca kırmızı led yanıyor. cihaz fabrikasyon aluminyum statik koruyucu tam kapalı paketinde geldi, yırtarak ben açtım ve her işlemde vücudumdaki statik elektriği boşalttım. 
Com1 görünmüyor, yükleme hatası demeye devam ediyor.
yıllardır Pic entegreye program yüklüyorum. Ancak bu olmadı.  Herhalde ardunio'yu müzelik saklayacağız. İnternettende yeterli veri bulamadım. Herhalde insanlar hemen yükleyebiliyor.

Acaba yapmam gereken başka bir şey varmı?

Çevrimdışı TA2NC

Ynt: Ardunio Nano- si5351
« Yanıtla #10 : 14 Ocak 2018, 13:14:24 »
Programi acmadan once arduino yu baglamaniz gerekiyordu.
Boylece arduino driverini kurar ve arduino programini acmadan bilgisayarin comport kisminda gormeniz gerekirdi.

En kotu ihtimal bilgisayrinizin donanim kimsini acip oradan elle arduino driverini yuklemeniz.
orasi saglikli calistiktan sonra yazilim kismina gecin.


Çevrimdışı TA4EM

Ynt: Ardunio Nano- si5351
« Yanıtla #11 : 14 Ocak 2018, 21:43:01 »
Merhabalar,
Arkadaşlar bu arduino konusu ile bende ilgileniyorum.Bu amacla bir iki devre yapmaya çalıştım.Zaten devrelerin elektronik kısımları zor değil,çünkü arduino kartlarını kullanıyoruz.Ancak kodları yüklerken çok güçlüklerle karşılaştım.Proje sahipleri devre yanında kodlarını da veriyorlar.Hatalımı değilmi bilmiyorum yüklemede sorun çıkıyor.Arduino ile ilgili işlemleride bu arada öğrenmiş olduk herşeyi tam yapıyorum malesef hata alıyorum.Örneklemek gerekirse,Ja2gqp ve ja2nkd japon amatörlerin devreleri var ve ciddi amatörler bunların nano ile yapılmış tft gerek si5351 li gerekse ad9850 li dds vfo lu porojeleri var ama iş kodlamaya gelince fiyasko.çok denedim hata yapma durumunun az olduğunu düşünüyoruM.Bazı daha basit uygulamalarda aynı yöntemi yapıyorum problem çıkmıyor.Anlamış değilim.Proje sahiplerinin kritik bazi manüplasyonları mı var diye düşünmekten kendimi alamıyorum.Selamlar.e.çiçek
Özgürlük ve bağımsızlık benim karakterimdir
M.Kemal ATATÜRK

Çevrimdışı TA2GC

Ynt: Ardunio Nano- si5351
« Yanıtla #12 : 15 Ocak 2018, 00:53:47 »
@Ekrem Çiçek
 sırf bu yüzden üzülüp sinirlenmemek için Arduino'ya bulaşmadım,99 yılından beri Mikrochip PIC ile haşır neşirim tek bir sıkıntım olmadı,Help dosyası aşama aşama gayet açık bir dille anlatıyor.dünya forum gezdim sorunlar ile ilgili tek ana soru göze çarpıyor, ilk soru paraya kıyıp orijinalmi aldın yoksa saç baş yolduran klonmu diye....

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #13 : 15 Ocak 2018, 00:54:22 »
Bilgisayarım; Yönet; Aygıt yöneticisi; USB leri Kaldır... seçeneklerinden bütün USB leri kaldırdım, laptopu kapatıp açınca tekrar kuruldular.  maus, bellek v.s. tekrar tanıdılar, ARDUINO yuda taktım, onuda tanımaya çalıştı ve "sürücü bulunamadı" dedi.

Eğer klondan kaynaklı ise, ben 100tl verip almaktansa pic16F628  veya 84 lere 2,5tl verip devam etmeyi tercih ederim.
« Son Düzenleme: 15 Ocak 2018, 00:57:14 Gönderen: TA3IHD »

Çevrimdışı TA2NC

Ynt: Ardunio Nano- si5351
« Yanıtla #14 : 15 Ocak 2018, 08:43:15 »
Once driveri kaldirin daha once dediginiz gibi.
daha sonra https://www.arduino.cc/en/Guide/Windows adresinden arduino yazilimini tekrar kurun restart yapin.
Sonrasinda arduinoyu takin.

Bende hic orjinal arduino yok. Hepsi aliexpress cin mali

Bir kere bile klon olusundan kaynakli hicbir sorun yasamadim.


Hicbir projede de kopyalama calistirma asamasinda bir sorunla karsilasmadim.
Kesinlikle pic vs den cok daha kolay bir cihaz oldugunu dusunuyorum.



Çevrimdışı TA1JA

Ynt: Ardunio Nano- si5351
« Yanıtla #15 : 15 Ocak 2018, 10:25:34 »
@Hulusi Bey,

Arduino sürücüsü genelde otomatik olarak yüklenir.
işletim sistemi, önceki sürücüler, çakışmalar vs. nedeniyle yüklenemediği zamanlar olabilir.

Arduinoyu takın, "sürücü yüklenemedi" yazısını gördüğünüzde;

Donatıları açın, aygıt yöneticisinde başında sarı ünlem bulunan yazıya sağ tıklayarak, "sürücüyü güncelle" yi seçin. Çıkan menüde, alttaki seçimi (manuel yükleme)
seçerek, arduino'yu yüklediğiniz klasör içindeki "driver" klasörünü seçin.

Bunları yaparken arduino'ya başka bir donanım bağlı olmasın.
Gerekirse başka bir usb kablo ile tekrar deneyin.


@Ekrem Bey,
Yüklemek istediğiniz örnekler (özellikle karmaşık olanlar) birden fazla yazılım kütüphanesi kullanıyor olabilir. Şayet bunlar arduino'nun standart kütüphanesinde bulunmuyorsa, sizin ayrıca yüklemeniz/tanıtmanız gerekir. Genelde, spesifik dosyalar projenin içine eklenir ama bazı dosyalar da, arduino ide'si üzerinden, kurulumdan sonra, isteğe bağlı olarak indirilebilir durumdadır.
Örneğin Arduino'nun si5351 için yazılmış bir kütüphanesi varmış ancak bunu ayrıca indirip kurmanız gerekir.

Programı arduino ide'sinde açıp verify veya upload butonuna bastığınızda, çıkan kırmızı hata kodları size neyin eksik olduğunu söyleyecektir.

PIC/Arduino kıyaslaması yanlış olur.


« Son Düzenleme: 15 Ocak 2018, 10:27:45 Gönderen: TA1MRT »

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #16 : 15 Ocak 2018, 19:26:10 »
Oğuzhan ve Murat kardeşlerim, 

Büyük uğraşlarım sonunda arduino yu laptopa tanıttım şöyle: 
İngilizce olarak ardunioyu tanıtamadığımı yazdım, karşıma pek çok sayfa açıldı
Ancak dikkatimi bir sayfa çekti o sayfada USB bağlantı çipinin CH340G olduğu ve bunun driverinin yüklenmesi gerektiği yazılıyordu.
Hemen Driveri yükledim ve arduine yüklendi.
Cihaz şimdi arduino'yu tanıyor.

Ancak arduino programı hala arduino cihazını yüklemiyor.
yani, laptop tanıyor,  program tanımıyor.
Laptopun tanıdığı Arduino yu  Arduino software programına nasıl tanıtırım?

Şöylemi yapmalıyım: Arduino programını kaldırıp sonra tekrar kurup sonra arduinoyu USB ye takıp aynı anda tanımalarınımı sağlamalıyım ?

Az kaldı eminim bu işi başaracağım.

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #17 : 15 Ocak 2018, 19:38:38 »
Programı kurcalarken, Biraz önce silik olan PORT koyulaştı, baktım, COM5 yazıyor, hemen programı yüklemek için tıkladım..... veee yüklendi.

********Bir başka sorum daha var:  Arduino ya yüklediğimiz programı silip bir başka program yükleyebilirmiyiz?
Öyle ise nasıl sileceğiz?
   
     Not1: Programın ArduinoYu tanıması şöyle oldu: Taslaklardan" library ekle" seçeneğinden birini seçeyim bakalım ne olacak dedim, bir seçenek tıkladım ve o zaman port açıldı. Sonra kendi programımı kopyaldım ve onu yükledim. acaba dışarıdan bir program çalışırmı???? Bu seçenek "liquid crystal" seçeneği. İlk başta duruyor.
     
     Not2:::: Bu arada  Arduino devamlı statik elektrik önleyen aluminyum paketinin içinde!
« Son Düzenleme: 15 Ocak 2018, 19:50:01 Gönderen: TA3IHD »

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #18 : 16 Ocak 2018, 03:44:33 »
Ekran resmini çektim.

Ancak kendi kütüphanesinden "liquid crystal" i seçtim, sonra altına si5351 in prokramını yapıştırdım. Sanırım yapıştırmak olmuyor. bu programı kütüphaneye eklemek gerekiyor, benim yüklediğim herhalde kendi kütüphanesinden seçtiğim liquid crystal seçeneği.

Programı kütüphaneye eklemenin nasıl yapılacağını biraz deteylı anlatabilirmisiniz?
« Son Düzenleme: 16 Ocak 2018, 03:54:31 Gönderen: TA3IHD »

Çevrimdışı TA3IHD

Ynt: Ardunio Nano- si5351
« Yanıtla #19 : 16 Ocak 2018, 07:30:16 »
İki adet "Adafruit si5351 Library" buldum, ancakbunlar kısa,
Birde bunların 20-30 kat büyüğü programlar buldum.
Bu library programa yüklendiğinde sayfanın üstünde programın adı olan si5351 yazıyor,
ancak sürükleyip yapıştırdığım yada kendi file open seçeneğini kullanarak yüklediğim programlarda cihaza yüklenirmi acaba?
https://www.arduinolibraries.info/libraries/adafruit-si5351-library
 
ÖRNEK:  BU BİR ARDUİNO PROGRAMIMI? ( si5351 için yazılmış)

/*! \mainpage si5351 3-band VFO
 *
 * This sketch implements a three band VFO using the SI5351a
 * breakout board from Etherkit.
 *  Features include:
 *  - Operation on a single frequency at a time, push button selected
 *  - Frequency adjustment by rotary encoder. Rate of adjustment is
 *    push button adjustable in 10 to 10000 Hz increments.
 *  - Individual VFOs can be toggled on/off line by a long press of
 *    the selection button.
 *  - All VFOs can be toggled off at once by a long press on the
 *    the frequency increment button.
 *  - OLED display shows currently selected VFO, VFO status, VFO
 *    frequency. The display header is customizable, and shows
 *    current frequency increment.
 *  - Choose your favorite band and frequencies as default start up
 *    values.
 */
 
/**
 * @file
 * @author  Mike Aiello N2HTT <n2htt@arrl.net>
 * @version 1.3
 *
 * @section LICENSE
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details at
 * http://www.gnu.org/copyleft/gpl.html
 *
 * @section DESCRIPTION
 *
 * This sketch implements a three band VFO using the SI5351a
 * breakout board from Etherkit. It should run on any AT328
 * Arduino. Required resources are:
 *  - 32k program memory
 *  - 1k variable space
 *  - 2 pins supporting external hardware interrupts
 *  - 2 digital input pins
 *  - I2C bus support for SI5351 and an OLED 128x64 pixel display (0.96")
 *
 * The prototype was tested on:
 *  - Arduino Mega 2560 & Uno R3
 *  - Etherkit SI5351a breakout board
 *  - Bournes mechanical encoder, 24 ppr with momentary contact switch
 *  - SPST momentary pushbutton switch
 *  - SDD1306 I2C OLED display
 *  - 20x4 line LCD with I2C adapter
 *
 * The macros immediately following this description configure all the
 * hardware options for the VFO. Configurable items include:
 *  - Hardware pin assignments
 *  - VFO frequency settings
 *  - Number of VFOs
 *  - Whether to display a heading line
 *  - Range of frequency increments
 *  - Other timing parameters
 *
 * See the include files for other configurable parameters.
 *
 * Libraries used in this sketch are:
 *  - Google U8glib    - interface for the SDD1306 I2C OLED display. This is
 *                       not supplied, but is available here:
 *                       https://code.google.com/p/u8glib/
 *
 *  - F Malpartida
 *    LiquidCrystal_I2C- interface for the 20x4 LCD display with I2C. This is
 *                       not supplied, but is available here:
 *                       https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
 *
 *  - Etherkit SI5351  - interface for the SI5351a clock chip,
 *                       not supplied but available here:
 *                       https://github.com/etherkit/Si5351Arduino
 *
 * Two object wrappers are supplied for the display, and
 * the SI5351. Each wrapper is constructed with a generic
 * abstract base class that defines the methods used by the sketch,
 * and then a hardware specific class that uses the appropriate third
 * party library to implement the methods.
 * This architecture will make it easier to adapt the sketch to use
 * other harware or libraries in the future. The wrappers classes are:
 *
 * Base class       Implementation class(es)
 * VFODefinition    si5351_VFODefinition
 * VFODisplay       SSD1306_U8glib_VFODisplay
 *                  LCD2004_LCDLib_VFODisplay
 *
 * Some notes about program structure:
 * 1. I would have normally included the hardware specific library
 *    includes in the include files containing the hardware specific
 *    classes, but the Arduino IDE did not find them when I did. For
 *    that reason you will see them below in this file, above the local
 *    includes for hardware specific classes.
 * 2. The include files FrequencySelection.h and DeviceInitializations.h
 *    contain sections of in-line c++ code that I moved to separate
 *    files for better readability. Using the include mechanism allows
 *    inserting this code in the main sketch in the proper sequence.
 * 3. The embedded comment blocks in all of the files of this sketch
 *    are compatible with documentation generators like javadoc
 *    and doxygen.
 */
 
/**
 * Uncomment the two lines below to use the LiquidCrystal library
 * with the 20 x 4 LCD display. If these are uncommented, be sure
 * that the lines for the SSD106 display are commented out
 */
//#define USE_LIQUIDCRYSTAL_LIBRARY
//#define USE_LCD_20X4_DISPLAY

/**
  * Uncomment the two lines below to use the U8Glib library
  * with the SSD1306 28x64 OLED display. If these are uncommented,
  * be sure that the lines for the 20 x 4 LCD display are commented out
  */
#define USE_U8GLIB_LIBRARY
#define USE_SSD1306_128X64_DISPLAY

 /**
  * The U8glib trades off speed of display refresh for the amount of
  * SRAM used by the page buffers. If you are tight on space in your
  * sketch, uncomment the line below to use the smaller, but slower
  * page buffer.
 */
//#define USE_SMALLER_SSD1306_128X64_BUFFER

#include <Wire.h>
#include <SPI.h>

#include <si5351.h>

#ifdef USE_U8GLIB_LIBRARY
#include <U8glib.h>
#endif

#ifdef USE_LIQUIDCRYSTAL_LIBRARY
#include <LiquidCrystal_I2C.h>
#endif

/**
 * Pared-down implementation of DigitalPin/DigitalPulse
 * Uncomment the definition of the macro USE_SIMPLE_DIGITAL_PIN
 * below to use a non-library, local implementation of the
 * DigitalPin and DigitalPulse classes.
 *
 * The local versions of these classes have all unused
 * functionality removed, yielding the minimum flash memory
 * size.
 */
#include "SimpleDigitalInputPin.h"
#include "SimpleDigitalPulse.h"
#define INPUT_PIN_TYPE SimpleDigitalInputPin

#include "si5351_VFODefinition.h"

#ifdef USE_U8GLIB_LIBRARY
   #ifdef USE_SSD1306_128X64_DISPLAY
      #include "SSD1306_U8GLIB_VFODisplay.h"
   #endif
#endif

#ifdef USE_LIQUIDCRYSTAL_LIBRARY
   #ifdef USE_LCD_20X4_DISPLAY
      #include "LCD2004_LCDLIB_VFODisplay.h"
   #endif
#endif

/**
 * The following two lines control whether a heading
 * line is shown on the display. Uncomment the
 * setting you want. The no heading display is
 * intended primarily for 2 line LCD displays
 */
//#define DISPLAY_HEADER_LINE      NO_HEADING
#define DISPLAY_HEADER_LINE    SHOW_HEADING

/**
 * hardware pin definitions
 */
#define ENCODER_PIN_A                     2
#define ENCODER_PIN_B                     3
#define VFO_SELECTOR_PIN                  4
#define FRQ_DELTA_SELECTOR_PIN            5

/**
 * frequency change constants
 */
#define FREQ_DELTA_DEFAULT              100
#define FREQ_DELTA_MAX                10000
#define FREQ_DELTA_MIN                   10
#define FREQ_DELTA_MULT                  10

/**
 * The following two lines control how many
 * VFOs the sketch will control - maximum 3.
 * You can reduce the number of VFOs if you are
 * using a display with fewer than 3 lines
 */
#define NUMBER_OF_VFOS                    3
#define STARTING_VFO                      1

/**
 * vfo frequency limits
 */
#define FREQ_VFO_A_DEFAULT          3560000
#define FREQ_VFO_A_MIN              3500000
#define FREQ_VFO_A_MAX              4000000

#define FREQ_VFO_B_DEFAULT          7055000
#define FREQ_VFO_B_MIN              7000000
#define FREQ_VFO_B_MAX              7300000

#define FREQ_VFO_C_DEFAULT         10120000
#define FREQ_VFO_C_MIN             10100000
#define FREQ_VFO_C_MAX             10150000

/**
 * delay times
 */
#define BUTTON_DEBOUNCE_WAIT_MILS         5
#define SETUP_DELAY_MILS                  5
#define LOOP_DELAY_MILS                  20
#define FREQ_DELTA_LATENCY_MILS         900

/**
 * Si5351 clock board object
 */
Si5351 si5351;

/**
 * vfo list and variables controlling frequency
 */
VFODefinition *vfoList[NUMBER_OF_VFOS];

short currVFO;
VFODefinition *pCurrentVFO;
short freq_delta_display_time;
unsigned long frequency_delta;

/**
 * display object
 */
VFODisplay *pDisplay;

/**
 * digital pins (reading button presses)
 */
INPUT_PIN_TYPE VFOSelectPin( VFO_SELECTOR_PIN
                                , INPUT_PULLUP
                                , BUTTON_DEBOUNCE_WAIT_MILS
                                , DIGITAL_PIN_INIT_STATE_HIGH
                                , DIGITAL_PIN_INVERTING);

INPUT_PIN_TYPE FrequencyDeltaSelectPin( FRQ_DELTA_SELECTOR_PIN
                                       , INPUT_PULLUP
                                       , BUTTON_DEBOUNCE_WAIT_MILS
                                       , DIGITAL_PIN_INIT_STATE_HIGH
                                       , DIGITAL_PIN_INVERTING);


/**
 * handler code for frequency selection via rotary encoder
 */
#include "FrequencySelection.h"

/**
 * initialization code for hardware devices
 */
#include "DeviceInitializations.h"

/**
 * sketch setup
 */
void setup()   {
   // initialize serial port at a relatively languid rate               
   Serial.begin(9600);
   
   // initialize digital input pins for button presses               
   setupInputPins();
   
   // setup encoder for frequency adjustments               
   setupEncoder();
   
   // initialize vfo list               
   setupVFOs();
   
   // light up display               
   setupDisplay();   
   
   // turn on vfos               
   setupSI5351();   

   delay(SETUP_DELAY_MILS);
}

/**
 * operating loop
 */
void loop() {
   // selecting output vfo is first priority
   if (VFOSelectPin.readInputPulseMode()) {
      int mode = VFOSelectPin.getCurrentPinMode();
      switch (mode) {
         case PIN_MODE_SHORT_PULSE:
            // short pulse - switch to next vfoList
            // - turn off current clock
            pCurrentVFO->stop();
           
            // increment the selected vfoList
            currVFO = (++currVFO) % NUMBER_OF_VFOS;
            pCurrentVFO = vfoList[currVFO];
           
            // turn on new clock if not disabled
            pCurrentVFO->start();
 
            // repaint the vfoList display
            pDisplay->showVFOs(frequency_delta, currVFO);

            // reset pin
            VFOSelectPin.setCurrentPinMode(PIN_MODE_IDLE);
            break;

         case PIN_MODE_LONG_PULSE:
            // long pulse - toggle vfoList enable flag
            pCurrentVFO->toggleEnabled();
           
            // turn on new clock if not disabled
            pCurrentVFO->start();

            // repaint the vfoList display
            pDisplay->showVFOs(frequency_delta, currVFO);

            // reset pin
            VFOSelectPin.setCurrentPinMode(PIN_MODE_IDLE);
            break;
      }
   }

   // then we can check to see if frequency delta needs to change
   if (FrequencyDeltaSelectPin.readInputPulseMode()) {
      int mode = FrequencyDeltaSelectPin.getCurrentPinMode();
      switch (mode) {
         case PIN_MODE_SHORT_PULSE:
            // short pulse - change frequency delta
            if (frequency_delta < FREQ_DELTA_MAX) {
               frequency_delta *= FREQ_DELTA_MULT;
            }
            else {
               frequency_delta = FREQ_DELTA_MIN;
            }

            // take over display to show new frequency delta
            pDisplay->showFreqDeltaDisplay(frequency_delta);
            freq_delta_display_time = FREQ_DELTA_LATENCY_MILS;

            // reset pin
            FrequencyDeltaSelectPin.setCurrentPinMode(PIN_MODE_IDLE);
            break;

         case PIN_MODE_LONG_PULSE:
            // long pulse - disable all VFOs
           
            for (int ii=0; ii<NUMBER_OF_VFOS; ++ii) {
               // set band enable flag off
               vfoList[ii]->setEnabled(false);
           
               // - turn off current clock
               vfoList[ii]->stop();
            }

            // repaint the vfoList display
            pDisplay->showVFOs(frequency_delta, currVFO);
           
            // reset pin
            FrequencyDeltaSelectPin.setCurrentPinMode(PIN_MODE_IDLE);
            break;
      }
   }
 
   // check to see if freq delta display needs to be overwritten
   if (freq_delta_display_time > 0) {
      // update the display time for the vfoList select pin
      freq_delta_display_time = (freq_delta_display_time > LOOP_DELAY_MILS)
                              ? (freq_delta_display_time -= LOOP_DELAY_MILS)
                              : 0;

      // repaint the vfoList display if freq display time exhausted
      if (freq_delta_display_time <= 0) {
         pDisplay->showVFOs(frequency_delta, currVFO);
      }
   }
 
   // re-display frequencies if encoder has made changes
   if (updateSelectedFrequencyValue()) {
      pDisplay->showVFOs(frequency_delta, currVFO);
   }
   
   delay(LOOP_DELAY_MILS);
}

    © 2018 GitHub, Inc.
    Terms
    Privacy
    Security
    Status
    H
« Son Düzenleme: 16 Ocak 2018, 07:42:05 Gönderen: TA3IHD »