在本教程中,我们将使操纵杆模块与atmega8微控制器接口。 甲操纵杆是用于通信的输入模块。从根本上讲,它使用户机通信变得容易。操纵杆如下图所示。
操纵杆模块有两个轴-一个是水平轴,另一个是垂直轴。操纵杆的每个轴均安装在电位计或电位计或可变电阻上。中点降低为Rx和Ry。这些引脚作为JOYSTICK的输出信号引脚。当操纵杆沿水平轴移动时,在存在电源电压的情况下,Rx引脚上的电压会发生变化。
向前移动时,Rx上的电压增加,向后移动时,Rx引脚上的电压降低。同样,Ry处的电压在向上移动时会增加,Ry引脚处的电压在向下移动时会降低。
因此,在两个ADC通道上有四个JOYSTICK方向。在正常情况下,在正常情况下,每个引脚上都有1Volt。当摇杆移动时,每个引脚上的电压会根据方向变高或变低。因此,x轴的四个方向为(通道0上的0V,5V);(y轴的(通道1上的0V,5V))。
我们将使用ATMEGA8的两个ADC通道来完成这项工作。我们将使用通道0和通道1。
所需组件
硬件: ATMEGA8,电源(5v),AVR-ISP编程器,LED(4个),1000uF电容器,100nF电容器(5个),1KΩ电阻(6个)。
软体: Atmel studio 6.1,progisp或flash magic。
电路图和工作说明
JOYSTICK两端的电压不是完全线性的。会很吵。为了滤除噪声,如图所示,在电路中的每个电阻器之间放置一个电容器。
如图所示,电路中有四个LED。每个LED代表JOYSTICK的每个方向。当操纵杆沿某个方向移动时,相应的LED发光。
在继续之前,我们需要谈谈ATMEGA8的ADC,
在ATMEGA8中,我们可以为PORTC的四个通道中的任何一个提供模拟输入,因为选择的是相同的通道都没有关系,我们将选择PORTC的通道0或PIN0。
在ATMEGA8中,ADC的分辨率为10位,因此控制器可以检测到Vref / 2 ^ 10的最小变化,因此,如果基准电压为5V,则每5/2 ^ 10 = 5mV,我们得到一个数字输出增量。因此,对于输入中的每5mV增量,数字输出中的增量为1。
现在我们需要 根据以下条件设置ADC的寄存器,
1.首先,我们需要在ADC中启用ADC功能。
2.这里将获得用于ADC转换的最大输入电压为+ 5V。因此我们可以将ADC的最大值或基准设置为5V。
3.控制器具有触发转换功能,这意味着ADC转换仅在外部触发之后发生,因为我们不希望将ADC的寄存器设置为在连续自由运行模式下运行。
4.对于任何ADC,转换频率(模拟值到数字值)和数字输出的精度成反比。因此,为了获得更好的数字输出精度,我们必须选择较小的频率。对于正常的ADC时钟,我们将ADC的预售设置为最大值(2)。由于我们使用的是1MHZ的内部时钟,因此ADC的时钟为(1000000/2)。
这是我们开始使用ADC所需了解的仅有的四件事。
以上所有四个功能均由两个寄存器设置:
红色(ADEN):必须将该位置1以启用ATMEGA的ADC功能。
BLUE(REFS1,REFS0):这两位用于设置参考电压(或我们将要提供的最大输入电压)。由于我们希望参考电压为5V,因此应通过下表设置REFS0。
黄色(ADFR):必须将该位置1,ADC才能连续运行(自由运行模式)。
PINK(MUX0-MUX3):这四个位用于告知输入通道。由于我们将使用ADC0或PIN0,因此无需像表中那样设置任何位。
棕色(ADPS0-ADPS2):这三个位用于设置ADC的预分频器。由于我们使用的是2的预分频器,因此我们必须设置一位。
暗绿色(ADSC):该位置1使ADC开始转换。当我们需要停止转换时,可以在程序中禁用该位。