文档库 最新最全的文档下载
当前位置:文档库 › arduino学习笔记18 - SD卡读写实验

arduino学习笔记18 - SD卡读写实验

arduino学习笔记18 - SD卡读写实验
arduino学习笔记18 - SD卡读写实验

本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。

需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。这次我是用的是kingmax2G的MicroSD卡。

先看一下硬件连接图

把下面代码下载进arduino 控制板 /*

此例子展示如果记录三个模拟引脚数值到SD 卡,使用SD 库。

电路部分

* 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,

如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。

* SD卡与arduino控制板使用SPI总线连接

** MOSI - pin 11

** MISO - pin 12

** CLK - pin 13

** CS - pin 4

*/

#include

// CS引脚为pin4,这里也沿用官方默认设置

const int chipSelect = 4; //设定CS接口

void setup()

{

Serial.begin(9600); //设置串口通信波特率为9600

Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...

pinMode(10, OUTPUT);

if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present

Serial.println("Card failed, or not present");

return;

}

Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.

}

void loop()

{

// 定义数组

String dataString = "";

// 读取三个传感器值,写入数组

for (int analogPin = 0; analogPin < 3; analogPin++) {

int sensor = analogRead(analogPin);

dataString += String(sensor);

if (analogPin < 2) {

dataString += ",";

}

}

// 打开文件,注意在同一时间只能有一个文件被打开

// 如果你要打开另一个文件,就需要先关闭前一个

File dataFile = SD.open("datalog.txt", FILE_WRITE);

// 打开datalog.txt文件,读写状态,位置在文件末尾。

if (dataFile) {

dataFile.println(dataString);

dataFile.close();

// 数组dataString输出到串口

Serial.println(dataString);

}

// 如果无法打开文件,串口输出错误信息error opening datalog.txt

else {

Serial.println("error opening datalog.txt");

}

}

复制代码

下载完成后,打开串口监视器。

控制板开始工作后会看到如下画面,图中每一行上就是每次记录的三个传感器数值,本次实验并没有接传感器,所以数值是周围干扰源的杂乱信号。

关闭arduino电源后把SD卡取出,接入电脑后,可以看到SD卡中有一个DATALOG.TXT文件,打开后有可以看到,此文件中的信息就是记录下的各个传感器的数值。

第一个代码实验完以后,SD卡中的DATALOG.TXT不要删除,把下面代码下载进arduino中,打开串口监视器,看看效果。

/*

这个例子展示如何通过SD库从SD卡中读取一个文件,并且把数据通过串口发送。

* SD卡与arduino控制板使用SPI总线连接

** MOSI - pin 11

** MISO - pin 12

** CLK - pin 13

** CS - pin 4

*/

#include

// CS引脚为pin4,这里也沿用官方默认设置

const int chipSelect = 4; //设定CS接口

void setup()

{

Serial.begin(9600); //设置串口通信波特率为9600

Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...

pinMode(10, OUTPUT);

if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present

Serial.println("Card failed, or not present");

// don't do anything more:

return;

}

Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.

File dataFile = SD.open("datalog.txt"); //打开datalog.txt文件

if (dataFile) {

while (dataFile.available()) { //检查是否dataFile是否有数据

Serial.write(dataFile.read()); //如果有数据则把数据发送到串口

}

dataFile.close(); //关闭dataFile

}

else {

Serial.println("error opening datalog.txt"); //如果文件无法打开串口发送信

息error opening datalog.txt

}

}

void loop()

{

}

复制代码

可以看到,DATALOG.TXT文件中的数据都通过串口发送回了电脑。效果如下图:

再把下面的代码下载进arduino控制板中,打开串口监控器看看效果。

/*

此例子展示如何在SD卡中创建于删除文件

* SD卡与arduino控制板使用SPI总线连接

** MOSI - pin 11

** MISO - pin 12

** CLK - pin 13

** CS - pin 4

*/

#include

File myFile;

void setup()

{

Serial.begin(9600); //设置串口通信波特率为9600

Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...

pinMode(10, OUTPUT);

if (!SD.begin(4)) { //如果从CS口与SD卡通信失败,串口输出信息initialization failed!

Serial.println("initialization failed!");

return;

}

Serial.println("initialization done."); //CS口与SD卡通信成功,串口输出信息initialization done.

if (SD.exists("example.txt")) { //检查example.txt文件是否存在

Serial.println("example.txt exists."); //如果存在输出信息example.txt exists.至串口

}

else {

Serial.println("example.txt doesn't exist."); //不存在输出信息example.txt doesn't exist.至串口

}

Serial.println("Creating example.txt...");

myFile = SD.open("example.txt", FILE_WRITE); //打开example.txt,如果没有自动创建,写入状态

myFile.close(); //关闭文件

if (SD.exists("example.txt")) {

Serial.println("example.txt exists.");

}

else {

Serial.println("example.txt doesn't exist.");

}

Serial.println("Removing example.txt...");

SD.remove("example.txt"); //删除文件example.txt

if (SD.exists("example.txt")){

Serial.println("example.txt exists.");

}

else {

Serial.println("example.txt doesn't exist.");

}

}

void loop()

{

}

复制代码

下面图就是串口监视器显示的结果,显示文件创建于删除的过程。

再把下面的代码传入arduino控制板,看看效果

#include

File myFile;

void setup()

{

Serial.begin(9600);

Serial.print("Initializing SD card...");

pinMode(10, OUTPUT);

if (!SD.begin(4)) {

Serial.println("initialization failed!");

}

Serial.println("initialization done.");

myFile = SD.open("test.txt", FILE_WRITE);

if (myFile) {

Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3.");

myFile.close();

Serial.println("done.");

} else {

Serial.println("error opening test.txt"); }

myFile = SD.open("test.txt");

if (myFile) {

Serial.println("test.txt:");

while (myFile.available()) {

Serial.write(myFile.read());

}

myFile.close();

} else {

Serial.println("error opening test.txt"); }

}

