Добрый день.
Необходимо выполнить АЦП с ноги PC5 МК Atmega48
Ни в какую не получается сделать.
Нужно считывать напряжение на ноге и выводить его на дисплей. Загвоздка как раз в снятии напряжения.
Если не сложно, дайте кусочек кода(СИ), касающийся именно АЦП именно для ноги PC5, или хотя бы ткните носом где почитать на русском языке про регистры:
ADMUX,ADCSRA как правильно в них проставить биты что бы АЦП зашевелился???
Делаю так:
#define ADC_VREF_TYPE 0x00
interrupt [ADC_INT] void adc_isr(void)
{
adc_data=ADCW;
ADCSRA|=0x40;
}
DIDR0=0x00;
ADMUX=5 | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCB;
ADCSRA|=0x40;
при этом прерывание вызывается всего 1 раз в самом начале старта МК. т.е. считывается напряжение с 5й ноги и на этом прерывания от АЦП прекращаются.
Подскажите что здесь не так? может я не допонимаю, но мне кажется что строка ADCSRA|=0x40; запускает новое АЦП, после этого сигнал оцифровывается и должно вызваться прерывание interrupt [ADC_INT] void adc_isr(void), в котором считываются два байта ADCL и ADCH (в моем случае считывается виртуальный ADCW) и после этого я опять даю команду на АЦП (ADCSRA|=0x40;) - и все должно повториться, но не повторяется.
Где я накосячил?
Необходимо выполнить АЦП с ноги PC5 МК Atmega48
Ни в какую не получается сделать.
Нужно считывать напряжение на ноге и выводить его на дисплей. Загвоздка как раз в снятии напряжения.
Если не сложно, дайте кусочек кода(СИ), касающийся именно АЦП именно для ноги PC5, или хотя бы ткните носом где почитать на русском языке про регистры:
ADMUX,ADCSRA как правильно в них проставить биты что бы АЦП зашевелился???
Делаю так:
#define ADC_VREF_TYPE 0x00
interrupt [ADC_INT] void adc_isr(void)
{
adc_data=ADCW;
ADCSRA|=0x40;
}
DIDR0=0x00;
ADMUX=5 | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCB;
ADCSRA|=0x40;
при этом прерывание вызывается всего 1 раз в самом начале старта МК. т.е. считывается напряжение с 5й ноги и на этом прерывания от АЦП прекращаются.
Подскажите что здесь не так? может я не допонимаю, но мне кажется что строка ADCSRA|=0x40; запускает новое АЦП, после этого сигнал оцифровывается и должно вызваться прерывание interrupt [ADC_INT] void adc_isr(void), в котором считываются два байта ADCL и ADCH (в моем случае считывается виртуальный ADCW) и после этого я опять даю команду на АЦП (ADCSRA|=0x40;) - и все должно повториться, но не повторяется.
Где я накосячил?

