1
在本教程中,让我们学习如何将HC-05蓝牙模块与AVR ATmega8微控制器连接。我们将通过蓝牙模块在Android移动和Atmega8之间建立通信,蓝牙模块通过UART串行通信协议进行。在这个项目中,我们将使用智能手机的蓝牙控制LED。
所需材料:
AVR Atmega8
HC-05 蓝牙模块
发光二极管
USBASP 编程器
10 针 FRC 电缆
跳线
面包板
使用的软件:
我们将使用CodeVisionAVR软件编写代码,并使用SinaProg软件使用USBASP程序员将代码上传到Atmega8。
蓝牙模块 HC-06:
蓝牙可以在以下两种模式下运行:
命令模式
操作模式
在命令模式下,我们将能够配置蓝牙属性,例如蓝牙信号的名称,密码,操作波特率等。操作模式是我们能够在PIC微控制器和蓝牙模块之间发送和接收数据的模式。因此,在本教程中,我们将只玩弄操作模式。命令模式将保留默认设置。设备名称将是HC-05(我正在使用HC-06),密码将是0000或1234,最重要的是,所有蓝牙模块的默认波特率为9600。
模块采用 5V 电源供电,信号引脚工作在 3.3V,因此模块本身存在一个 3.3V 稳压器。因此,我们不必担心。在六个引脚中,只有四个将在操作模式下使用。引脚连接表如下所示
S.No | HC-05/HC-06 上的引脚 | MCU 上的引脚名称 | PIC 中的引脚编号 |
1 | Vcc | Vdd | 31圣针 |
2 | Vcc | 格德 | 32德·针 |
3 | 德克萨斯 | RC6/Tx/CK | 25千针 |
4 | 接收 | RC7/Rx/DT | 26千针 |
5 | 州 | 数控 | 数控 |
6 | 英文(使能) | 数控 | 数控 |
使用 CodeVision 为 Atmega 8 创建项目:
安装这些软件后,请按照以下步骤创建项目并编写代码:
第 1 步。打开 CodeVision 单击“文件 -> 新建”-> 项目。将出现确认对话框。点击是
第 2 步。代码向导将打开。单击第一个选项,即 AT90,然后单击确定。
第 3 步。选择您的微控制器芯片,在这里我们将采用如图所示的Atmega8。
第 4 步。单击端口。在我们的项目中,我们将使用端口 C4 和 C5 进行 LED 接口。因此,通过单击将位 4 和位 5 作为输出。如下图所示:
第5步。我们将使用 USART 用于 Rx 和 Tx。因此,单击USART选项,然后单击接收器选项,然后保持原样。
第 6 步。单击程序 - >生成,保存并退出。现在,我们一半以上的工作已经完成
步骤 7.在桌面上创建一个新文件夹,以便我们的文件保留在文件夹中,否则我们将分散在整个桌面窗口中。根据需要命名您的文件夹,我建议使用相同的名称来保存程序文件。
我们将有一个接一个的对话框来保存文件。
对保存第一个对话框后将出现的其他两个对话框执行相同的操作。
现在,您的工作区如下所示。
我们的大部分工作都是在向导的帮助下完成的。现在, 我们只需要编写几行代码来连接蓝牙模块并控制 LED.
电路图:
下面给出了蓝牙HC-05与AVR接口的电路图。
将FRC电缆的一端连接到USBASP编程器,另一端将连接到微控制器的SPI引脚,如下所述:
FRC 母连接器引脚 1 -> 引脚 17,Atmega8 的 MOSI
引脚 2 连接到 atmega8 的 Vcc,即引脚 7
引脚 5 连接到 atmega8 的复位,即引脚 1
引脚 7 连接到 atmega8 的 SCK,即引脚 19
引脚 9 连接到 atmega8 的 MISO,即引脚 18
引脚 8 连接到 atmega8 的 GND,即引脚 8
按照电路图连接试验板上的其余组件。
代码和说明:
文章末尾给出了带有演示视频的完整 AVR 代码。
在这里,我们在void main函数中声明了一个变量,用于存储来自蓝牙模块的传入字符。
#include
// Declare your global variables here
// Standard Input/Output functions
#include
void main(void)
{
char var; // Declare your local variables here
其余代码很简单,很容易理解。现在,进入代码的最后一行,您将在其中找到一个while循环。我们的主代码将在此循环中。在这里,我们不断检查来自蓝牙模块的传入字符并相应地打开或关闭 LED.
while (1)
{
scanf("%c",&var); //this function is to used to check any character coming from our android app .
if (var == 'a') // We will send ‘a’ from Bluetooth Terminal to ON the LED and ‘b’ to OFF the LED
{
PORTC.5 = 1;
PORTC.4 = 0;
}
if (var == 'b')
{
PORTC.5 = 0;
PORTC.4 = 0;
}
}
我们的代码完成了。现在,我们必须构建我们的项目。单击“构建项目”图标,如下所示。
生成项目后,将在调试> Exe 文件夹中生成一个十六进制文件,该文件可以在您之前为保存项目而创建的文件夹中找到。我们将使用此十六进制文件通过Sinaprog软件上传到atmega8中。
使用 Sinaprog 将代码上传到 Atmega 8:
我们将使用Sinaprog上传上面生成的十六进制文件,因此打开它并从设备下拉菜单中选择 Atmega8。从调试> Exe 文件夹中选择十六进制文件,如下所示。
现在,单击程序。
您的微控制器已编程。现在,我们需要一个Android应用程序来连接我们的模块。我们将使用“蓝牙终端应用程序”来控制LED灯。
安卓应用程序,用于使用 AVR 控制 LED:
我们将使用智能手机中的“蓝牙终端应用程序”与另一端的HC-05通话以控制LED灯。
您可以通过将电路插入PC来使用相同的usbap为电路供电,也可以将外部5V(不超过5!!!!!)施加到Atmega8 Vcc引脚。
安装后.打开应用程序并将其与蓝牙模块连接(HC-05,默认密码为1234)。
现在,发送“a”,看到 LED 会发光。发送“b”,指示灯将熄灭。
因此,现在通过发送字符“a”和“b”,您可以使用智能手机无线控制 LED。如果您将语音键盘与蓝牙应用程序一起使用,那么您甚至不需要输入字符“a”和“b”,您只需说出它们,就可以使用语音控制 LED。
#include
#include
void main(void)
{
char var;
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=Out Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<
// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<
TCCR1B=(0<
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=(0<
MCUCSR=(0<
UCSRB=(0<
UCSRC=(1<
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<
SFIOR=(0<
// SPI initialization
// SPI disabled
SPCR=(0<
// TWI initialization
// TWI disabled
TWCR=(0<
while (1)
{
scanf("%c",&var);
if (var == 'a')
{
PORTC.5 = 1;
PORTC.4 = 0;
}
if (var == 'b')
{
PORTC.5 = 0;
PORTC.4 = 0;
}
}
}
全部0条评论
快来发表一下你的评论吧 !