本帖最后由 渴死的鱼儿 于 2016-2-4 23:00 编辑
第一次用到图形化编程软件时候,除了感觉比直接敲代码省事外,还增添了不少的乐趣,看着形形色色的积木顿时编程心情也好了起来,而且不需要我们费太大脑力去思考。但是这样的话我们对主控的工作状态就不是那么的了解了:MCU是哪几个引脚工作的?它的工作方式是什么样的?工作的过程是怎么去控制的?我们使用mBlock编程的话这些是基本了解不到了,如果我们想把主控的资源尽量的利用到,发挥自己的DIY兴趣,想必只利用mBlock里面的积木恐怕是不合适的。想想我们以前玩单片机开发板的时候,都是一边翻着电路原理图,一边敲着程序,而mCore主板上的主控Atmega328P-PU也是一个单片机,只不过它是一款基于AVR微控制器的一款芯片,而目前较火热的开源电子原型平台Arduino有很多控制板都采用此芯片扩展,与此同时也出现了专用于Arduino的编译器——Arduino IDE。
在这个编译器里面我们可以调用官方封装好的库,让我们编程方便的同时还能够明确的知道对单片机各个I/O的控制情况,编程风格依旧是C语言的形式,只不过在单片机引脚的工作模式和代码整体结构上稍微有区别,后期的程序都将通过这个编译器来完成!
一、主控资源介绍:
接下面先来对比一下mCore主板和Arduino UNO主板有什么异同:
第一张图就是我们的mBot上面的主板mCore,第二张图就是Arduino的开发板型号之一Arduino UNO。最重要的一点是:这两款板子上的主控是一样的,都是ATmega328P,可以说mCore就是在Arduino UNO的最小系统上拓展了外围控制模块!这么说来就要好好了解一下Arduino UNO的资源了:
Arduino UNO 同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。
ATmega328P包括了片上32KB Flash,其中0.5KB用于Bootloader。同时还有2KB SRAM和1KB EEPROM。
14路数字输入输出口: 工作电压为5V,每一路能输出和接入最大电流为40mA。每一路配置了20-50K 欧姆内部上拉电阻(默认不连接)。
有些引脚有特定的功能:串口信号RX(0号)、TX(1号): 与内部 ATmega8U2 USB-to- TTL 芯片相连,提供TTL电压水平的串口接收信号。
外部中断(2号和3号):触发中断引脚,可设成上升沿、下降沿或同时触发。
脉冲宽度调制PWM(3、5、6、9、10 、11):提供6路8位PWM输出。
SPI(10(SS),11(MOSI),12(MISO),13(SCK)):SPI通信接口。
LED(13号):Arduino专门用于测试LED的保留接口,输出为高时点亮LED,反之输出为低时LED熄 灭。(这个在mcore的主板上也有的)
6路模拟输入A0到A5:每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为 0到5V,可以通过AREF调整输入上限。其中A4和A5是复用引脚:SDA-A4和 SCL-A5:支持通信接口(兼容I2C总线)。
AREF: 模拟输入信号的参考电压。
Reset: 信号为低时复位单片机芯片。
然后我们结合一下mcore主板的主控看一下,具体引脚分布如下图:
可以看得到芯片引脚的分布,以后就可以利用某些特殊的引脚拓展功能了。比如:
6路的AD:可以做模拟计算,做数字电压表;
6路的PWM:可以做PWM调光,感光灯;
但是mcore主板并没有引出全部的引脚,不过重要的基本上都有出来的,如果我们想外接模块,就可以利用这几个引脚控制了。比如:
标号1,2的RJ25接口旁边:3个PWM(9,10,11)、MISO(12)
标号3,4的RJ25接口旁边:6个AD(A0,A1,A2,A3,SDA,SCL) 后两个是复用引脚。
电源插座旁边:RST,MOSI,MISO,SCK
蓝牙底座:RXD,TXD(把蓝牙模块拔掉可以插排针进去)
电机接口:M1,M2(可以直接用母头杜邦线接上)
二、Arduino编程实战
上面简单介绍了一下硬件资源,接下来我们先通过Arduino编程来控制一下mcore上的单片机,换个方式给mBot编程序,顺便学习一下Arduino的编程风格和方法。
下面这个程序是用Arduino IDE编写的一个程序,程序内容如下图所示:
其功能是:单片机的测试LED(D13)和板载蜂鸣器(D8)会以2秒的周期不断进行“闪烁-响-熄灭-哑”。
程序内容不多,用到的关键词都是固定不变的,下面对程序进行详细讲解。
①先定义两个硬件的数字接口:
蜂鸣器的控制端是和ATmega328单片机的数字口D8相接,单片机的测试led是和数字口D13相接。所以在程序中就分别让它们等于8和13,这个是Arduino编程的规则(详细规则见附件链接)。
② void setup()函数:
这个函数的主要功能是:初始化变量,管脚模式,调用库函数;
使用关键词 pinMode()设置某些管脚的工作模式:INPUT(输入模式);OUTPUT(输出模式);
pinMode(pin,mode) 数字IO口输入输出模式定义凼数,pin表示为0~13, mode表示为INPUT或OUTPUT。
因为这里我们需要led 的发光蜂鸣器的工作,所以这里全部都设为输出模式。
pinMode(led,OUTPUT);
pinMode(buzzer,OUTPUT);
③ void loop()函数:
首先让led点亮,蜂鸣器不工作,延时1秒钟;之后led熄灭,蜂鸣器工作,再延时1秒钟。
程序中的延时函数是Arduino库中封装好的,直接拿来调用。
使用关键词:digitalWrite(pin,value) 数字IO口输出电平定义凼数,pin表示为0~13,value表示为HIGH或LOW。
digitalWrite(led,HIGH);
digitalWrite(buzzer,LOW);
delay(1000);
digitalWrite(led,LOW);
digitalWrite(buzzer,HIGH);
delay(1000);
Arduino编程语言规则:https://bbs.elecfans.com/jishu_538088_1_1.html
本帖程序源码:
|