Страница 1 из 1

attiny13A АЦП: не удаётся считать результат

Добавлено: Ср авг 21, 2013 12:18:46
mastersam
Не удаётся нормально считать результат работы АЦП: В протеусе при попытке эмуляции этого кода(да и иного тоже), говорит об ошибке записи в регистр ADCSRA.

Полностью переписал с доки, страница с кодом из книги приложена.
Изображение

При тестах - никакой реакции, когда подрубаю вход АЦП как к плюсу - так и к минусу питания(горит один и тот же светодиод)(((

Что не то и что не так? -В качестве указанного там регистра ADCSR, использовал ADCSRA

Re: attiny13A АЦП: не удаётся считать результат

Добавлено: Ср авг 21, 2013 12:40:21
a_skr
Полностью переписал с доки, страница с кодом из книги приложена.
в tiny13 нет порта D. весь проект с исходником в студию.

Re: attiny13A АЦП: не удаётся считать результат

Добавлено: Чт авг 22, 2013 12:03:04
mastersam
Всё, более-менее разобрался. Нижеуказанный код вполне себе-так работает:

#define F_CPU 9600000

#include <avr/interrupt.h>
#include <avr/signal.>
#include <avr/io.h>
#include <avr/delay.h>
#include <stdlib.h>

ISR(SIG_ADC)
{
volatile int adc_result = ADC;
if(adc_result > 1000)
{
PORTB = 0b00000001;
}
else if(adc_result < 255)
{
PORTB = 0b00000010;
}
else
{
PORTB = 0b00000100;
}
}




int main(void)
{

unsigned int adc_result;
DDRB = 0b00001111;
DIDR0 = 0b00010000; // Вырубаем цифровой буфер для PB4(если не планируется пользовать его для цифрового i/o)
ADMUX = 0b00000010; // ADC2 PB4
ADCSRA = 0b11101100;
asm("sei");
while(1);
return 0;
}

Re: attiny13A АЦП: не удаётся считать результат

Добавлено: Чт авг 22, 2013 12:39:02
eess9
У вас в прерывании есть строка

Код: Выделить всё

volatile	int adc_result	=	ADC;
Насколько мне известно на си до результата преобразования можно достучаться через ADCW
Попробуйте так:

Код: Выделить всё

volatile	int adc_result	=	ADCW;
А что в вашем коде сейчас после этой строки в adc_result может оказаться мне даже сложно сходу предположить.

Re: attiny13A АЦП: не удаётся считать результат

Добавлено: Чт авг 22, 2013 12:53:58
a_skr
тоже и будет - 16-битный результат преобразования
iotn13a.h:

Код: Выделить всё

#ifndef __ASSEMBLER__
#define ADC _SFR_IO16(0x04)
#endif
#define ADCW _SFR_IO16(0x04)