风筝
发表于: 2018-7-25 10:40:04 | 显示全部楼层

当我们的项目需要远程访问时,GSM模块就会很有用。通过这些模块可以完成我们普通手机可以执行的所有操作,例如拨打/接听电话、发送/接收短信、使用GPRS连接到互联网等。您还可以将普通麦克风和扬声器连接到此模块,实现与您的手机进行通话。如果将其与微控制器连接,这将为许多创意项目打开大门。因此,在本篇文章中,我们将学习如何将GSM模块(SIM900A)与AVR微控制器ATmega16进行连接,并演示如何使用GSM模块发送和接收短信。


所需的材料

●    ATmega16控制器

●    GSM模块(SIM900)

●    液晶显示器

●    按键

●    10k电阻,电位器

●    连接导线

●    12V适配器

●    USBASP programmer

●    10针FRC电缆


使用的软件

我们将使用CodeVisionAVR软件编写代码,使用SinaProg软件和USBASP programmer将代码上传到Atmega16。

您可以从下面的链接下载这些软件:

●    CodeVisionAVR:http://www.hpinfotech.ro/cvavr_download.html

●    SinaProg:http://www.ablab.in/sinaprog-hex ... ler/#inline_content


在开始设计原理图和编写代码之前,我们将先了解GSM模块及其工作原理。


GSM模块

GSM Module.JPG


通过使用AT命令模式,即使没有连接任何微控制器,也可以使用GSM模块。如上图所示,GSM模块带有一个USART适配器,可通过MAX232模块直接连接到计算机,或者Tx和Rx引脚可用于将其连接到微控制器。您还可以注意到MIC +、MIC-、SP +、SP-等其他引脚,可以连接麦克风或扬声器。该模块可通过在普通DC插座插入12V适配器的方式供电。


将SIM卡插入模块的插槽并打开电源,您应该注意到电源LED指示灯亮。现在等待一分钟左右,您应该看到红色LED每3秒闪烁一次。这意味着您的模块能够与您的SIM卡建立连接。现在,您可以继续将模块与电话或任何微控制器连接。


使用AT命令与GSM模块通信

正如您猜到的那样,GSM模块可以通过串行通信进行通信,并且只能理解一种语言,即“AT命令”。无论您想告诉或询问GSM模块,它都应该只通过AT命令。例如,如果您想知道您的模块是否处于活动状态。你应该询问(发送)像“AT”这样的命令,你的模块将回复“OK”。


这些AT命令在其数据手册中有详细说明,可以在其官方数据手册中找到。这是一份271页的数据手册,您可能需要几天的时间来阅读它们。所以我给出了一些最重要的AT命令,以便您尽快了解这些指令。

AT 回复OK确认
AT+CPIN?
检查信号质量
AT + COPS? 查找服务提供商名称
ATD96XXXXXXXX; 拨打特定号码,以分号结尾
AT + CNUM 查找SIM卡的数量
ATA 接听来电
ATH 挂断当前的来电
AT + COLP 显示来电号码
AT + VTS =(数字)
发送DTMF号码。您可以在移动键盘上使用任意数字(数字)
AT + CMGR AT + CMGR = 1在第一个位置读取消息
AT + CMGD = 1 删除第一个位置的消息
AT+CMGDA=”DEL ALL”
删除SIM中的所有消息
AT + CMGL =” ALL” 阅读所有来自SIM的消息
AT + CMGF = 1 设置SMS配置。 “1”仅用于纯文本模式
AT + CMGS =“+ 91 968837XXXX”
> TEXT<Ctrl + z>
在这里发送短信到特定号码968837XXXX。当您看到“>”开始输入文本时。按Ctrl + Z发送文本。
AT + CGATT? 检查SIM卡上的互联网连接
AT + CIPSHUT 关闭TCP连接,意味着断开互联网连接
AT+CSTT = “APN”,”username”,”Pass” 使用您的APN和密钥连接到GPRS。可以从Network Provider获得。
AT + CIICR 检查SIM卡是否有数据包
AT + CIFSR 获取SIM网络的IP
AT + CIPSTART =“TCP”,“SERVER IP”,“PORT” 用于设置TCP IP连接
AT + CIPSEND 此命令用于将数据发送到服务器