{

}

复制代码

串口监视器中可以看到如下画面

把SD卡接入电脑,可以在里面找到TEST.TXT文件,里面的内容如下。

Arduino学习笔记A7 - Arduino 输出引脚扩流

Arduino学习笔记A7 - Arduino 输出引脚扩流 使用Arduino时候,经常需要控制大电流或者高压负载。但是Arduino只有最大5v,20mA的引脚输出。必须要通过扩流电路。扩流的方法有很多。下面介绍几种方法,适合在不同场合下面使用。 注意:下述电路图的负载均用电阻符号代替,符号标志是电子学的负载符号RL,就是R(load)的意思。 1、小功率NPN三极管扩流(适用于扩展后负载电压5v以下,负载电流建议<1A)。 Arduino输出引脚直接连电阻驱动三极管基极。 复杂度:★★☆☆☆;成本:★☆☆☆☆;可扩流倍数:★☆☆☆☆; 优点:简单方便,成本低。开关频率上限直接由三极管决定,可以做的很高; 缺点:受控大电流和Arduino直接连通,所以外置驱动电源不建议超过5v,以免外置电源的电压通过Q1倒灌到Arduino引脚引起Arduino烧坏。 选材:三极管Q1可以选用小功率的NPN三极管。推荐型号有2SC1815,2N2222,8050,2SD882等(点元件名看对应数据手册,下同);基极电阻R1必不可少,否则会导致Arduino因为引脚负载过大而发热甚至烧毁。R1阻值在100Ω~10k之间均可,推荐值1kΩ。所有电阻功率无要求,贴片0805以上,直插1/8w以上的就行,以下所有电路均使用这种电阻规格。

2、固态继电器(光耦)扩流(适用于220V交流直接控制,或者大功率直流控制,建议用于负载电流0.2A~40A间) 使用现成的固态继电器可以很方便的被Arduino控制。对于Arduino来说,驱动固态继电器就像驱动一个LED那么简单。 直流控制直流 直流控制交流 复杂度:★☆☆☆☆;成本:★★★★★;可扩流倍数:★★★★★; 优点:使用最简单,抗干扰能力最强,无电磁干扰。可以控制交流电/直流电,并且可以控制很大电流的负载。 缺点:成本很高 选材:注意的是,固态继电器有两种:直流控制交流固态继电器/直流控制直流固态继电器。它们的

SD卡-中文学习笔记

SD卡操作 一、概述 1、简介 SD卡是基于flash的存储卡。 SD卡和MMC卡的区别在于初始化过程不同。 SD卡的通信协议包括SD和SPI两类。 SD卡使用卡内智能控制模块进行FLASH操作控制,包括协议、安全算法、数据存取、ECC算法、缺陷处理和分析、电源管理、时钟管理。

2、功能介绍 2.1 特点 1)主机无关的FLASH内存擦除和编程 读或写数据,主机只要发送一个带地址的命令,然后等待命令完成,主机无需关心具体操作的完成。当采用新型的FLASH时,主机代码无需更新。 2)缺陷管理 3)错误恢复 4)电源管理 Flash每个扇区有大约10万次的写寿命,读没有限制。 擦除操作可以加速写操作,因为在写之前会进行擦除。 3 SD总线模式 3.1 Negotiating Operation Conditions 当主机定义了SD卡不支持的电压范围时,SD卡将处于非活动状态,将忽略所有的总线传输。要退出非活动状态唯一的方法就是重新上电。 3.2 SD卡获取和识别 SD卡总线采用的是单主多从结构,总线上所有卡共用时钟和电源线。主机依次分别访问每个卡,每个卡的CID寄存器中已预编程了一个唯一的卡标识号,用来区分不同的卡。 主机通过READ_CID命令读取CID寄存器。CID寄存器在SD卡生产过程中的测试和格式化时被编程,主机只能读取该号。 DAT3线上内置的上拉电阻用来侦测卡。在数据传输时电阻断开(使用ACMD42)。

3.3 卡状态 卡状态分别存放在下面两个区域: 卡状态(Card Status),存放在一个32位状态寄存器,在卡响应主机命令时作为数据传送给主机。 SD状态(SD_Status),当主机使用SD_STATUS(ACMD13)命令时,512位以一个数据块的方式发送给主机。SD_STATUS还包括了和BUS_WIDTH、安全相关位和扩展位等的扩展状态位。 3.4 内存组织 数据读写的基本单元是一个字节,可以按要求组织成不同的块。

实验十四 存储器扩展机读写实验

实验十四存储器扩展机读写实验 一、实验目的 (1)通过阅读并测试示例程序,完成程序设计题,熟悉静态RAM的扩展方法。 (2)了解8086/8088与存储器的连接,掌握扩展存储器的读写方法。 二、实验内容 1.实验原理(62256RAM介绍) 62256是32*8的静态存储器,管脚如图所示。其中:A0~A14为地址线,DB0~DB7为数据线,/cs为存储器的片选,/OE为存储器数据输出选通信号,/WE为数据写入存储器信号。62256工作方式如下图。 /CS /WE /OE 方式DB-~DB7 H X X 未选中高阻 L H H 读写禁止高阻 L L H 写IN L H L 读OUT 2.实验内容 设计扩展存储电器的硬件连接图并编制程序,讲字符A~Z循环存入62256扩展RAM 中,让后再检查扩展存储器中的内容。 三、程序设计 编写升序,将4KB扩展存储器交替写入55H和0AAH。 程序如下: RAMADDR EQU 0000H RAMOFF EQU 9000H COUNT EQU 800H CODE SEGMENT ASSUME CS:CODE START: PROC NEAR MOV AX,RAMADDR MOV DS,AX MOV BX,RAMOFF MOV CX,COUNT MOV DL,55h MOV AX ,0AAH REP: MOV [BX],DL INC BX MOV [BX],AX INC BX LOOP REP JMP $ CODE ENDS END START 四、实验结果 通过在软件上调试,运行时能够看到内存地址的改变,证明此扩展的程序成功实现了。 五、实验心得

