0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将HC-05与AVR ATmega8连接起来控制LED

科技观察员 来源:circuitdigest 作者:里沙布·耆那教 2022-11-14 17:03 次阅读

在本教程中,让我们学习如何将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。

poYBAGNyBGeAcjRrAACRRzH8oH8104.jpg

模块采用 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 单击“文件 -> 新建”-> 项目。将出现确认对话框。点击是

pYYBAGNyBGqAcWt-AACSmU93eSM139.png

第 2 步。代码向导将打开。单击第一个选项,即 AT90,然后单击确定。

pYYBAGNyBG2AUV1KAAC8vZSNJSE470.png

第 3 步。选择您的微控制器芯片,在这里我们将采用如图所示的Atmega8。

pYYBAGNyBG-ADsZWAACn3AGlTK4879.png

第 4 步。单击端口。在我们的项目中,我们将使用端口 C4 和 C5 进行 LED 接口。因此,通过单击将位 4 和位 5 作为输出。如下图所示:

poYBAGNyBHGAKOx_AACFCRIjX-w266.png

第5步。我们将使用 USART 用于 Rx 和 Tx。因此,单击USART选项,然后单击接收器选项,然后保持原样。

pYYBAGNyBHOARbGAAACVH-OHr-A161.png

第 6 步。单击程序 - >生成,保存并退出。现在,我们一半以上的工作已经完成

poYBAGNyBHSAaCboAACKBkwvfRU388.png

步骤 7.在桌面上创建一个新文件夹,以便我们的文件保留在文件夹中,否则我们将分散在整个桌面窗口中。根据需要命名您的文件夹,我建议使用相同的名称来保存程序文件。

我们将有一个接一个的对话框来保存文件。

pYYBAGNyBHaAEpLvAACOz4VNrzg767.png

对保存第一个对话框后将出现的其他两个对话框执行相同的操作。

现在,您的工作区如下所示。

poYBAGNyBHiAGLjLAADie_Din-E018.png

我们的大部分工作都是在向导的帮助下完成的。现在, 我们只需要编写几行代码来连接蓝牙模块并控制 LED.

电路图:

下面给出了蓝牙HC-05与AVR接口的电路图。

poYBAGNyBHqADV1FAADirOPcUSo360.png

将FRC电缆的一端连接到USBASP编程器,另一端将连接到微控制器的SPI引脚,如下所述:

poYBAGNyBHyAEfxQAABxP4nGW2o451.png

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;

}

}

我们的代码完成了。现在,我们必须构建我们的项目。单击“构建项目”图标,如下所示。

poYBAGNyBICAdtqiAADjog1mleI660.png

生成项目后,将在调试> Exe 文件夹中生成一个十六进制文件,该文件可以在您之前为保存项目而创建的文件夹中找到。我们将使用此十六进制文件通过Sinaprog软件上传到atmega8中。

使用 Sinaprog 将代码上传到 Atmega 8:

我们将使用Sinaprog上传上面生成的十六进制文件,因此打开它并从设备下拉菜单中选择 Atmega8。从调试> Exe 文件夹中选择十六进制文件,如下所示。

poYBAGNyBIKAV6CKAABgEvRne9E688.png

现在,单击程序。

poYBAGNyBIOATGzdAAD6CIV689g399.jpg

pYYBAGNyBIeAPD5rAADEuhyOcGQ714.jpg

您的微控制器已编程。现在,我们需要一个Android应用程序来连接我们的模块。我们将使用“蓝牙终端应用程序”来控制LED灯。

安卓应用程序,用于使用 AVR 控制 LED:

我们将使用智能手机中的“蓝牙终端应用程序”与另一端的HC-05通话以控制LED灯。

您可以通过将电路插入PC来使用相同的usbap为电路供电,也可以将外部5V(不超过5!!!!!)施加到Atmega8 Vcc引脚。

安装后.打开应用程序并将其与蓝牙模块连接(HC-05,默认密码为1234)。

poYBAGNyBIiAZ6KCAABK3KNEsAc397.jpg

现在,发送“a”,看到 LED 会发光。发送“b”,指示灯将熄灭。

pYYBAGNyBIuADhEuAABxLMiZFmE914.jpg

因此,现在通过发送字符“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;


}





}


}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6809

    浏览量

    147636
  • ATmega8
    +关注

    关注

    4

    文章

    106

    浏览量

    49747
  • 蓝牙模块
    +关注

    关注

    30

    文章

    454

    浏览量

    55111
  • HC-05
    +关注

    关注

    0

    文章

    34

    浏览量

    16853