本篇文章中,我们将使用AT + CMGF和AT + CMGS命令发送短信。


如果您同时使用了Arduino和GSM模块,在接收消息时可以使用+ CMT:命令查看串行监视器上的手机号码和短信。短信出现在第二行,如图所示。

Received-Text-Message-on-Serial-Monitor.png


我们将扫描此+ CMT:命令以检查是否有短信。


ATMega16与GSM模块的连接电路图

Circuit-Diagram-for-Interfacing-GSM-Module-with-AVR-Microcontroller.png


1.  GSM模块的Tx和Rx分别连接到Atmega16的Rx(Pin14)和Tx(Pin15)。

2.  将按钮按到PD5(Pin19)和PD6(Pin20)。

3.  LCD连接:

     ◼  RS - PA0

     ◼  R / W - PA1

     ◼  EN - PA2

     ◼  D4 - PA4

     ◼  D5 - PA5

     ◼  D6 - PA6

     ◼  D7 - PA7

Interfacing-GSM-Module-with-AVR-Microcontroller.jpg


使用CodeVision创建ATmega16项目

安装CodeVisionAVR和SinaProg软件后,按照以下步骤创建项目和编写代码:

第1步、  打开CodeVision,单击File -> New -> Project。将出现确认对话框。单击YES

Open-codevision-and-select-new-project.png


第2步、  将打开CodeWizard向导。单击第一个选项,即AT90,然后单击“OK”。

Select-first-option-AT90.png


第3步、 - 选择你的微控制器芯片,这里我们将选择Atmega16L,如图所示。

Choose-your-microcontroller-chip.png


第4步、 - 单击USART。在上面选择Receiver and Transmitter。如下所示:

Select-Transmitter-and-Receiver-on-USART.png


步骤5: - 单击Alphanumeric LCD,并勾选Enable Alphanumeric LCD support

Enable-Alphanumeric-LCD-support.png


第6步、 - 单击Program -> Generate, Save and Exit。现在,我们一多半的工作已经完成。

Click-on-Program -then-choose-Generate-Save-and-Exit.png


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

我们将陆续有三个对话框来保存文件。

Create-seperate-folder-for-your-project.png


保存第一个后会出现的其他两个对话框也一样。


现在,您的工作区看起来像这样。

Codevision-workspace.png


我们的大部分工作都是在向导的帮助下完成的。现在,我们需要为GSM模块编写代码。

跳转到指定楼层
风筝
发表于: 2018-7-25 11:15:05 | 显示全部楼层

代码和注释说明

项目创建后,所有头文件都会自动添加,您只需要包含delay.h头文件并声明所有变量。完整的代码在本篇文章的末尾处给出。

  1. #include <io.h>
  2. // Alphanumeric LCD functions
  3. #include <alcd.h>
  4. #include <delay.h>
  5. // Standard Input/Output functions
  6. #include <stdio.h>
  7. unsigned char received_value(void);
  8. unsigned char received_data,a,b,c;
  9. unsigned int z;
  10. unsigned char msg[15];
  11. unsigned char cmd_1[]={"AT"};
  12. unsigned char cmd_2[]={"AT+CMGF=1"};
  13. unsigned char cmd_3[]={"AT+CMGS="};
  14. unsigned char cmd_4[]={"Call me"};
  15. unsigned char cmd_5[]={"Receiver mobile number"};
复制代码

创建一个从UDR寄存器接收数据的函数。此函数将返回接收的数据。

  1. unsigned char received_value(void)
  2. {
  3. while(!(UCSRA&(1<<RXC)));
  4. {
  5. received_data=UDR;
  6. return received_data;
  7. }
  8. }
复制代码

