📄 dac.c
字号:
/* vim: set sw=8 ts=8 si : */
/*********************************************
* Author: Guido Socher, Copyright: GPL
*
* Digital to analog converter using a R-2R leadder
**********************************************/
#include <avr/io.h>
#include "avr_compat.h"
// dac takes an int instead of unsigned int to avoid conversion
// from the datatypes in analog.c but you can only use the positive values.
void dac(int value){
PORTD=value & 0xFF; // mask out 8 bits
// 0x300=1100000000
value=(value & 0x300)>>6; // mask out 2 msb bits and shift by 6
// F3=11110011
PORTC=(PORTC & 0xF3)|value; // change PC2 and PC3 only
}
void init_dac(void)
{
// enable PD0-PD7 as output PD0 is LSB in dac
DDRD=0xff;
// enable PC3 as output (MSB in dac)
sbi(DDRC,PC3);
// enable PC2 as output (MSB in dac)
sbi(DDRC,PC2);
// zero output
cbi(PORTC,PC3);
cbi(PORTC,PC2);
PORTD=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -