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

[复制链接]
1198|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 编译通过截图:

程序清单:
  1. /*
  2. * GccApplication34.c
  3. *
  4. * Created: 2014-12-15 21:07:48
  5. * Author: Administrator
  6. */
  7. #define F_CPU 4000000UL


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

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

  13. void SPI_MasterInit()
  14. {
  15. DDRB = 0B10110000;PORTB = 0xFF;
  16. SPCR |= _BV(SPE)|_BV(MSTR)|_BV(SPR0);
  17. }

  18. uint8_t SPI_Transmit(uint8_t d)
  19. {
  20. SPDR = d;
  21. while(!(SPSR & _BV(SPIF)));
  22. SPSR |= _BV(SPIF);
  23. return SPDR;
  24. }

  25. uint16_t ADC_Convert(uint8_t CH)
  26. {
  27. ADMUX = CH;
  28. return ADC;
  29. }



  30. int main(void)
  31. {
  32. uint16_t dat;
  33. DDRA = 0x00;
  34. SPI_MasterInit();
  35. ADCSRA = 0xE6;
  36. _delay_ms(3000);
  37. while(1)
  38. {
  39. //TODO:: Please write your application code
  40. dat = ADC_Convert(4);
  41. dat <<=2;
  42. SPI_EN();
  43. SPI_Transmit(dat>>8);
  44. SPI_Transmit(dat);
  45. SPI_DI();
  46. _delay_ms(100);
  47. }
  48. }



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ningling_21 发表于 2015-1-11 15:12 | 显示全部楼层
多谢LZ分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

2404

主题

7002

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部