昨天又试了试 SAM R21 的比较器和ADC功能,先说说比较器的使用。
从数据手册中我们看到比较器使用了PA04-PA07这几个脚,而ADC使用了PA04-PA09。
ASF中比较器的例程中,我们看到主要设置是在configure_ac_channel函数中。
- void configure_ac_channel(void)
- //! [setup_7]
- {
- /* Create a new configuration structure for the Analog Comparator channel
- * settings and fill with the default module channel settings. */
- //! [setup_8]
- struct ac_chan_config ac_chan_conf;
- //! [setup_8]
- //! [setup_9]
- ac_chan_get_config_defaults(&ac_chan_conf);
- //! [setup_9]
- /* Set the Analog Comparator channel configuration settings */
- //! [setup_10]
- ac_chan_conf.sample_mode = AC_CHAN_MODE_SINGLE_SHOT;
- ac_chan_conf.positive_input = AC_CHAN_POS_MUX_PIN0;
- ac_chan_conf.negative_input = AC_CHAN_NEG_MUX_SCALED_VCC;
- ac_chan_conf.vcc_scale_factor = 32;
- //! [setup_10]
- /* Set up a pin as an AC channel input */
- //! [setup_11]
- struct system_pinmux_config ac0_pin_conf;
- system_pinmux_get_config_defaults(&ac0_pin_conf);
- ac0_pin_conf.direction = SYSTEM_PINMUX_PIN_DIR_INPUT;
- ac0_pin_conf.mux_position = MUX_PA04B_AC_AIN0;
- system_pinmux_pin_set_config(PIN_PA04B_AC_AIN0, &ac0_pin_conf);
- //! [setup_11]
- /* Initialize and enable the Analog Comparator channel with the user
- * settings */
- //! [setup_12]
- ac_chan_set_config(&ac_instance, AC_COMPARATOR_CHANNEL, &ac_chan_conf);
- //! [setup_12]
- //! [setup_13]
- ac_chan_enable(&ac_instance, AC_COMPARATOR_CHANNEL);
- //! [setup_13]
- }
- //! [setup]
复制代码
它是使用了AIN0作为比较器的正输入,对应PA04,因此做比较器实验时,我们将比较器的输入接到EXT1接口上的PA04。比较器的负端使用VCC的分压做输入,分压系数是32,也就是32/64=1/2Vcc。如果修改分压系数,可以得到不同的比较门限,如果改变比较器的输入,可以使用不同的GPIO。
LED0代表了比较器的输出,可以通过调节电位器方便的观察比较器的输出状态。