静态存储器-实验报告

计算机科学与技术系 实验报告 专业名称计算机科学与技术 课程名称计算机组成与结构 项目名称静态随机存储器实验 班级 学号 姓名 同组人员无 实验日期 2015-10-24

一、实验目的与要求 掌握静态随机存储器RAM 工作特性及数据的读写方法 二、实验逻辑原理图与分析 2.1 实验逻辑原理图及分析 实验所用的静态存储器由一片6116(2K ×8bit)构成(位于MEM 单元),如下 图所示。6116有三个控制线:CS(片选线)、OE(读线)、WE(写线),当片选有效(CS=0)时,OE=0时进行读操作,WE=0时进行写操作,本实验将CS 常接地线。 由于存储器(MEM)最终是要挂接到CPU 上,所以其还需要一个读写控制逻辑,使得CPU 能控制MEM 的读写,实验中的读写控制逻辑如下图所示,由于T3的参与,可以保证MEM 的写脉宽与T3一致,T3由时序单元的TS3给出。IOM 用来选择是对I/O 还是对MEM 进行读写操作,RD=1时为读,WR=1时为写。 XMRD XIOR XIOW XMWR RD IOM WE T3 读写控制逻辑 实验原理图如下如所示,存储器数据线接至数据总线,数据总线上接有8 个LED 灯显示D7…D0的内容。地址线接至地址总线,地址总线上接有8个LED 灯显示A7…A0的内容,地址由地址锁存器(74LS273,位于PC&AR 单元)给出。数据开关(位于IN 单元)经一个三态门(74LS245)连至数据总线,分时给出地址和数据。地址寄存器为8位,接入6116的地址A7…A0,6116的高三位地址A10…A8接地,所以其实际容量为256字节。

DynamicsforSpaceClaim学习笔记(中文)

关节选项 关节类型 求解方式 碰撞 马达 关节类型 弹簧初始速度为零转矩限制 自动产生电机转矩 弹性 阻尼 范围;幅度 弹簧 位置 平移 转动

关节类型: 铰链 槽副, 圆柱形 求解方式: 直接 迭代 直接和迭代 Hinge 铰链副 铰链接头除去一个DOF(自由度),使受影响的刚体仅能围绕所选择的轴线旋转。与所有关节一样,有两种附接铰链接头的方式: 将其直接附接到属于刚体的实体的边缘或轴上,该实体附接在刚体和世界之间的接合处。将它连接在两个单独的实体(每个属于一个单独的刚体)之间。 在第一种情况下,您只需从功能区菜单中选择铰链工具,然后左键单击要添加关节的刚体的边缘或轴,黄色的铰链图标将出现在边缘或轴上。参见联合状态。 在第二种情况下,您希望通过铰链接头连接两个刚性体,只需从功能区菜单中选择铰链接头。然后,按住Ctrl键单击其中一个刚体,然后单击另一个刚体上的边缘或轴,铰链应该围绕其旋转。边缘或轴上将出现紫色铰链图标。参见联合状态。

当选择一个铰链(或多个铰链)时,可以从属性选项卡更改该铰链的属性。 接头属性 属性指定关节的初始状态。 启用:指定是否启用关节。 刚体之间的碰撞:指定是否可以在两个连接的刚体之间产生触点。默认为关闭。如果启用碰撞,如果两个物体具有重叠的几何结构,则可能会出现干扰效应。 类型:关节的类型。 求解类型:指定解决此关节的求解器。 直接和迭代:(默认),直接AND迭代求解器将看到这个关节。为了使材料对的分离解算器类型获得稳定的摩擦,迭代和直接求解器必须看到关节。 迭代- 只有迭代求解器将看到这个关节。将导致大质量比的不稳定性。 直接- 只有直接求解器会看到这个关节。当涉及具有拆分解决类型的材料对时,这可能导致伪影。 Component1:与此关节相关联的第一个组件的名称。 Component2:与此关节相关联的第二个组件的名称。 刚体1:与该关节相关的第一刚体的名称。 刚体2:与该关节相关的第二刚体的名称。 反向:只有当接头连接到两个物体时才可见。将交换两个附着的刚体,有效地翻转接头的方向。 角位置:此铰链接头的当前角度。 弹性

实验一扩展存储器读写实验

实验一:扩展存储器读写实验 一.实验要求 编制简单程序,对实验板上提供的外部存贮器(62256)进行读写操作。 二.实验目的 1.学习片外存储器扩展方法。 2.学习数据存储器不同的读写方法。 三.实验电路及连线 将P1.0接至L1。CS256连GND孔。 四.实验说明 1.单片机系统中,对片外存贮器的读写操作是最基本的操作。用户藉此来熟悉MCS51单片机编程的基本规则、基本指令的使用和使用本仿真实验系统调试程序的方法。 用户编程可以参考示例程序和流程框图。本示例程序中对片外存贮器中一固定地址单元进行读写操作,并比较读写结果是否一致。不一致则说明读写操作不可靠或该存储器单元不可靠,程序转入出错处理代码段(本示例程序通过熄灭一个发光二极管来表示出错)。读写数据的选用,本例采用的是55(0101,0101)与AA(1010,1010)。一般采用这两个数据的读写操作就可查出数据总线的短路、断路等,在实际调试用户电路时非常有效。 用户调试该程序时,可以灵活使用单步、断点和变量观察等方法,来观察程序执行的流程和各中间变量的值。 2.在I状态下执行MEM1程序,对实验机数据进行读写,若L1灯亮说明RAM读

写正常。 3.也可进入LCA51的调试工具菜单中的对话窗口,用监控命令方式读写RAM,在I状态执行SX0000↓ 55,SPACE,屏幕上应显示55,再键入AA,SPACE,屏幕上也应显示AA,以上过程执行效果与编程执行效果完全相同。 注:SX是实验机对外部数据空间读写命令。 4.本例中,62256片选接地时,存储器空间为0000~7FFFH。 五.实验程序框图 实验示例程序流程框图如下: 六.实验源程序: ORG 0000H LJMP START ORG 0040H START:

计算机组成原理存储器读写和总线控制实验实验报告

信息与管理科学学院计算机科学与技术 实验报告 课程名称:计算机组成原理 实验名称:存储器读写和总线控制实验 姓名:班级:指导教师:学号: 实验室:组成原理实验室 日期: 2013-11-22

一、实验目的 1、掌握半导体静态随机存储器RAM的特性和使用方法。 2、掌握地址和数据在计算机总线的传送关系。 3、了解运算器和存储器如何协同工作。 二、实验环境 EL-JY-II型计算机组成原理实验系统一套,排线若干。 三、实验内容 学习静态RAM的存储方式,往RAM的任意地址里存放数据,然后读出并检查结果是否正确。 四、实验操作过程 开关控制操作方式实验 注:为了避免总线冲突,首先将控制开关电路的所有开关拨到输出高电平“1”状态,所有对应的指示灯亮。 本实验中所有控制开关拨动,相应指示灯亮代表高电平“1”,指示灯灭代表低电平“0”。连线时应注意:对于横排座,应使排线插头上的箭头面向自己插在横排座上;对于竖排座,应使排线插头上的箭头面向左边插在竖排座上。 1、按图3-1接线图接线: 2、拨动清零开关CLR,使其指示灯显示状态为亮—灭—亮。 3、往存储器写数据:

以往存储器的(FF ) 地址单元写入数据“AABB ”为例,操作过程如下: 4、按上述步骤按表3-2所列地址写入相应的数据 表3-2 5、从存储器里读数据: 以从存储器的(FF ) 地址单元读出数据“AABB ”为例,操作过程如下: (操作) (显示) (操作) (显示) (操作) (显6、按上述步骤读出表3-2数据,验证其正确性。 五、实验结果及结论 通过按照实验的要求以及具体步骤,对数据进行了严格的检验,结果是正确的,具体数据如图所示:

学习电子笔记

Mini2440 开发板硬件资源特性 CPU 处理器 - Samsung S3C2440A,主频400MHz,最高533Mhz SDRAM 内存 - 在板64M SDRAM - 32bit 数据总线 - SDRAM 时钟频率高达100MHz FLASH 存储 在板256M/1GB Nand Flash, 掉电非易失 在板2M Nor Flash,掉电非易失,已经安装BIOS LCD 显示 - 板上集成4 线电阻式触摸屏接口,可以直接连接四线电阻触摸屏 - 支持一线精准触摸屏 - 支持黑白、4 级灰度、16 级灰度、256 色、4096 色STN 液晶屏,尺寸从3.5 寸到12.1 寸,屏幕分辨率可 以达到1024x768 象素; - 支持黑白、4 级灰度、16 级灰度、256 色、64K 色、真彩色TFT 液晶屏,尺寸从3.5 寸到12.1 寸,屏幕 分辨率可以达到1024x768 象素; - 标准配置为统宝3.5”真彩LCD,分别率240x320,带触摸屏; 接口和资源 - 1 个100M 以太网RJ-45 接口(采用DM9000 网络芯片) - 3 个串行口 - 1 个USB Host - 1 个USB Slave B 型接口 - 1 个SD 卡存储接口 - 1 路立体声音频输出接口,一路麦克风接口; - 1 个2.0mm 间距10 针JTAG 接口 - 4 USER Leds - 6 USER buttons(带引出座) - 1 个PWM 控制蜂鸣器 - 1 个可调电阻,用于AD 模数转换测试 - 1 个I2C 总线AT24C08 芯片,用于I2C 总线测试 - 1 个2.0 mm 间距20pin 摄像头接口 - 板载实时时钟电池 - 电源接口(5V),带电源开关和指示灯 系统时钟源 - 12M 无源晶振 实时时钟 - 内部实时时钟(带后备锂电池) 扩展接口

存储器扩展实验

实验5 存储器扩展实验 一、实验目的 1.掌握PC存储器扩展的方法。 2.熟悉6264芯片的接口方法。 3.掌握8031内部RAM和外部RAM的数据操作 二、实验设备 PC机、星研Star16L仿真器系统+仿真头PODPH51(DIP)、EL-Ⅱ型通用接口板实验电路,PROTEUS仿真软件。 三、实验内容 1)向外部存储器的7000H到8000H区间循环输入00~0FFH数据段。设置断点,打开外部数据存储器观察窗口,设置外部存储器的窗口地址为7000H—7FFFH。全速运行程序,当程序运行到断点处时,观察7000H—7FFFH的内容是否正确。 四、实验原理 实验系统上的两片6264的地址范围分别为:4000H~5FFFH,6000H~7FFFH,既可作为实验程序区,也可作为实验数据区。6264的所有信号均已连好。(3000H~3FFFH也可用) 五、实验方法 1、运用PROTUES软件进行虚拟仿真实验。按照实验要求用PROTUES软件绘制电路,编制程序,并通过调试。 2、运用星研仿真系统进行实际系统仿真实验。将星研仿真器与微机和目标板相互连接构成完整的硬件仿真系统,按照实验要求在通用实验板上进行硬件系统连接,并用星研仿真器进行系统仿真运行调试。 3、实验说明 在采用星研仿真时,若CPU选型为8051则,应将P2、P3口修改为总线模式(默认为IO口模式)。若为8031CPU则无此选项,因此不必修改。 4、星研仿真器设置时,注意,在项目工作环境设置选项中的存储器借出方式中,不能借用仿真器的外部数据空间(直接选择默认方式即可),否则无法正确测试实验箱上的存储器。 5、利用星研仿真器,在选择用户板外部RAM方式下,可以在存储器窗口中,通过直接对外部存储器单元的内容进行修改来确定该单元是否可用,可以修改的单元,表明用户可用,如果无法修改(无论键盘输入任何数字与字符,始终显示FF),则表明该存储单元不可用。 六、实验电路 1、PROTEUS 仿真电路

基于Protues的Arduino学习笔记01-Arduino UNO实验板设计

基于Protues的Arduino学习笔记01-Arduino UNO实验板 设计 (2013-05-13 20:13:33) 本文将带你使用protues 7.10搭建一个Arduino UNO的实验板,方便以后在protues仿真软件上进行Arduino的实验。参考本文,你还可以自己动手构建出Arduino MEGA 2560等一系列Arduino开发平台。 Arduino UNO是Arduino USB接口系列的最新版本,是Arduino平台的参考标准模板。Arduino UNO的处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,Flash Memory 32KB (其中0.5KB 用于bootloader【注】)、SRAM 2KB、EEPROM 1KB,工作时钟 16 MHz【文献1】。 【注】:在仿真情况下,不需要bootloader去引导程序下载,只需要将Arduino IDE编译生成的HEX文件导入ATmega328P单片机即可。 以上对Arduino UNO的介绍摘自网上,通过这些介绍,我们可以知道Arduino UNO的资源分配情况。图1为Arduino UNO的引脚图,从图中我们可以清楚地看出ATmega328P的物理引脚与Arduino所定义的功能之间的关系,从而可以将功能引脚标注出来。

图1 Arduino UNO与ATmega328P引脚关系图【文献2】 Protues软件是英国Labcenter Electronics公司出版的EDA工具软件,不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件,是目前最好的仿真单片机及外围器件的工具【文献3】。 下面我们打开protues 7.10软件,进入元器件的选择,在元器件一栏中输入“ATmega328P”,并选取ATmega328P单片机,如图2所示。然后,在元器件一栏中输入“RES”,选取电阻, 如图3所示。接着,在元器件一栏中输入“LED-GREEN”,选取绿色的LED灯(你也可以选择红色或者黄色的),如图4所示。最后,在元器件一栏中输入“COMPIM”,并添加到元器件域中,如图5所示。

存储器和IO扩展实验,计算机组成原理

科技学院 课程设计实验报告 ( 2014--2015年度第一学期) 名称:计算机组成原理综合实验题目:存储器和I/O扩展实验 院系:信息工程系 班级: 学号: 学生姓名: 指导教师:李梅王晓霞 设计周数:一周 成绩: 日期:2015 年1 月

一、目的与要求 1. 内存储器部件实验 (1)熟悉ROM芯片和RAM芯片在功能和使用方法等方面的相同和差异之处;学习用编程器设备向EEPROM芯片内写入一批数据的过程和方法。 (2)理解并熟悉通过字、位扩展技术实现扩展存储器系统容量的方案; (3)了解静态存储器系统使用的各种控制信号之间正常的时序关系; (4)了解如何通过读、写存储器的指令实现对58C65 ROM芯片的读、写操作; (5)加深理解存储器部件在计算机整机系统中的作用。 2. I/O口扩展实验 学习串行口的正确设置和使用。 二、实验正文 1.主存储器实验内容 1.1实验的教学计算机的存储器部件设计(说明只读存储器的容量、随机读写器的容量,各选用了什么型号及规格的芯片、以及地址空间的分布) 在教学计算机存储器部件设计中,出于简化和容易实现的目的,选用静态存储器芯片实现内存储器的存储体,包括唯读存储区(ROM,存放监控程序等) 和随读写存储区(RAM)两部分,ROM存储区选用4片长度8位、容量8KB 的58C65芯片实现,RAM存储区选用2片长度8位、容量2KB的6116芯片 实现,每2个8位的芯片合成一组用于组成16位长度的内存字,6个芯片被分 成3组,其地址空间分配关系是:0-1777h用于第一组ROM,固化监控程序, 2000-2777h用于RAM,保存用户程序和用户数据,其高端的一些单元作为监 控程序的数据区,第二组ROM的地址范围可以由用户选择,主要用于完成扩 展内存容量(存储器的字、位扩展)的教学实验。 1.2扩展8K字的存储空间,需要多少片58C65芯片,58C65芯片进行读写时的特殊要求 要扩展8K字的存储空间,需要使用2片(每一片有8KB容量,即芯片内由8192个单元、每个单元由8个二进制位组成)存储器芯片实现。对 58C65 ROM芯片执行读操作时,需要保证正确的片选信号(/CE)为低点平, 使能控制信号(/OE)为低电平,读写命令信号(/WE)为高电平,读58C65 ROM 芯片的读出时间与读RAM芯片的读出时间相同,无特殊要求;对58C65 ROM 芯片执行写操作时,需要保证正确的片选信号(/CE)为低电平,使能控制信 号(/OE)为高电平,读写命令信号(/WE)为低电平,写58C65 ROM芯片的 维持时间要比写RAM芯片的操作时间长得多。为了防止对58C65 ROM芯片执 行误写操作,可通过把芯片的使能控制引脚(/OE)接地来保证,或者确保读 写命令信号(/WE)恒为高电平。 1.3在实验中思考为何能用E命令直接写58C65芯片的存储单元,而A命令则有时不正确;

实验五存储器读写实验报告

