久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5490|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

Arduino控制RadioShack Pro-405 MB1501仿真源碼與實(shí)踐(寬頻接收機(jī)改造)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:422781 發(fā)表于 2018-11-25 09:40 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本人的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仿真工程文件可到本帖附件中下載)


MB1501引腳圖與管腳功能定義:

MB1501的arduino源程序如下:
  1. /*
  2. QRP 2m FM Transceiver Project with BS2 shiftout any bits
  3. modify by learning 2016.11 V0.2 fast scan */
  4. //RadioShack Pro-405 29-54/87.3-107.9/137-174/380-512MHz with 12.5kHz steps
  5. #include<stdlib.h>
  6. #include <LiquidCrystal.h>
  7. LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
  8. int buttonpin = A3;
  9. int audiopin = A2;
  10. const int PLL_data = 8 ;
  11. const int PLL_clock = 9 ;
  12. const int PLL_LE = 10 ;

  13. //unsigned int  R_up = 0x84 ;  //M=64 R=512
  14. unsigned int  R_up = 0x88 ;  //M=64 R=1024
  15. unsigned int  R_low = 0x01 ;
  16. unsigned int  N_up = 0;
  17. unsigned int  N_low;
  18. unsigned int A_0; //A0 A' can't be used
  19. unsigned int A;
  20. int T = 100;

  21. char* audiotext[]={
  22.   "NFM", "WFM"};
  23. int audio = 0;
  24. long freqbandarray[] = {
  25.   873000, 290000, 1370000, 3800000};//0.1kHz
  26. char* bandtext[]={
  27.   "FM", "VL", "VH", "U"};
  28. int band = 1;
  29. long stepsizearray[] = {
  30.   125 ,500 ,1000 ,80000};//0.1kHz
  31. char* stepsizetext[]={
  32.   "12.5 kHz", "50 kHz", "100 kHz", "8 MHz"};
  33. int stepsize = 0;
  34. int button;
  35. int buttondelay = 0;
  36. int menuoption = 0;

  37. void pll_set_frequency(long pllfreq) {
  38.   if (band == 0 || band == 1) {
  39.     N_low=((pllfreq+107000)/8000);
  40.     A=(freqbandarray[band]+107000)/125%64;
  41.   }
  42.   if (band == 2 ) {
  43.     N_low=((pllfreq-107000)/8000);
  44.     A=(freqbandarray[band]-107000)/125%64;
  45.   }
  46.   if (band == 3) {
  47.     N_up=highByte((pllfreq-107000)/8000);
  48.     N_low=lowByte ((pllfreq-107000)/8000);
  49.     A=(freqbandarray[band]-107000)/125%64;
  50.   }
  51.   A_0 = A << 1;

  52.   //M,Rを設(shè)定
  53.   digitalWrite(PLL_LE, LOW);
  54.   // シフト演算を使ってデータを送信する
  55.   shiftOut(PLL_data, PLL_clock, MSBFIRST, R_up);
  56.   shiftOut(PLL_data, PLL_clock, MSBFIRST, R_low);
  57.   digitalWrite(PLL_LE, HIGH);

  58.   //N,Aを設(shè)定   
  59.   digitalWrite(PLL_LE, LOW);
  60.   // シフト演算を使ってデータを送信する
  61.   shiftOut(PLL_data, PLL_clock, MSBFIRST, N_up);
  62.   shiftOut(PLL_data, PLL_clock, MSBFIRST, N_low);
  63.   shiftOut(PLL_data, PLL_clock, MSBFIRST, A_0);
  64.   digitalWrite(PLL_LE, HIGH);
  65. }

  66. void readbuttons(){
  67.   int pinread = analogRead(buttonpin);
  68.   if (pinread > 90 && pinread < 120) { //1k 1k2
  69.     buttondelay ++;
  70.     if (buttondelay == 2) button = 0;//M-
  71.     else button = -1;
  72.   }
  73.   if (pinread > 190 && pinread < 230) { //2k4 2k7
  74.     buttondelay ++;
  75.     if (buttondelay == 2) button = 1;//M+
  76.     else button = -1;
  77.   }
  78.   if (pinread > 320 && pinread < 360) { //4k7 5k1
  79.     button = 2;//--
  80.     //delay (100);//ms
  81.     delay (T);
  82.     buttondelay ++;
  83.     if (buttondelay == 2) {
  84.       button = 4;
  85.       T=10;
  86.     } //-
  87.   }
  88.   if (pinread > 480 && pinread < 540) { //10k
  89.     buttondelay ++;
  90.     if (buttondelay == 2) { //BAND
  91.       band ++;
  92.       if (band > 3) band = 0;
  93.       if (band == 0 || band == 1) {
  94.         A=(freqbandarray[band]+107000)/125%64;
  95.         R_up = 0x88;
  96.         N_up = 0;
  97.       }
  98.       if (band == 2) {
  99.         A=(freqbandarray[band]-107000)/125%64;
  100.         R_up = 0x88;
  101.         N_up = 0;
  102.       }
  103.       if (band == 3) {
  104.         A=(freqbandarray[band]-107000)/125%64;
  105.         R_up = 0x98;
  106.       }
  107.       //setfrequency();//?
  108.       pll_set_frequency(freqbandarray[band]);
  109.       delay (30);//ms
  110.     }
  111.   }
  112.   if (pinread > -1 && pinread < 40) {
  113.     button = 3;//++
  114.     //delay (100);//ms
  115.     delay (T);
  116.     buttondelay ++;
  117.     if (buttondelay == 2) {
  118.       button = 5;
  119.       T=10;
  120.     } //+
  121.   }
  122.   if (pinread > 1000) {
  123.     buttondelay = 0;
  124.     T=100;
  125.     button = -1;
  126.   }
  127. }

  128. void menu(){
  129.   if (button == 1) menuoption ++;
  130.   if (button == 0) menuoption --;
  131.   if (menuoption > 2 ) menuoption = 0;
  132.   if (menuoption < 0 ) menuoption = 2;
  133.   if (menuoption == 0) setfrequency();
  134.   if (menuoption == 1) setstepsize();
  135.   if (menuoption == 2) setaudio();
  136. }

  137. void setfrequency(){
  138.   lcd.setCursor(0, 0);
  139.   lcd.print("frequency  ");
  140.   //  lcd.print("FREQ  ");
  141.   lcd.setCursor(0, 1);
  142.   if (button == 2) {
  143.     freqbandarray[band] = freqbandarray[band] - (stepsizearray[stepsize]);
  144.     if (band == 0 && freqbandarray[band] < 873000) {
  145.       freqbandarray[band] = 1079000;
  146.       A=(freqbandarray[band]+107000)/125%64;
  147.     }
  148.     if (band == 1 && freqbandarray[band] < 290000) {
  149.       freqbandarray[band] = 540000;
  150.       A=(freqbandarray[band]+107000)/125%64;
  151.     }
  152.     if (band == 2 && freqbandarray[band] < 1370000) {
  153.       freqbandarray[band] = 1740000;
  154.       A=(freqbandarray[band]-107000)/125%64;
  155.     }
  156.     if (band == 3 && freqbandarray[band] < 3800000) {
  157.       freqbandarray[band] = 5120000;
  158.       A=(freqbandarray[band]-107000)/125%64;
  159.     }
  160.     pll_set_frequency(freqbandarray[band]);
  161.   }
  162.   if (button == 3) {
  163.     freqbandarray[band] = freqbandarray[band] + (stepsizearray[stepsize]);
  164.     if (band == 0 && freqbandarray[band] > 1079000) {
  165.       freqbandarray[band] = 873000;
  166.       A=(freqbandarray[band]+107000)/125%64;
  167.     }
  168.     if (band == 1 && freqbandarray[band] >= 540000) {
  169.       freqbandarray[band] = 290000;
  170.       A=(freqbandarray[band]+107000)/125%64;
  171.     }
  172.     if (band == 2 && freqbandarray[band] >= 1740000) {
  173.       freqbandarray[band] = 1370000;
  174.       A=(freqbandarray[band]-107000)/125%64;
  175.     }
  176.     if (band == 3 && freqbandarray[band] > 5120000) {
  177.       freqbandarray[band] = 3800000;
  178.       A=(freqbandarray[band]-107000)/125%64;
  179.     }
  180.     pll_set_frequency(freqbandarray[band]);
  181.   }
  182.   lcd.print((freqbandarray[band]) / 10000);
  183.   lcd.print (".");
  184.   if (((freqbandarray[band]) % 10000) <1000) {
  185.     lcd.print("0");
  186.     if (((freqbandarray[band]) % 10000) == 0) lcd.print("000");
  187.     else lcd.print((freqbandarray[band]) % 10000);
  188.   }
  189.   else lcd.print((freqbandarray[band]) % 10000);
  190.   lcd.print(" MHz    ");
  191. }  

  192. void setstepsize(){
  193.   lcd.setCursor(0, 0);
  194.   lcd.print("stepsize        ");
  195.   lcd.setCursor(0, 1);
  196.   if (button == 4) stepsize --;
  197.   if (button == 5) stepsize ++;
  198.   if (stepsize < 0) stepsize = 2;
  199.   if (stepsize > 2) stepsize = 0;
  200.   lcd.print(stepsizetext[stepsize]);
  201.   lcd.print("             ");
  202. }  

  203. void setaudio(){
  204.   lcd.setCursor(0, 0);
  205.   lcd.print("audio           ");
  206.   lcd.setCursor(0, 1);
  207.   if (button == 4) audio --;
  208.   if (button == 5) audio ++;  
  209.   if (audio < 0) audio = 1;
  210.   if (audio > 1) audio = 0;
  211.   lcd.print(audiotext[audio]);
  212.   lcd.print("            ");
  213.   digitalWrite(audiopin, audio);
  214. }


  215. void setup(){
  216.   pinMode(audiopin, OUTPUT);
  217.   pinMode(PLL_data, OUTPUT);//!
  218.   pinMode(PLL_clock, OUTPUT);
  219.   pinMode(PLL_LE, OUTPUT);
  220.   lcd.begin(16, 2);
  221.   //setfrequency();//?
  222.   pll_set_frequency(freqbandarray[band]);
  223.   delay (30);//ms
  224.   digitalWrite(audiopin, audio);
  225. }


  226. void loop(){
  227.   readbuttons();
  228.   menu();
  229. }