收藏 人收藏

    评论

    相关推荐

    如何将数组的的字符重新连接起来保存?

    TEMP[2]依次存入,直到4存入TEMP[7], 问题是:如何将数组的的字符重新连接起来保存?如何定义新的变量str?使str=\"ABCD1234\"?
    发表于 04-16 07:39

    如何数据库的资料与报表连接起来

    如何数据库的资料与报表连接起来
    发表于 08-07 16:04

    如何将PLC通信口与无线数据终端连接起来??

    `如何将PLC通信口与无线数据终端连接起来,实现PLC与PLC之间,PLC与HMI触摸屏间,PLC与PC组态软件以及PLC与设备之间的无线数据交换!关注微信公众号【PLC无线通讯】解决您的一切烦恼!`
    发表于 09-28 09:49

    如何把数据库和其他程序连接起来

    各位大神,我现在遇到一个问题。我想把已经采集好的数据和数据库的进行对比,然后检索出相应的文字出来。我已经把采集的数据编成代码了,数据库相应的文字也用代码来进行代替。但是现在我不是很清楚如何将他们连接起来。两个小程序分别运行没有问题,但是
    发表于 04-13 11:16

    如何将IC的SCL和SDA引脚与FPGA板连接起来

    Aoa ..我想将我的FPGA板(virtex6 ML605)与外部时钟IC(ds1307)连接起来。请指导我如何将IC的SCL和SDA引脚与FPGA板连接。谢谢
    发表于 04-29 08:13

    怎么才能使Atmel Studio 7.0伺服电机与Atmega16 AVR控制连接起来

    怎么才能使Atmel Studio 7.0伺服电机与Atmega16 AVR控制连接起来
    发表于 09-29 08:37

    如何将蓝牙与STM32连接起来

    蓝牙模块有何功能?如何将蓝牙与STM32连接起来呢?
    发表于 11-18 07:02

    如何将STM32MP157C-DK2和M4连接起来

    在 STM32MP157C-DK2 上,我可以使用/连接可用的 muRata 1Dx 和 core-M4(而不是 core-A7)吗?我不太确定wifi模块1dx(套件上的U8)是由A7还是M4控制的?无论如何,我想将它与 M4
    发表于 12-15 07:45

    如何将Eink显示器与esp32连接起来

    一般来说,我是嵌入式系统和 ESP-IDF 的新手。我正在尝试 Eink 显示器与 esp32 连接起来,但我对如何为其编写代码有点迷茫。有没有我可以参考的指南或教程?
    发表于 03-01 06:36

    如何将hwirq与中断连接起来

    的 MSIR7 寄存器设置中断 0 位。那么,当那个中断到达时,我该如何调用我的 interrupt_handler 函数呢?我想我应该使用 irq_create_mapping 和 request_irq Linux 函数,但我不知道如何将 hwirq 与我的中断链接起来
    发表于 03-14 08:20

    如何将EMMC SanDisk iNAND® 7250与LPC 1850连接起来

    我们正在尝试 EMMC SanDisk iNAND® 7250 与 LPC 1850 连接起来。EMMC 使用 MMC 5.1,但 1850 提到 4.4 作为标准。经过研究,发现4.4是向下兼容
    发表于 04-27 06:33

    如何将ToF传感器与IMX8MP处理器连接起来

    我正在尝试 ToF 传感器与 IMX8MP 处理器连接起来。我的主机开发 PC 是 Ubuntu 操作系统,所以有人可以指导我使用交叉编译器工具链,我可以使用它在我的主机 PC 上进行应用程序开发吗?
    发表于 06-08 06:31

    CS1238的AINN1和AINN2连接起来用吗?

    CS1238的AINN1和AINN2连接起来用吗? 需要测如此信号,打算把两个差分对的负引脚连接起来用,这个用法行不行?
    发表于 08-24 17:51

    HC-05和MSP430连接起来控制LED的方式

     今天我们将学习如何将蓝牙模块 HC-05 与德州仪器 (TI) 的 MSP430 Launchpad 连接起来。在这个接口示例中,我们将使用蓝牙终端安卓应用程序从智能手机控制 MSP
    发表于 08-29 17:30 1161次阅读
    将<b class='flag-5'>HC-05</b>和MSP430<b class='flag-5'>连接起来</b><b class='flag-5'>控制</b><b class='flag-5'>LED</b>的方式

    将微型伺服电机与Atmega16连接起来的方法

    在本教程中,我们将使用 Atmel Studio 7.0将微型伺服电机与 Atmega16 AVR控制连接起来。伺服电机额定工作电压为4.8-6V。我们可以通过应用脉冲串或PWM
    发表于 09-09 15:00 1052次阅读
    将微型伺服电机与<b class='flag-5'>Atmega</b>16<b class='flag-5'>连接起来</b>的方法