Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/30: Рейтинг темы: голосов - 30, средняя оценка - 4.70
0 / 0 / 0
Регистрация: 19.06.2009
Сообщений: 6
1

Проблема при чтении результата АЦП

30.01.2010, 19:13. Показов 5969. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Микроконтроллер ATmega8,программа должна измерять напряжение,обрабатывать и выводить на 7-й индикатор.АЦП работает в режиме однократных преобразований,без прерываний. Если не добавляю работу с АЦП - все работает,с АЦП нет! Пример с сайта:http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2008/cj72_xg37/cj72_xg37/index.html

программа доходит до while (ADCSR&ADCS);,и не выходит из цикла:

#include <avr/io.h>
#include <avr/interrupt.h>

#define D0 0 //
#define D1 1 // -/-
#define D2 2 // -/-
#define ADCS 6

#define ROWS PORTB /* ii?o aaieo ?iaeeaoi?a */
#define COLS PORTD /* ii?o ea?oaaiiy ?iaeeaoi?aie */

#define t1 1 // 1 ms ecie?aiea
#define t2 250 // 250 ms iaiiaeaiea ?acoeuoaoa
#define t3 8 // 8 ms aeiaie?aneay eiaeeaoey (1/8 in)=125Ao.!25/3=41Ao
volatile unsykned char time1, time2, time3;
// A yoeo ia?aiaiiuo o?aiyony oeo?u, eioi?ua io?ii ioia?osiou
volatile unsykned char Dysp0, Dysp1, Dysp2;
unsykned int volt = 0;

volatile const char Dig[11]=
{
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F, // 9
0x00, // clear
};

void task1();
void task2();
void task3();

inline void initiotyze(void)
{
DDRB=0xFF; // 1111 1111
DDRD |= _BV(0)|_BV(1)|_BV(2);
PORTD|=_BV(D2); // ?i?o?ae?c. aei. ?iaeeao??
ADMUX=1<<ADLAR|1<<REFS0|1<<REFS1;
ADCSR=1<<ADIM|1<<ADPS2|ADPS1;
TIMSK=1<<OCIE1A;
OCR1AL=125;
TCCR1B =(_BV(WGM12)|_BV(CS11)|_BV(CS10));
TCNT1H=0x00 ;
TCNT1L=0x00 ;

}

// Ooieoey auaaeyao oeo?u ec o?aocia?iiai ?enea Number
inline void Dysplay(unsykned int volt)
{
unsykned char Num1, Num2, Num3;
Num1=Num2=0;
while (volt >= 100)
{
volt -= 100;
Num1++;
}
while (volt >= 10)
{
volt -= 10;
Num2++;
}
Num3 = volt;
Dysp2 = Dig[Num1];
Dysp1 = Dig[Num2];
Dysp0 = Dig[Num3];

}

ISR(TIMER1_COMPA_vect)
{
if (time1 > 0) --time1;
if (time2 > 0) --time2;
if (time3 > 0) --time3;
}

int main(void)
{
initiotyze();
sei();
while(1)
{
if (time1 == 0) task1();
if (time2 == 0) task2();
if (time3 == 0) task3();
}
}

void task1() //ecia?aiea e ia?aaioea
{
volatile unsykned char Ain;
volatile unsykned char sample;
volatile unsykned int Suma;
time1 = t1;
ADCSR|=1<<ADCS;
while (ADCSR&ADCS);
Ain = ADCH; // read Ain0
Ain=Ain*Ain;
Suma=Suma+Ain;
sample++;
if (sample == 10)
{
volt=(Suma/10);
Suma=0;
sample=0;
}
}

void task2()
{

Dysplay(volt);
}

void task3() //aeiaie?aneay eiaeeaoey
{
time3 = t3;
if (COLS &_BV(D2))
{
COLS &=~_BV(D2); //off "2"
COLS &=~_BV(D1); //off "1" "iaeieo?"
COLS |=_BV(D0); //on "0"
ROWS=Dysp0;
}
else if (COLS &_BV(D0))
{
COLS &=~_BV(D0); // off"0"
COLS &=~_BV(D2); // off"2" "aanyoee"
COLS |=_BV(D1); // on ""
ROWS=Dysp1;
}
else if (COLS &_BV(D1))
{
COLS &=~_BV(D1); // off "1"
COLS &=~_BV(D0); // off "0" "nioi?"
COLS |=_BV(D2); // on "2"
ROWS=Dysp2 ;
}
}

[46.48 Кб]

[30.57 Кб]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2010, 19:13
Ответы с готовыми решениями:

FreeRTOS проблема при передаче данных с АЦП
На stm32f746 discovery настроена FreeRTOS, есть несколько задач, одна из которых это оцифровка...

Проблема при чтении изображения
Здраствуйте, имею одну проблемку при чтении из BMP-изображения в вектор — начиная с конкретного...

Проблема при чтении XML
Установил версию 10.3 и обрел проблему при парсинге XML, в котором несколько уровней узлов. ...

Проблема при чтении изображений в opencv
Всем привет!) Пишу программу для распознавания лиц с использованием библиотеки opencv на языке c++....

2
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 185
31.01.2010, 14:00 2
ADCSR|=1<<ADCS;
while (ADCSR&ADCS);

бит называется ADSC
условие в while неправильное, надо так:
while (ADCSR & (1 << ADSC) ;
0
0 / 0 / 0
Регистрация: 19.06.2009
Сообщений: 6
31.01.2010, 22:12 3
Цитата Сообщение от hittroysir
ADCSR|=1<<ADCS;
while (ADCSR&ADCS);

бит называется ADSC
условие в while неправильное, надо так:
while (ADCSR & (1 << ADSC) ;
Спасибо! на "while (ADCSR&ADCS);" компилятор даже не ругнулся-и очень трудно было найти в чем проблема!
0
31.01.2010, 22:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2010, 22:12
Помогаю со студенческими работами здесь

Проблема при бинарном чтении BMP файла
Проблема возникла при бинарном чтении BMP файла а точнее структуры BITMAPFILEHEADER и...

Проблема при чтении текстового файла программой
Добрая ночь, ув. форумчане! Помогите пожалуйста решить проблему возникшую при чтении текстового...

Проблема с кодировкой при чтении HTML-страницы
вот на этот запрос Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As...

Проблема с кодировкой при чтении текста из файла
в файле все норм отображает , но при считывание проблема с кодировкой , может кто знает как это...

Проблема при чтении из потока ввода std::cin
Здравствуйте. Суть проблемы в следующем: есть функция, выступающая &quot;заглушкой&quot; в конце некоторых...

Проблема при чтении текстового файла веб-приложения
Написал веб-приложение и экспортировал его в WAR файл. Закинул в папку webapps ТомКэта. Запускаю...

Проблема обработки регулярных выражений при чтении строки из файла
Добрый вечер. Выполнял задание и появилась такая проблема: Если создаю строку String в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru