|
本人的Pro-405 寬頻接收機(jī)部分按鍵無(wú)效,顯示看不清楚,出差改了這個(gè)程序,29-54/87.3-107.9/137-174/380-512MHz 基本步進(jìn)均為12.5kHz,可選50/100kHz,有W/NFM切換控制,未做波段控制。29-54可接電視高頻頭中頻,87.3-107.9可有可無(wú),音質(zhì)一般,380-512本地還能收到幾套模擬伴音,歡迎各位改進(jìn)。
MB1501_Scanner.ino 副本(2)V0.1直接計(jì)算參數(shù),副本采用遞加遞減,仿真長(zhǎng)按F+,發(fā)送間隔均為111ms,主要取決于按鍵延時(shí)100ms。V0.2按鍵延時(shí)可變,仿真長(zhǎng)按F+,發(fā)送間隔約為21ms。
Arduino無(wú)法直接輸入中文,有簡(jiǎn)單英文說(shuō)明,引用部分保留日文注釋。
Pro-405.xls為相關(guān)參數(shù)計(jì)算,其中380MHz 4F應(yīng)為50,難道是WPS的問(wèn)題?
MB1501仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (12.27 KB, 下載次數(shù): 88)
下載附件
2018-11-25 16:05 上傳
0.png (20.31 KB, 下載次數(shù): 77)
下載附件
2018-11-25 16:04 上傳
MB1501引腳圖與管腳功能定義:
0.png (46.1 KB, 下載次數(shù): 76)
下載附件
2018-11-25 16:06 上傳
0.png (116.13 KB, 下載次數(shù): 74)
下載附件
2018-11-25 16:06 上傳
MB1501的arduino源程序如下:
- /*
- QRP 2m FM Transceiver Project with BS2 shiftout any bits
- modify by learning 2016.11 V0.2 fast scan */
- //RadioShack Pro-405 29-54/87.3-107.9/137-174/380-512MHz with 12.5kHz steps
- #include<stdlib.h>
- #include <LiquidCrystal.h>
- LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
- int buttonpin = A3;
- int audiopin = A2;
- const int PLL_data = 8 ;
- const int PLL_clock = 9 ;
- const int PLL_LE = 10 ;
- //unsigned int R_up = 0x84 ; //M=64 R=512
- unsigned int R_up = 0x88 ; //M=64 R=1024
- unsigned int R_low = 0x01 ;
- unsigned int N_up = 0;
- unsigned int N_low;
- unsigned int A_0; //A0 A' can't be used
- unsigned int A;
- int T = 100;
- char* audiotext[]={
- "NFM", "WFM"};
- int audio = 0;
- long freqbandarray[] = {
- 873000, 290000, 1370000, 3800000};//0.1kHz
- char* bandtext[]={
- "FM", "VL", "VH", "U"};
- int band = 1;
- long stepsizearray[] = {
- 125 ,500 ,1000 ,80000};//0.1kHz
- char* stepsizetext[]={
- "12.5 kHz", "50 kHz", "100 kHz", "8 MHz"};
- int stepsize = 0;
- int button;
- int buttondelay = 0;
- int menuoption = 0;
- void pll_set_frequency(long pllfreq) {
- if (band == 0 || band == 1) {
- N_low=((pllfreq+107000)/8000);
- A=(freqbandarray[band]+107000)/125%64;
- }
- if (band == 2 ) {
- N_low=((pllfreq-107000)/8000);
- A=(freqbandarray[band]-107000)/125%64;
- }
- if (band == 3) {
- N_up=highByte((pllfreq-107000)/8000);
- N_low=lowByte ((pllfreq-107000)/8000);
- A=(freqbandarray[band]-107000)/125%64;
- }
- A_0 = A << 1;
- //M,Rを設(shè)定
- digitalWrite(PLL_LE, LOW);
- // シフト演算を使ってデータを送信する
- shiftOut(PLL_data, PLL_clock, MSBFIRST, R_up);
- shiftOut(PLL_data, PLL_clock, MSBFIRST, R_low);
- digitalWrite(PLL_LE, HIGH);
- //N,Aを設(shè)定
- digitalWrite(PLL_LE, LOW);
- // シフト演算を使ってデータを送信する
- shiftOut(PLL_data, PLL_clock, MSBFIRST, N_up);
- shiftOut(PLL_data, PLL_clock, MSBFIRST, N_low);
- shiftOut(PLL_data, PLL_clock, MSBFIRST, A_0);
- digitalWrite(PLL_LE, HIGH);
- }
- void readbuttons(){
- int pinread = analogRead(buttonpin);
- if (pinread > 90 && pinread < 120) { //1k 1k2
- buttondelay ++;
- if (buttondelay == 2) button = 0;//M-
- else button = -1;
- }
- if (pinread > 190 && pinread < 230) { //2k4 2k7
- buttondelay ++;
- if (buttondelay == 2) button = 1;//M+
- else button = -1;
- }
- if (pinread > 320 && pinread < 360) { //4k7 5k1
- button = 2;//--
- //delay (100);//ms
- delay (T);
- buttondelay ++;
- if (buttondelay == 2) {
- button = 4;
- T=10;
- } //-
- }
- if (pinread > 480 && pinread < 540) { //10k
- buttondelay ++;
- if (buttondelay == 2) { //BAND
- band ++;
- if (band > 3) band = 0;
- if (band == 0 || band == 1) {
- A=(freqbandarray[band]+107000)/125%64;
- R_up = 0x88;
- N_up = 0;
- }
- if (band == 2) {
- A=(freqbandarray[band]-107000)/125%64;
- R_up = 0x88;
- N_up = 0;
- }
- if (band == 3) {
- A=(freqbandarray[band]-107000)/125%64;
- R_up = 0x98;
- }
- //setfrequency();//?
- pll_set_frequency(freqbandarray[band]);
- delay (30);//ms
- }
- }
- if (pinread > -1 && pinread < 40) {
- button = 3;//++
- //delay (100);//ms
- delay (T);
- buttondelay ++;
- if (buttondelay == 2) {
- button = 5;
- T=10;
- } //+
- }
- if (pinread > 1000) {
- buttondelay = 0;
- T=100;
- button = -1;
- }
- }
- void menu(){
- if (button == 1) menuoption ++;
- if (button == 0) menuoption --;
- if (menuoption > 2 ) menuoption = 0;
- if (menuoption < 0 ) menuoption = 2;
- if (menuoption == 0) setfrequency();
- if (menuoption == 1) setstepsize();
- if (menuoption == 2) setaudio();
- }
- void setfrequency(){
- lcd.setCursor(0, 0);
- lcd.print("frequency ");
- // lcd.print("FREQ ");
- lcd.setCursor(0, 1);
- if (button == 2) {
- freqbandarray[band] = freqbandarray[band] - (stepsizearray[stepsize]);
- if (band == 0 && freqbandarray[band] < 873000) {
- freqbandarray[band] = 1079000;
- A=(freqbandarray[band]+107000)/125%64;
- }
- if (band == 1 && freqbandarray[band] < 290000) {
- freqbandarray[band] = 540000;
- A=(freqbandarray[band]+107000)/125%64;
- }
- if (band == 2 && freqbandarray[band] < 1370000) {
- freqbandarray[band] = 1740000;
- A=(freqbandarray[band]-107000)/125%64;
- }
- if (band == 3 && freqbandarray[band] < 3800000) {
- freqbandarray[band] = 5120000;
- A=(freqbandarray[band]-107000)/125%64;
- }
- pll_set_frequency(freqbandarray[band]);
- }
- if (button == 3) {
- freqbandarray[band] = freqbandarray[band] + (stepsizearray[stepsize]);
- if (band == 0 && freqbandarray[band] > 1079000) {
- freqbandarray[band] = 873000;
- A=(freqbandarray[band]+107000)/125%64;
- }
- if (band == 1 && freqbandarray[band] >= 540000) {
- freqbandarray[band] = 290000;
- A=(freqbandarray[band]+107000)/125%64;
- }
- if (band == 2 && freqbandarray[band] >= 1740000) {
- freqbandarray[band] = 1370000;
- A=(freqbandarray[band]-107000)/125%64;
- }
- if (band == 3 && freqbandarray[band] > 5120000) {
- freqbandarray[band] = 3800000;
- A=(freqbandarray[band]-107000)/125%64;
- }
- pll_set_frequency(freqbandarray[band]);
- }
- lcd.print((freqbandarray[band]) / 10000);
- lcd.print (".");
- if (((freqbandarray[band]) % 10000) <1000) {
- lcd.print("0");
- if (((freqbandarray[band]) % 10000) == 0) lcd.print("000");
- else lcd.print((freqbandarray[band]) % 10000);
- }
- else lcd.print((freqbandarray[band]) % 10000);
- lcd.print(" MHz ");
- }
- void setstepsize(){
- lcd.setCursor(0, 0);
- lcd.print("stepsize ");
- lcd.setCursor(0, 1);
- if (button == 4) stepsize --;
- if (button == 5) stepsize ++;
- if (stepsize < 0) stepsize = 2;
- if (stepsize > 2) stepsize = 0;
- lcd.print(stepsizetext[stepsize]);
- lcd.print(" ");
- }
- void setaudio(){
- lcd.setCursor(0, 0);
- lcd.print("audio ");
- lcd.setCursor(0, 1);
- if (button == 4) audio --;
- if (button == 5) audio ++;
- if (audio < 0) audio = 1;
- if (audio > 1) audio = 0;
- lcd.print(audiotext[audio]);
- lcd.print(" ");
- digitalWrite(audiopin, audio);
- }
- void setup(){
- pinMode(audiopin, OUTPUT);
- pinMode(PLL_data, OUTPUT);//!
- pinMode(PLL_clock, OUTPUT);
- pinMode(PLL_LE, OUTPUT);
- lcd.begin(16, 2);
- //setfrequency();//?
- pll_set_frequency(freqbandarray[band]);
- delay (30);//ms
- digitalWrite(audiopin, audio);
- }
- void loop(){
- readbuttons();
- menu();
- }
復(fù)制代碼
0.png (15.13 KB, 下載次數(shù): 63)
下載附件
2018-11-25 16:06 上傳
所有資料51hei提供下載:
MB1501_Scanner.7z
(293.18 KB, 下載次數(shù): 17)
2018-11-25 09:40 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|