0 / 0 / 0
Регистрация: 19.06.2009
Сообщений: 6
|
|
1 | |
Проблема при чтении результата АЦП30.01.2010, 19:13. Показов 5969. Ответов 2
Метки нет (Все метки)
Микроконтроллер 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
|
30.01.2010, 19:13 | |
Ответы с готовыми решениями:
2
FreeRTOS проблема при передаче данных с АЦП Проблема при чтении изображения Проблема при чтении XML Проблема при чтении изображений в opencv |
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
0
|
31.01.2010, 22:12 | |
31.01.2010, 22:12 | |
Помогаю со студенческими работами здесь
3
Проблема при бинарном чтении BMP файла Проблема при чтении текстового файла программой Проблема с кодировкой при чтении HTML-страницы Проблема с кодировкой при чтении текста из файла Проблема при чтении из потока ввода std::cin Проблема при чтении текстового файла веб-приложения Проблема обработки регулярных выражений при чтении строки из файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |