PIC18F2525 - 寻迹小车
-
端口设置
- 三态端口:
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 的漂移版本,加入了牵引控制和惯性漂移,企图屠榜;然而由于盘子打得太猛,第一次测试之后小车就凉了,十分可惜
- 三态端口: