PIC18F2525 - 寻迹小车



  • source code

    端口设置

    • 三态端口:TRISA, TRISB, TRISC
      • 0 - 置为输出
      • 1 - 置为输入

    PWM

    #include <pwm.h>
    
    void
    main(void) {
    
      //// initializations ////
    
      /* Open PWM on channel 1 (RC2/CPP1)
       * Args:
       *   whole pwm period, i.e. resolution, max @ 0xff
       */
      OpenPWM1(0xff);
    
      //// use pwm ////
    
      /* Set duty cycle (high voltage span)
       * Args:
       *   10-bit value, max @ 0x3ff, 0x1ff for half
       */
      SetDCPWM(0x13f);
    
      //// other stuff ////
    
    }
    

    Note
    OpenPWMx 后,直接设置 LATCbits.RCx 将会失效,其输出全由 PWM 控制。

    模拟-数字转换器

    #include <adc.h>
    
    int ret = 0;  // return value from A-D Converter
    
    void
    main(void) {
    
      //// initalizations ////
    
      // Enable A-D Converter
      OpenADC(
          ADC_FOSC_32       &   // sync. clock period
          ADC_RIGHT_JUST    &   // output format
          ADC_12_TAD,           // safe conversion time
          ADC_CH0           &   // initial analog input channel (CHx --> RAx)
          ADC_REF_VDD_VSS   &   // reference voltages
          ADC_INT_OFF,          // interuptable
          ADC_1ANA              // working analog channels
      );
    
      while (1) {
    
        //// other stuff ////
    
        if (!BusyADC()) {
          ret = ReadADC();  // returns a 10-bit value
          ConvertADC();
        }
    
        //// use `ret`, and do other stuff ////
    
    }
    

    Note
    由于 AD 转换时间较长,对灵敏度要求较高时,建议异步。
    上面展示的“假异步”实测效果还行。

    特别注意

    • PIC18F2525 只支持全局变量,寻址空间 0xff
    • 本来还有一个 hard-programmed 的漂移版本,加入了牵引控制和惯性漂移,企图屠榜;然而由于盘子打得太猛,第一次测试之后小车就凉了,十分可惜

 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待