历史上的今天
今天是:2025年06月21日(星期六)
2018年06月21日 | AVRmega16通过一个定时器实现多路IO口输出多路可调的PWM
2018-06-21 来源:eefocus
本人在做舞蹈机器人时,想到了通过一个定时器实现多路IO口输出多路可调的PWM,用于控制舞蹈机器人各部分的舵机。这个方法比较简洁而且实现自己的要求,且易于理解。
/*角度值:15度500us(10)——215度2500us(50)
端口A0——A5 B0——B5 C0——C5 */
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define dt 70
#define sp 18
#pragma interrupt_handler timer0:10
#pragma interrupt_handler timer1:9
uint base0=0,base1=0;
uchar i,k;
uint j=0;
uchar s[18]={14,15,14,2,17,13,13,13,5,14,12,5,14,6,8,17,12,14};
uchar std[18]={14,6,14,2,14,13,13,13,5,5,12,5,14,6,10,17,12,12};
void chushi()
{
uchar i;
for(i=0;i<18;i++)
s[i]=std[i];
}
void timer_init() //中断初始化
{
TCNT1H=0XFF; //定时器1 初始化
TCNT1L=0XD2; //0.05ms定时初值,准确
TCCR1B=0X02; //8分频
TCCR0=0X02;//计数器0 8分频
TCNT0=0XD2;//计数器0 50us中断一次
TIMSK=0X05;//开启中断溢出中断0
SREG=0X80;//开启总中断
}
void main()
{
chushi();
timer_init();
}
void timer0()//每50us中断一次产生占空比可调的pwm
{
TCNT0=0XD2;//计数器0 50us中断一次
base0++;
if(base0==378)
{ base0=0;
PORTA=0xff;
PORTC=0xff;
}
for(i=0;i<12;i++)//A口 s[0]——s[5] C口 s[6]——s[11]端口输出脉冲
{
if(i<=5)
{
if(base0==s[i])
PORTA&=~BIT(i);
}
if(i>5)
{
if(base0==s[i])
{
j=i-6;
PORTC&=~BIT(j);
}
}
}
}
void timer1(void)
{
TCNT1H=0XFF;
TCNT1L=0XD2; //重装初值
base1++;
if(base1==378)
{ base1=0;
PORTB=0xff;
}
for(k=12;k<18;k++) //B 口S[12]——s[17]
{
if(base1==s[k])
{
史海拾趣
|
详细介绍PIC单片机使用SPI方式与IC卡进行数据传输的原理和电路设计,以及使用USART方式与PC机进行串行异步通信的工作原理;介绍PIC单片机听SPI方式和USART方式的设置方法。… 查看全部问答> |
|
TJA1020 是LIN 主/从协议控制器和LIN Local Interconnect Network 物理总线之间的接口主要用作为车辆中的副网络使用的波特率可从2.4 到20Kbits/s协议控制器向TXD 引脚输入的传输数据流通过LIN 收发器转换成总线信号并由收发器控制回转速率和波形以 ...… 查看全部问答> |
|
介绍 在分析应用技术被市场采纳比重的时候,处于人类科学前沿的医疗器械市场,总是显得保守和谨慎。当其他工业和消费类市场沉浸于无线连接、网络及英特网的潜在应用时,医疗领域仍继续采用传统的已经测试使用的技术。然而诸如人口老龄化、高涨的医 ...… 查看全部问答> |
|
平台:AU1250(MIPS) 系统:WINCE 5.0 开发基于AU1250+WINCE 5.0下面的ST16C554驱动,做过类似的项目的朋友加我: QQ:525074092 MSN: zhaozw1975@hotmail.com … 查看全部问答> |
|
大家几年前搞的东东,我现在才弄,而且还有很多不懂,真是惭愧。 我有几个问题想请教各位大虾。 1.采用Multi-Bin方式启动WinCE,Bootloader是否只能用eBoot。 2.若不是,其他的Bootloader势必要解决BinFS格式化的问题,请问哪位有BinFS文件系统 ...… 查看全部问答> |
|
我定义了一个uchar[1]数组,其中uchar[0]保存一个汉字unicode编码值的高8位,uchar[1]保存这个汉字unicode编码值的低8位, 请问如何把这两个字节合并出一个完整的汉字unicode编码值?… 查看全部问答> |
|
我在网上发现针对不同的USB产品,需要开发不同的驱动; 我是做上位机程序的,我只需要通过USB传输通信数据(采集温度数据),想请教: 1) 一些USB芯片生产商或代理商会提供上位机的USB驱动吗(例如 philips,周立功会提供USB驱动吗); 2) 例如需要自己做 ...… 查看全部问答> |
|
如何采用Verilog实例化带参数(generic)的VHDL模块 请教一个问题:Verilog中实例化一个带参数的VHDL模块:VHDL模块如下:entity x is generic(a,b : integer); port( ...Verilog调用采用如下两种方式:方式1: genvar i,j; generate & ...… 查看全部问答> |
|
写M16与光强传感器TSL2561的程序,该怎么去设置TSL2561的读写地址(TSL2561_WR,TSL2561_RD)我看有用51的程序是自己设置的,不知道在m16上怎么设置,下面是TSL2561资料上的程序,不知道怎么去设置TSL2561_WR,TSL2561_RD的地址,求指教 void TSL2 ...… 查看全部问答> |




