为什么simulink里arduino uno没有analog output

为什么simulink里arduino uno没有analog output,第1张

请问你想问的是基于simulink的程序开发么?

舵机控制:实验目的:通过可变电阻器电压的大小,控制舵机的运动(运动范围是0-180°)。实验原理:1,要想实现上述目的,需要使用Arduino的模拟输入通道和一个数字通道,模拟输入通道用来检测电压的变化,模拟量0--5V,转化成数字量为0-1023。这是因为Arduino的AD转换是10位的,数字通道是最为舵机的控制,驱动舵机进行动作。2,根据Arduino的通道情况,实验中使用数字通道4作为舵机的控制通道,使用模拟输入4作为模拟电压检测通道。3,由1中可知模拟通道转换之后的值是0-1023,舵机旋转的角度是0-180°。所以要把两个对应起来,简单的做法就是转换后的模拟信号乘以180/1023实验步骤:1, 按照实验原理需要搭建模型,具体如下图所示,这里Simulink模块的添加步骤就不在赘述。

LED闪烁实验:1,首先打开simulink软件,新建一个模型文件,命名test1。2,从Simulink库文件中找到Arduino的模块库,然后添加数字输出通道;从simulink库中找到脉冲发生器模块添加到新建的工程中。3,模型搭建完之后,相关模块进行配置,双击脉冲发生器模块和数字输出模块下图所示;脉冲发生器模块信号幅值设置为1,周期设置2s,占空比设置为50%;由于在Arduino Mega2560板子上,LED是接在数字13号引脚,所以模块设置引脚为13,设置完之后,板子上的LED灯会以2s为周期进行闪烁,亮1s,灭1s。4,模型至此搭建完成,接下来需要对模型进行配置,主要是配置基于Arduino Mega2560生代码的环境。5, 接下来就是生代码,并且把代码编译之后,下载到Arduino Mega2560板子中,然后板子就会按照前面步骤的设置进行闪烁,下载程序之前,首先确保板子和电脑连接上了。6.等待一会,下载完毕之后,会看到板子上的LED在闪烁。

接线:p3.6接srd

p3.7接swr

p3.0接pin

p3.1接clk

ad0809的clk接脉冲

cs接8000h的译码电路程序:ad0809 xdata 8000h

org 0000h

ajmp main

org 0030h

main:mov dptr,#8000h

mov a,#01h

movx @dptr,a

call delay

movx a,@dptr

mov r0,a

call disp

call delay

call delay

call delay

ajmp maindisp:mov a,r0

anl a,#00001111b

acall dsend

mov a,r0

swap a

anl a,#00001111b

acall dsend

ret

dsend:mov dptr,#tab

movc a,@a+dptr

mov sbuf,a

jnb ti,$

clr ti

ret delay:mov r4,#250

delay1:mov r5,#250

djnz r5,$

djnz r4,delay1

ret

tab:db 03h 0

db 9fh 1

db 25h 2

db 0dh 3

db 99h 4

db 49h 5

db 41h 6

db 1fh 7

db 01h 8

db 09h 9

db 11h 灭

db 11h

db 0c1h

db 63h

db 85h

db 61h

db 71h

db 00h

end

//------------------------------------------------------------

// ADC0809模数转换

//ADC0809采样通道3输入的模拟量,转换后结果显示在数码管上

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

uchar code LEDData[]=

//ADC0809引脚定义

sbit OE=P1^0

sbit EOC=P1^1

sbit ST=P1^2

sbit CLK=P1^3

//延时

void Delayms(uint ms)

{

uchar i

while(ms--)for(i=0i<120i++)

}

//显示转换结果

void Display_Result(uchar d)

{

P2=0xf7

P0=LEDData[d%10]

Delayms(5)

P2=0xfd

P0=LEDData[d%100/10]

Delayms(5)

P2=0xfd

P0=LEDData[d/100]

Delayms(5)

}

// 主程序

void main()

{

TMOD=0x02

TH0=0x14

TL0=0x00

IE=0x82

TR0=1

P1=0x3f//选择ADC0809通道3(0111)

//高4位设通道地址为0111

while(1)

{

ST=0ST=1ST=0//启动转换

while(EOC==0) //等待转换结果

OE=1 //允许输出

Display_Result(P3) //显示A/D转换结果

OE=0 //关闭输出

}

}

//T0定时器中断给ADC0809提供时钟信号

void Timer0_INT() interrupt 1

{

CLK=!CLK//ADC0809时钟信号

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11301702.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存