冰楓論壇

標題: PIC16F690 [打印本頁]

作者: 洪嵐峰    時間: 2023-4-26 06:49
標題: PIC16F690
製作變頻機需要以下零件:

PIC16F690 微控制器
晶體振盪器
電容
電感
可變電阻
電池或電源模組
電晶體
電阻
電容
按鈕開關
LED 燈

以下是 PIC16F690 的連結腳位圖:


         ____________
  VDD --|1        20|-- VSS
  RA0 --|2        19|-- AN3/RA3
  RA1 --|3        18|-- AN2/RA4
  RA2 --|4        17|-- AN1/RA5
  RC5 --|5        16|-- AN0/RA6
  RC4 --|6        15|-- OSC2/CLKOUT
  RC3 --|7        14|-- OSC1/CLKIN
  RC6 --|8        13|-- TX/CK
  RC7 --|9        12|-- RX/DT
  GND --|10       11|-- MCLR
         ------------
以下是PIC16F690 變頻機的程式碼示例
使用 CCS C Compiler:


#include <16F690.h>
#use delay(clock=4000000)

void main()
{
   int freq = 10000;  // 起始頻率
   int duty = 50;     // 起始占空比
   int step = 10;     // 頻率和占空比步進值
   int min_freq = 1000;  // 最小頻率
   int max_freq = 50000; // 最大頻率
   
   setup_adc_ports(NO_ANALOGS);   // 禁用類比輸入
   setup_adc(ADC_OFF);            // 禁用 ADC 轉換
   setup_timer_2(T2_DIV_BY_1,255,1);  // 設置定時器 2
   
   while(TRUE)
   {
      set_pwm2_duty(duty);  // 設置 PWM2 占空比
      
      if(input(PIN_A0) == 0)  // 按下按鈕開關
      {
         freq += step;   // 頻率增加
         if(freq > max_freq)  // 檢查頻率是否超出最大值
         {
            freq = max_freq;
         }
      }
      else if(input(PIN_A1) == 0)  // 按下按鈕開關
      {
         freq -= step;   // 頻率減少
         if(freq < min_freq)  // 檢查頻率是否低於最小值
         {
            freq = min_freq;
         }
      }
      
      setup_timer_2(T2_DIV_BY_1,255,freq);  // 設置定時器 2 產生指定頻率的 PWM 輸出
      delay_ms(100);  // 稍作延遲

}
}


上述程式碼中使用了定時器 2 和 PWM 功能來產生可變頻率的輸出信號。

在主循環中,程式會不斷檢查按鈕開關的狀態,如果按下了頻率增加按鈕,則頻率會增加一個步進值,如果按下了頻率減少按鈕,則頻率會減少一個步進值。

然後,程式會重新設置定時器 2 的參數,產生指定頻率的 PWM 輸出信號,並使用 set_pwm2_duty() 函數來設置 PWM2 的占空比。





歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