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

Обсуждаем контроллеры компании Atmel.
Ответить
mastersam
Родился
Сообщения: 19
Зарегистрирован: Ср авг 07, 2013 05:13:03

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

Сообщение mastersam »

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

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

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

Что не то и что не так? -В качестве указанного там регистра ADCSR, использовал ADCSRA
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

Полностью переписал с доки, страница с кодом из книги приложена.
в tiny13 нет порта D. весь проект с исходником в студию.
mastersam
Родился
Сообщения: 19
Зарегистрирован: Ср авг 07, 2013 05:13:03

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

Сообщение 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;
}
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

У вас в прерывании есть строка

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

volatile   int adc_result   =   ADC;

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

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

volatile   int adc_result   =   ADCW;

А что в вашем коде сейчас после этой строки в adc_result может оказаться мне даже сложно сходу предположить.
a_skr
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

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

Сообщение a_skr »

тоже и будет - 16-битный результат преобразования
iotn13a.h:

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

#ifndef __ASSEMBLER__
#define ADC _SFR_IO16(0x04)
#endif
#define ADCW _SFR_IO16(0x04)
Ответить

Вернуться в «AVR»