denvel пишет:Использую WinAvr, но скачать и немного освоиться для меня не проблема. Я еще не сильно углубился, и сменить компилятор не проблема. Я так думую
Я бы советовал вам перейти на CodeVisionAVR, если скачайте то нужно будет еще книга "CodeVisionAVR для начинающих" (также легко доступна в интернете). А функция пишется так :
CODE:
#include <mega16.h>
#include <delay.h>
#define LED PORTC.0
#define ADC_VREF_TYPE 0x20
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main (void)
{
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
DDRC.0 = 1; // LED out
while(1)
{
if(read_adc(0) > 512) LED = 1; // если напряжение на пине 0 порта А больше половины //питания МК то зажигаем светодиод
else LED = 0 // иначе тушем
};
}
Итак функцией read_adc(adc_input) мы "приказываем" МК прочитать значение напрежение на на номере входа порта А (В данном случае для примера я показал пример с МК ATmega16 на частоте 8МГц и напряжением питания 5В). Также нужно понимать то что разрядность АЦП 10 Бит, максимальное значение равняется 1023 (5V), минимальное 0 (0В)
Кстати этот код сгенирирован автоматически, в компиляторе есть много таких полезных штучек. Посмотрите если интересно(Отредактировано автором: 07 Апреля, 2012 - 19:20:23) |