实验五存储器读写实验报告 实验报告 课程名:《计算机组成原理》题目:实验五存储器读写班级:计算机+ 自动化0901班姓名:张哲玮,郑俊飞 《计算机组成原理》实验报告- 1 - 实验五、存储器读写实验 一、目的与要求 (1)掌握存储器的工作特性 (2)熟悉静态存储器的操作过程,验证存储器的读写方法 二、实验原理及原理图 (1)?静态存储器芯片6116的逻辑功能 6116是一种数据宽度为8位(8个二进制位),容量为2048字节的静态存储器芯片,封在24引脚的封装中,封装型式如图2-7所示。6116芯片有8根双向三态数据线D7-D0,所谓三态是指输入状态,输出状态和高阻状态,高阻状态数据线处于一种特殊的“断开”状态;11根地址线A10-A0,指示芯片内部2048个存储单元号;3根控制线CS片选控制信号,低电平时,芯片可进行读写操作,高电平时,芯片保存信息不能进行读写;WE 为写入控制信号,低电平时,把数据线上的信息存入地址线A10-A0指示的存储单元中;0E为输出使能控制信号,低电平时,把地址线A10-A0指示的存储单元中的数据读出送到数据线上。

6116芯片控制信号逻辑功能表 (2).存储器实验单元电路 因为在计算机组成原理实验中仅用了256个存储单元,所以6116芯片的3根地址线A11-A8接地也没有多片联用问题,片选信号CS接地使芯片总是处于被选中状态。芯片的WE和0E信号分别连接实验台的存储器写信号M-W和存储器读信号M-Ro这种简化了控制过程的实验电路可方便实验进行。 存储器部件电路图 (3)?存储器实验电路 存储器读\写实验需三部分电路共同完成:存储器单元(MEM UNIT),地址寄存器单元(ADDRESS UNIT)和输入,输出单元(INPUT/OUTPIT UNIT).存储器单元6116芯片为中心构成,地址寄存器单元主要由一片74LS273组成,控制信号B-AR的作用是把总线上的数据送入地址寄存器,向存储器单元电路提供地址信息,输入,输出单元作用与以前相同。

arduino学习笔记18 - SD卡读写实验

本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。 需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。这次我是用的是kingmax2G的MicroSD卡。 先看一下硬件连接图

把下面代码下载进arduino 控制板 /* 此例子展示如果记录三个模拟引脚数值到SD 卡,使用SD 库。

电路部分 * 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器, 如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。 * SD卡与arduino控制板使用SPI总线连接 ** MOSI - pin 11 ** MISO - pin 12 ** CLK - pin 13 ** CS - pin 4 */ #include // CS引脚为pin4,这里也沿用官方默认设置 const int chipSelect = 4; //设定CS接口 void setup() { Serial.begin(9600); //设置串口通信波特率为9600 Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card... pinMode(10, OUTPUT); if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not present Serial.println("Card failed, or not present"); return; } Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized. }

计算机组成原理实验五存储器读写实验

实验五 存储器读写实验实验目的 1. 掌握存储器的工作特性。 2. 熟悉静态存储器的操作过程,验证存储器的读写方法。 二、实验原理 表芯片控制信号逻辑功能表

2. 存储器实验单元电路 芯片状态 控制信号状态 DO-D7 数据状态 M-R M -W 保持 1 1 高阻抗 读出 0 1 6116-^总钱 写人 1 0 总线-*6116 无效 报警 ^2-10 D7—DO A7—A0

團2-8存储器实验电路逻辑图 三、实验过程 1. 连线 1) 连接实验一(输入、输出实验)的全部连线。 2) 按逻辑原理图连接M-W M-R 两根信号低电平有效信号线 3) 连接A7-A0 8根地址线。 4) 连接B-AR 正脉冲有效信号 2. 顺序写入存储器单元实验操作过程 1) 把有B-AR 控制开关全部拨到0,把有其他开关全部拨到1,使全部信号都处 于无效 状态。 2) 在输入数据开关拨一个实验数据,如“ 00000001”即16进制的01耳 把IO-R 控制开关拨下,把地址数据送到总线。 3) 拨动一下B-AR 开关,即实现“1-0-1 ”产生一个正脉冲,把地址数据送地 址寄存器保存。 4) 在输入数据开关拨一个实验数据,如“ 10000000',即16进制的80耳 把IO-R 控 制开关拨下,把实验数据送到总线。 3. 存储器实验电路 0 O O 0 0 olo O O O O 0 00 OUTPUT L/O :W 8-AR £ ■」2 ■七 ol^Fgr' L P O 74LS273 A7- AO vz 0 o|o 0 r 6116 A7 INPUT D7-O0 [olololololololol T2

Arduin学习笔记

Arduin学习笔记 void setup{}函数初始化 void loop{}函数循环 pinMode(13,OUTPUT/INPUT)引脚13定义为输出、入模式digitalWrite(13,HIGH/LOW)13引脚输出高、低电平delay()延迟函数 analogRead() 读取模拟量函数 analogWrite()写入模拟量函数 map()函数 Serial.begin(波特率值)串口通信函数 Serial.print()是输出你要的内容横排显示 Serial.println()是输出要显示的内容后自动换行 Arduino 参考手册 Arduino 开发语言提供全部的 C 语言特性和 C++ 语言的部分特性 . 通过链接到 AVR 的 libc 库 online~

, 可以使 用库中提供的函数. 具体的应用细节请参考相关文档. 程序结构 在Arduino中, 标准的程序入口main函数在内部被定义, 用户只需要关心以下两个函数: void setup() void loop() setup()函数用于初始化, loop()函数用于执行. 初始化函数一般放在程序开头, 用于设置一些引脚的输出/输入模式, 初始化串口通讯等类似工作. loop()函数中的代码将被循环执行, 例 如: 读入引脚状态,设置引脚输出状态等. 控制语句 if if...else for switch while do...while break continue return goto 相关语法 ;(分号) {}(大括号) // (单行注释) /* * /(多行注释) #define #include 算术运算符 = (赋值) + (加) - (减) * (乘) / (除) % (取模) 比较运算符 == (等于) != (不等于) < (小于) > (大于)

STM32笔记(六)SD卡的读写和FatFS文件系统

STM32笔记(六)SD卡的读写和FatFS文件系统 因为要用,学习了一下SPI操作SD卡,同时移植了一个免费开源的FAT文件系统:FatFS。感觉挺好,在单片机上实现了读写文件的操作,接下来就可以解释我的G代码咯! 我的SD卡底层操作参考了网上几种常见的代码,但又对其结构做了一定的优化,至少看起来用起来比较方便。既可以作为文件系统的diskio使用,也可以直接使用底层函数,把SD卡作为一块flash读写。 FatFs文件系统体积蛮小,6-7K足矣,对于128Kflash的STM32来说很合适,代价不大。同时可移植性很高,最少只需要4个函数修改既可以实现文件系统的移植。相关文件系统的介绍请看这里。 这里给一套比较完整的参考资料,包括fatfs文件系统的原版资料、几个重要的手册和网上下载的代码。 https://www.wendangku.net/doc/3a7954031.html,/bbs/bbs_content.jsp?bbs_sn=3210864&bbs_page_no=1&bbs_id=3020 下面是我的代码: 其中底层的SPI总线对SD卡的操作在SPI_SD_driver.c/h中,而FATFS的移植文件diskio.c中对磁盘的操作函数中将调用底层的操作函数。下面是一些底层操作函数: u8 SPI_ReadWriteByte(u8 TxData); //SPI总线读写一个字节 u8 SD_WaitReady(void); //等待SD卡就绪 u8 SD_SendCommand(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令 u8 SD_SendCommand_NoDeassert(u8 cmd, u32 arg, u8 crc); //SD卡发送一个命令,不断线 u8 SD_Init(void); //SD卡初始化 u8 SD_ReceiveData(u8 *data, u16 len, u8 release); //SD卡读数据 u8 SD_GetCID(u8 *cid_data); //读SD卡CID u8 SD_GetCSD(u8 *csd_data); //读SD卡CSD u32 SD_GetCapacity(void); //取SD卡容量 u8 SD_ReadSingleBlock(u32 sector, u8 *buffer); //读一个sector u8 SD_WriteSingleBlock(u32 sector, const u8 *buffer); //写一个sector u8 SD_ReadMultiBlock(u32 sector, u8 *buffer, u8 count); //读多个sector u8 SD_WriteMultiBlock(u32 sector, const u8 *data, u8 count); //写多个sector 这是diskio.c中的一段代码,在disk初始化中,我们调用了SPI_SD_driver.c中的SD卡初始化函数。 DSTATUS disk_initialize ( BYTE drv /* Physical drive nmuber (0..) */ )

十个中文例程教会你轻松上手制作Arduino智能小车

十个中文例程教会你轻松上手制作Arduino智能小车 Arduino简介 Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的arduino 板)和软件(arduino IDE)。适用于艺术家、设计师、爱好者和对于“互动”有兴趣的朋友们。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器对Arduino的编程是利用Arduino编程语言(基于Wiring)和Arduino开发环境(based on Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信(比如Flash, Processing, MaxMSP)来实现。 你可以自己自己动手制作,也可以购买成品套装;Arduino所使用到的软件都可以免费下载。硬件参考设计(CAD 文件)也是遵循availableopen-source协议, 你可以非常自由地根据你自己的要求去修改他们。 本文精选了Arduino教程、例程、设计案例,集结了国内外官方资料和资深工程师的经验,是学习AArduino的必备宝典。 小车、机器人篇 1、Arduino互动玩偶BOXZ 此设计制作在2013年Atmel AVR英雄视频大赛中荣获奖励,并且参与了2014的深圳制汇节。BOXZ,昵称盒仔,其创意始于2012年6月初。当时的想法是设计一款基于Arduino 的入门级机器人,可以和三五好友在有限的空间里进行踢足球等互动,而且要做到取材容易制作简单,在设计的上采用了模块化的接插结构,同时还要注重外观拥有个性。 2、基于Arduino的自平衡遥控小车 车模平衡控制也是通过负反馈来实现的。因为车模有两个轮子着地,车体只会在轮子滚动的方向上发生倾斜。控制轮子转动,抵消在一个维度上倾斜的趋势便可以保持车体平衡了。 3 当自家的遥控蓝牙小车坏掉的时候不是只能扔掉,作为创客不但要学会制造东西,更要学会修理东西,来看看这位创客是如何修理他的小车的吧!小车采用大电流MOSFET做的电机驱动驱动电机,用Atmega328单片机作为主控,读取航模遥控器(天六A 2.4G)的PWM 信号,然后电机驱动板,转向舵机直接接到航模遥控器的横滚通道控制转向,用天六的第5通道(开关通道)选择前进还是后退 4、基于Arduino的盒子遥控机器人 BOXZ,昵称盒仔。是一款开源的互动娱乐平台!我们将Arduino,亚克力板和纸模型创意的结合在一起,让大家可以快速搭建自己的遥控玩偶,开展互动体验,而它的组装就像搭乐高积木一样简单!而盒仔的外形和功能完全取决于您的创意。我们可以用它来搞足球比赛,角色扮演,赛车或对战,甚至拍MV!

实验一 存储器实验

实验一存储器实验 1.FPGA中LPM_ROM定制与读出实验 一.实验目的 1、掌握FPGA中lpm_ROM的设置,作为只读存储器ROM的工作特性与配置方法。 2、用文本编辑器编辑mif文件配置ROM,学习将程序代码以mif格式文件加载于 lpm_ROM中; 3、在初始化存储器编辑窗口编辑mif文件配置ROM; 4、验证FPGA中mega_lpm_ROM的功能。 二.实验原理 ALTERA的FPGA中有许多可调用的LPM (Library Parameterized Modules)参数化的模块库,可构成如lpm_rom、lpm_ram_io、lpm_fifo、lpm_ram_dq的存储器结构。CPU 中的重要部件,如RAM、ROM可直接调用她们构成,因此在FPGA中利用嵌入式阵列块EAB 可以构成各种结构的存储器,lpm_ROM就是其中的一种。lpm_ROM有5组信号:地址信号address[ ]、数据信号q[ ]、时钟信号inclock、outclock、允许信号memenable,其参数都就是可以设定的。由于ROM就是只读存储器,所以它的数据口就是单向的输出端口,ROM中的数据就是在对FPGA现场配置时,通过配置文件一起写入存储单元的。图3-1-1中的lpm_ROM有3组信号:inclk——输入时钟脉冲;q[23、、0]——lpm_ROM的24位数据输出端;a[5、、0]——lpm_ROM的6位读出地址。 实验中主要应掌握以下三方面的内容: ⑴ lpm_ROM的参数设置; ⑵ lpm_ROM中数据的写入,即LPM_FILE初始化文件的编写; ⑶lpm_ROM的实际应用,在GW48_CP+实验台上的调试方法。 三.实验步骤 (1)用图形编辑,进入mega_lpm元件库,调用lpm_rom元件,设置地址总线宽度address[] 与数据总线宽度q[],分别为6位与24位,并添加输入输出引脚,如图3-1-1设置与连接。 (2)设置图3-1-1为工程。 (3)在设置lpm_rom数据参数选择项lpm_file的对应窗口中(图3-1-2),用键盘输入 lpm_ROM配置文件的路径(rom_a、mif),然后设置在系统ROM/RAM读写允许,以便能

atmel ASF学习笔记

Atmel asf学习笔记 前言 前一段时间入手了一块Arduino DUE开发板,入手后网上查询资料发现资料很少,并且和很多的模块不兼容,这块板子的IO口只能承受3.3v的电压,如果想使用5v的模块,又要动手做兼容模块。又因为这块板子采用的MCU是SAM3X8E 是一款ARM的主控,就想把它作为cortex M3开发板使用。 环境搭建 开发工具:atmel studio 6.1 烧写工具:bossac.exe 开发工具可以在Atmel官网下载,bossac.exe可以从arduino中提取 建立工程 为了快速上手这块板子,我决定采用atmel的asf框架 创建示例工程,由于在单片机程序开发中,需要通过串口输入输出调试信息,所以首先要实现串口通讯,这里先创建一个串口通讯程序的模板

接下来就ok了 编译通过下载到mcu中

接下来打开串口,查看输出信息 测试通过! ASF之串口学习 #include #include "asf.h"//包含了所需要的模块

#include "stdio_serial.h"//串口的出入输出定义 #include "conf_board.h" #include "conf_clock.h" #include "conf_example.h"//定义了串口中断入口函数,波特率,串口端口号 /** Size of the receive buffer used by the PDC, in bytes. */ #define BUFFER_SIZE 100 //定义外设DMA控制器缓冲区大小(字节) /** USART PDC transfer type definition. */ #define PDC_TRANSFER 1 //串口发送类型定义 /** USART FIFO transfer type definition. */ #define BYTE_TRANSFER 0 //串口发送队列类型定义 /** Max buffer number. */ #define MAX_BUF_NUM 1 /** All interrupt mask. */ #define ALL_INTERRUPT_MASK 0xffffffff /** Timer counter frequency in Hz. */ #define TC_FREQ 1 #define STRING_EOL "\r" #define STRING_HEADER "-- USART Serial Example --\r\n" \ "-- "BOARD_NAME" --\r\n" \ "-- Compiled: "__DATE__" "__TIME__" --"STRING_EOL /** Receive buffer. */ static uint8_t gs_puc_buffer[2][BUFFER_SIZE]; /** Next Receive buffer. */ static uint8_t gs_puc_nextbuffer[2][BUFFER_SIZE]; /** Current bytes in buffer. */ static uint32_t gs_ul_size_buffer = BUFFER_SIZE; /** Current bytes in next buffer. */ static uint32_t gs_ul_size_nextbuffer = BUFFER_SIZE; /** Byte mode read buffer. */ static uint32_t gs_ul_read_buffer = 0;

STM32学习笔记

1、GPIO函数: 输出: HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);//此例以PA12口为例 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET); //此例以PA12口为例 HAL_GPIO_ TogglePin(GPIOA,GPIO_PIN_12); //此例以PA12口为例 2、串口函数: 1、串口发送/接收函数 HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制 HAL_UART_Receive();串口轮询模式接收,使用超时管理机制 HAL_UART_Transmit_IT();串口中断模式发送 HAL_UART_Receive_IT();串口中断模式接收 HAL_UART_Transmit_DMA();串口DMA模式发送 HAL_UART_Transmit_DMA();串口DMA模式接收 2、串口中断函数 HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用 HAL_UART_TxCpltCallback();数据完全发送完成后调用 HAL_UART_RxHalfCpltCallback();一半数据接收完成时调用 HAL_UART_RxCpltCallback();数据完全接受完成后调用 HAL_UART_ErrorCallback();传输出现错误时调用 例程:串口接收中断 uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n"; uint8_t aRxBuffer[20]; 2、在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中 HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取目标长度 HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10); 3、在main.c文件后面添加中断接收完成函数,将接收到的数据又通过串口发送回去。 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { UNUSED(huart); HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时可以在中间加任何可执行代码。 }

相关文档
相关文档 最新文档