Среда разработки: Atmel Studio 7
Симуляция в протеус 8. Ошибка звучит так:
PC=0x00F0. [AVR AD CONVERTER] Result is not written to the ADC register because it has been locked. [U1]
PC=0x00F2. [AVR AD CONVERTER] Result is not written to the ADC register because it has been locked. [U1]
PC=0x00F6. [AVR AD CONVERTER] Result is not written to the ADC register because it has been locked. [U1]
PC=0x00F0. [AVR AD CONVERTER] Result is not written to the ADC register because it has been locked. [U1]
PC=0x00F4. [AVR AD CONVERTER] Result is not written to the ADC register because it has been locked. [U1]
Минимальная схема и код повторяющий ошибку:
Код:
#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile uint16_t analogData;
ISR (ADC_vect) {
analogData = (ADCH<<8) + ADCL;
}
int main(void) {
DDRB &= ~(1<<PORTB4); // PB4 на вход
// Настраиваем работу с ADC (АЦП)
ADMUX |= (1<<REFS0) | (1<<ADLAR) | (1<<MUX1); // опорное напряжение - Internal, левое ориентирование данных, выбран вход ADC2 (на него подается измеряемое напряжение)
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADATE) | (1<<ADIE) | (1<<ADPS2); // АЦП включен, запуск преобразования, режим автоизмерения, прерывание по окончанию преобразования, частота CLK/4
ADCSRB = 0x00; // режим автоизмерения: постоянно запущено
DIDR0 |= (1<<ADC2D); // запрещаем цифровой вход на ноге аналогового входа
sei(); //разрешаем глобально прерывания
while (1) {
}
}
Что я забыл или сделал не так? ![]()
ЗЫ: Даташит