復(fù)制代碼


所有資料51hei提供下載:
MB1501_Scanner.7z (293.18 KB, 下載次數(shù): 17)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚州毛片 | 国产精品欧美一区喷水 | 国内精品在线视频 | 亚洲日本中文字幕在线 | 亚洲九九精品 | 亚洲成人播放器 | 看a网站| 99久久婷婷国产综合精品电影 | 中文字幕在线观看一区 | 九九热在线免费观看 | 日韩欧美在线观看 | 国产伦精品一区二区三区精品视频 | 色婷婷av99xx| 91不卡| 久久久国产精品视频 | 五月天婷婷综合 | www日| 在线观看特色大片免费网站 | 欧美日韩久久 | 亚洲网站免费看 | 亚洲天堂久久 | 婷婷综合激情 | 久草精品视频 | 亚洲精品一区二区三区蜜桃久 | 黄色成人在线观看 | 拍真实国产伦偷精品 | 欧美日韩黄色一级片 | 在线观看国产 | 欧美精品一区在线发布 | 超碰超碰 | 国产成人免费视频网站视频社区 | 男人的天堂中文字幕 | 国产精品久久久久久久久久久久冷 | 国产免国产免费 | 中文字幕日韩欧美 | 精品国产乱码久久久久久蜜柚 | 国产欧美精品 | 久草成人网 | 无吗视频| 国产情侣激情 | 欧美一区二区三区免费在线观看 |