打印
[Atmel]

用AtmelStudio6.2跑mega16例程(71)MAX515

[复制链接]
996|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddllxxrr|  楼主 | 2014-12-15 22:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
司生产的一种低功耗的电压输出型10位串行D/A转换器,兼容SPI接口,MAX515固定增益为2,用+5V单电源工作。本例运行时,通过调节RV1向单片机输入模拟电压,单片机将A/D转换后的数字量输出给MAX515,经D/A转换后所输出的 模拟电压控制LED亮度变化

Proteus仿真截图:

Ateml Studio6.2 编译通过截图:

程序清单:
/*
* GccApplication34.c
*
* Created: 2014-12-15 21:07:48
* Author: Administrator
*/
#define F_CPU 4000000UL


#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>

#define SPI_EN() (PORTB &=~_BV(PB4))
#define SPI_DI() (PORTB |= _BV(PB4))

void SPI_MasterInit()
{
DDRB = 0B10110000;PORTB = 0xFF;
SPCR |= _BV(SPE)|_BV(MSTR)|_BV(SPR0);
}

uint8_t SPI_Transmit(uint8_t d)
{
SPDR = d;
while(!(SPSR & _BV(SPIF)));
SPSR |= _BV(SPIF);
return SPDR;
}

uint16_t ADC_Convert(uint8_t CH)
{
ADMUX = CH;
return ADC;
}



int main(void)
{
uint16_t dat;
DDRA = 0x00;
SPI_MasterInit();
ADCSRA = 0xE6;
_delay_ms(3000);
while(1)
{
//TODO:: Please write your application code
dat = ADC_Convert(4);
dat <<=2;
SPI_EN();
SPI_Transmit(dat>>8);
SPI_Transmit(dat);
SPI_DI();
_delay_ms(100);
}
}



相关帖子

沙发
ningling_21| | 2015-1-11 15:12 | 只看该作者
多谢LZ分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6963

帖子

68

粉丝