在这里,我们将建立ATmega8微控制器与Arduino Uno之间的通信。此处建立的通信是UART(通用异步接收器发送器)类型。它是串行通讯。通过这种串行通信,可以在两个控制器之间共享数据,这是各种嵌入式系统应用程序所必需的。
在嵌入式系统中,我们必须具有有关系统通信的基本知识,因此,我们正在做这个项目。在这个项目中,我们将讨论基本的通信系统,并从发送器到接收器以串行方式发送一些数据。
在该项目中,ATMEGA8充当发送器,而ARDUINO UNO充当接收器。在串行通信中,我们将按位发送数据,直到数据的字节完全传输为止。数据可以是10位大小,但我们现在将保持在8位。
所需组件
硬件: ATMEGA8,ARDUINO UNO,电源(5v),AVR-ISP编程器,100uF电容器(跨电源连接),1KΩ电阻(两个),LED,按钮。
软体: Atmel studio 6.1,Progisp或Flash Magic,适用于ARDUINO NIGHTLY。
电路图和说明
在讨论发射器和接收器的电路图和编程之前,我们需要了解串行通信。如前所述,这里的ATMEGA将数据串行发送到UNO。
它具有其他通信模式,例如主从通信,JTAG通信,但为便于通信,我们选择RS232。在这里,我们将ATMEGA8的TXD(发送器)PIN连接到ARDUINO UNO的RXD(接收器)PIN。
建立的数据通信被编程为具有:
- 八个数据位
- 两个停止位
- 没有奇偶校验位
- 波特率9600 BPS(每秒位数)
- 异步通信(ATMEGA8和UNO之间没有时钟共享(两者都有不同的时钟单元))
为了在Arduino Uno和ATMEGA8之间建立UART,我们需要准确地设置设置。为此,我们需要在两端保持上述参数相同。在此,一个充当发送器,另一个充当接收器。我们将在下面讨论每边的设置。
现在,对于RS232接口,发送器端(ATMEGA8)必须满足以下功能:
1.必须将第一个控制器的TXD引脚(数据接收功能)用于TRANSMITTER。
2.由于通信是串行的,因此我们需要知道何时收到数据再见,以便我们可以停止程序,直到接收到完整的字节为止。这是通过使能数据接收完成中断来完成的。
3.数据以8位模式发送和接收到控制器。因此,两个字符将一次发送到控制器。
4.模块发送的数据中没有奇偶校验位,只有一个停止位。
以上功能在控制器寄存器中设置;我们将简要讨论它们:
暗灰色(UDRE):启动时未设置此位,但在工作期间用于检查发送器是否准备发送。有关更多详细信息,请参见TRASMITTER SIDE上的程序。
VOILET(TXEN):将该位置1以使能TRASMITTER SIDE上的发送器引脚。
黄色(UCSZ0,UCSZ1和UCSZ2):这三个位用于选择我们一次接收或发送的数据位的数量。
两个SIDES之间的通信建立为八位通信。通过使通信与表匹配,UCSZ0,UCSZ1变为1,UCSZ2变为零。
橙色(UMSEL):根据系统是异步通信(均使用不同的时钟)还是同步通信(均使用相同的时钟)来设置此位。
两个系统都不共享任何时钟。由于它们两个都使用自己的内部时钟。因此,我们需要在两个控制器中将UMSEL设置为0。
绿色(UPM1,UPM0):这两个位是根据我们在通信中使用的位奇偶校验进行调整的。
这里的数据ATMEGA被编程为无奇偶校验地发送数据,因为数据传输长度很小,我们可以清楚地预期没有数据丢失或错误。因此,我们此处未设置任何奇偶校验。因此,我们将UPM1,UPM0都设置为零或保留它们,因为默认情况下所有位均为0。
蓝色(USBS):该位用于选择通讯期间使用的停止位的数量。
建立她的通信是异步类型的,因此为了获得更准确的数据发送和接收,我们需要使用两个停止位,因此我们在TRANSMITTER端将USBS设置为“ 1”。
通过选择适当的UBRRH在控制器中设置波特率:
通过交叉引用波特率和CPU晶振频率来选择UBRRH值:
因此,通过交叉引用,UBRR值被视为“ 6”,因此设置了波特率。
这样,我们就在TRANSMITTER SIDE上建立了设置;我们现在将讨论接收边。
可以使用单个命令来完成UNO中的串行通信。
|
我们假定要建立的通信是通过每秒9600位的BAUD速率完成的。因此,为使UNO建立这样的波特率并开始串行通信,我们使用命令“ Serial.begin(9600);”。9600是波特率,并且可以更改。
现在剩下的如果要接收数据了,UNO接收到一个数据,就可以将其取走。该数据由命令“ receiveddata = Serial.read();”获取。通过此命令,串行数据被带到名为“ integer”的“ receiveddata”中。
如电路中所示,发送器侧的一个按钮处于连接状态,当按下该按钮时,TRANSMITTER(ATMEGA8)发送一个八位数据,而RECEIVER(ARDUINO UNO)接收该数据。成功接收到此数据后,它会切换与之相连的LED的亮和灭,以显示两个控制器之间成功的数据传输。
通过此UART,ATMEGA8控制器与ARDUINO UNO之间的通信成功建立。