在while循环中,我们在其中创建两个if语句,一个用于发送短信,另一个用于接收短信。发送按钮与ATmega的PIND6连接,并接收短信按钮连接到PIND5。

当按下PIND6(发送按钮)时,if语句将执行,所有发送消息的命令将逐个执行。

  1. while(1){
  2. //  lcd_clear();
  3.       lcd_putsf("Send->bttn 1");
  4.       lcd_gotoxy(0,1);
  5.         lcd_putsf("Receive->buttn 2");

  6.           if(PIND.6 == 1){   
  7.           lcd_clear();
  8.   lcd_gotoxy(0,0);
  9. lcd_putsf("Sending Msg...");
  10. for(z=0;cmd_1[z]!='';z++)
  11. {
  12. UDR = cmd_1[z];
  13. delay_ms(100);
  14. }
  15. UDR = ('\r');
  16. delay_ms(500);
  17. for(z=0;cmd_2[z]!='';z++)
  18. {
  19. UDR = cmd_2[z];
  20. delay_ms(100);
  21. }

  22. ..
复制代码

如果按下接收短信按钮,while (b!='+') 循环将检查是否存在CMT命令。如果存在,则第二个while循环将执行并转到命令的第二行并逐个在LCD上打印消息。

  1.   while(PIND.5 == 1){
  2.       lcd_clear();
  3.        lcd_gotoxy(0,0);  
  4.    lcd_putsf("Receiving Msg...");
  5.    b= received_value ();
  6. while (b!='+')         {
  7. b= received_value ();
  8. }
  9. b= received_value ();
  10. if(b=='C')
  11. {
  12. b= received_value ();

  13. ..
复制代码

以下循环将程序带到第二行命令并将短信存储在数组中。

  1. while (b!=0x0a)
  2. {
  3. b= received_value ();
  4. }
  5. for(b=0;b<3;b++)   {
  6.              c=received_value();
  7.              msg[b]=c;
  8. }
  9. ..
  10. ..
复制代码

此for循环用于在LCD上显示短信。

  1. for(z=0;z<3;z++)
  2. {
  3. a=msg[z];
  4. lcd_putchar(a); // PRINT IN lcd
  5. delay_ms(10);
  6. }
复制代码

构建项目

单击Build the project图标,如图所示。

Build-the-Project-on-CodeVisionAVR.png


构建项目后,会在Debug-> Exe文件夹中生成一个HEX文件,该文件夹是之前保存项目时创建的文件夹。我们将使用此HEX文件通过Sinaprog软件上传到Atmega16控制器中。


将代码上传到Atmega16

根据给定的原理图连接电路,然后编程Atmega16。将FRC电缆的一端连接到USBASP Programmer,另一端将连接到微控制器的SPI引脚,如下所示:

FRC-cable-Pinout.png

●    FRC连接器的引脚1连接到Atmega16的MOSI,即引脚6。

●    引脚2连接到atmega16的Vcc,即引脚10

●    引脚5连接到atmega16的Reset,即引脚9

●    引脚7连接到atmega16的SCK,即引脚8

●    引脚9连接到atmega16的MISO,即引脚7

●    引脚8连接到atmega16的GND,即引脚11


我们将使用Sinaprog上传上面生成的Hex文件,因此打开它并从Device下拉菜单中选择Atmega16。从Debug-> Exe文件夹中选择HEX文件,如图所示。

Upload-the-Code-using-SinaProg2.0.png


现在,单击Program,您的代码将烧录到ATmega16微控制器中。


整个项目已完成,并且在您的微控制器已经烧录程序。只需按下按钮即可发送和接收来自GSM模块和ATmega16微控制器的消息。


代码

本项目完成的代码如下所示: main.rar (1.3 KB, 下载次数: 12)

回复

使用道具 举报

kavent
发表于: 2018-9-13 14:03:58 | 显示全部楼层

路过看看!路过看看!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 32 | 回复: 41



手机版|

GMT+8, 2024-4-19 23:28 , Processed in 0.138089 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表