|
|
  |
Вывод напряжения на LCD с ATmega32 |
|
|
|
Jul 21 2011, 06:20
|
Группа: Новичок
Сообщений: 7
Регистрация: 21-07-11
Пользователь №: 66 332

|
Помогите пожалуйста разобраться, задача такая: в CVAvr измерить напряжение на любом входе, где стоит переменный резистор, вывести значение напряжения на LCD с помощью типов int, float, char. Необходимо написать программу без использования прерываний.
|
|
|
|
|
Jul 21 2011, 07:24
|
Группа: Новичок
Сообщений: 7
Регистрация: 21-07-11
Пользователь №: 66 332

|
Цитата(Dog Pawlowa @ Jul 21 2011, 11:21)  Что именно непонятно? как бы в принципе всё, т.к. впервые столкнулся с программированием контроллеров, кровь из носу нужно разбираться в этом деле, причем срочно. Не могу разобраться с портами что куда и как. я понимаю, что задача тривиальна, но все же не получается
|
|
|
|
|
Jul 21 2011, 15:31
|
Группа: Новичок
Сообщений: 7
Регистрация: 21-07-11
Пользователь №: 66 332

|
Цитата(kovigor @ Jul 21 2011, 11:33)  Даташит прочитан ? Если нет, говорить не о чем. И книг по AVR масса. Тот же Трамперт и еще много много всякой литературы: http://lord-n.narod.ru/walla.htmlПрочитан. Книги есть. Но не помогло особо пока что. мне проще понять, когда есть реальный пример. Цитата(Сергей Борщ @ Jul 21 2011, 12:36)  Из чего вытекает такое требование? Из ТЗ
|
|
|
|
|
Jul 21 2011, 20:38
|
Группа: Новичок
Сообщений: 7
Регистрация: 21-07-11
Пользователь №: 66 332

|
Цитата(haker_fox @ Jul 21 2011, 20:40)  И кто такие странные ТЗ раздает?
По делу: примеры в сети нужно искать. Но без базовых знаний вряд ли Вы сразу все разберете. Откажитесь от выполнения задания. Отказывать простительно, непростительно соглашаться и делать ошибки. эээ. Дают. Для того чтоб разобраться с простыми принципами, но в силу особенностей моего мозга мне гораздо проще глянуть на пример и понять основы, нежели пыхтеть изучая их методом проб и ошибок в силу ограниченности времени. Примеры в сети искались. Подходящего не нашел. Отказаться нельзя. По прежнему жду, что кто-либо поможет все таки кодом.
|
|
|
|
|
Jul 21 2011, 20:53
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
А что из оборудования у Вас есть? JTAG там, плата отладочная, какие версии софта? а то напишет кто-нибудь под CV выпуска так года 2003, а у Вас этот пример не соберется. Да и LCD разные бывают. Upd: вот, наковырял. Код #include <alcd.h> #include <delay.h> // ******************** ADC ***************************** // инициализация АЦП void adc_init(void){ ADMUX = (0<<REFS1)|(1<<REFS0); // AVCC - 5v ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // CK/128 //ADCSRB = (1<<ADTS2)|(1<<ADTS1)|(0<<ADTS0); // timer1 overflow } // разовое чтение АЦП поллингом unsigned short int adc_convert(unsigned char channel){ unsigned short int result; ADMUX = (ADMUX & 0xF0)|channel; ADCSRA |= (1<<ADSC);
while (!(ADCSRA & (1<<ADSC))); result = ( ((unsigned short int)ADCH << 8) | (unsigned short int)ADCL); return result; } char flash fmt[] = "%d"; void main(void) { char buf[16]; unsigned short int adc_data; lcd_init(16); while(1) { adc_data = adc_convert(0); lcd_clear(); lcd_gotoxy(0,0); sprintf(buf, fmt, adc_data); lcd_puts(buf); вудфн_ьы(100)ж } } Лаба или курсач?
|
|
|
|
|
Jul 21 2011, 21:43
|
Группа: Новичок
Сообщений: 7
Регистрация: 21-07-11
Пользователь №: 66 332

|
Цитата(Leen @ Jul 22 2011, 00:53)  А что из оборудования у Вас есть? JTAG там, плата отладочная, какие версии софта? а то напишет кто-нибудь под CV выпуска так года 2003, а у Вас этот пример не соберется. Да и LCD разные бывают. Из оборудования все есть, Codevision есть последний и 1.25 Цитата(Leen @ Jul 22 2011, 00:53)  Лаба или курсач? Ни то, ни то. На работе решили меня нагрузить этим, радует только что Atmel, а не Freescale достался. Спасибо большое за помощь.
|
|
|
|
|
Jul 22 2011, 07:23
|
Группа: Новичок
Сообщений: 7
Регистрация: 21-07-11
Пользователь №: 66 332

|
Цитата(zltigo @ Jul 22 2011, 02:18)  Не верится категорически. Ограничения задания абсолютно надуманы, а сама цель "работы" совершенно бесполезна. Не верится и не надо. Ограничения даны для того, чтобы пошагово разобраться с новым для себя разделом. Собственно и цель, как Вы говорите, "работы" такая же. Далее задания по нарастающей. Или необходимо было начинать обучение с создания программы на камне Motorolla или Freescale в каком-нибудь медицинском комплексе который пойдет в серию? Не, спасибо. Цель Вашего комментария непонятна. "Тонкий" троллинг? Толсто!
|
|
|
|
|
Jul 22 2011, 07:43
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(inaugeego @ Jul 22 2011, 09:23)  Или необходимо было начинать обучение с создания программы на камне Motorolla или Freescale в каком-нибудь медицинском комплексе который пойдет в серию? В серию конечно нет, но а на каком "камне" - какая разница? Конечно есть разница между Tiny и Cortex M3, а тем более Cortex A8, но не такая уж и глобальная (пока в дебри не лезть). Процесс освоение нового "камня", это по минимуму: 1) знакомство с распределением памяти и стартом процессора (откуда начинает, начальная инициализация). 2) постепенное знакомство с периферийными устройствами в проце. Все остальное - это уже "шлифовка". Переферия - почему "постепенно", потому что для начала достаточно порт освоить (т.е. ногодрыганье), из-за чего Hello world в МК это "помигать светодиодиком". Затем лично я предпочитаю разобраться с таймером, хотя бы одним, и прерыванием от него - чтобы можно было сделать системные часы и делать всякие временные задержки, но это необязательно. В Вашей задаче - после портов надо с АЦП разбираться, задержку в концйе концов, можно и тупым циклом поначалу сделать. Ваша программа будет выгладеть примерно так: Код void main(void) { int ADC_Result;
InitProc(); // начальная инициализация процессора и его периферии InitLCD(); while(1) { Deleay(?);// задержка на ? время ADC_Result=GetADC(); LCD_Print(ADC_Result); } } А вот чтобы написать все внутренние функции - это Вам придется разбираться самостоятельно.
|
|
|
|
|
Jul 22 2011, 09:11
|
Группа: Новичок
Сообщений: 7
Регистрация: 21-07-11
Пользователь №: 66 332

|
Цитата(Allregia @ Jul 22 2011, 11:43)  В серию конечно нет, но а на каком "камне" - какая разница? Конечно есть разница между Tiny и Cortex M3, а тем более Cortex A8, но не такая уж и глобальная (пока в дебри не лезть). К сожалению именно в дебри с ATmega лезть и придется. Цитата(Allregia @ Jul 22 2011, 11:43)  Процесс освоение нового "камня", это по минимуму: 1) знакомство с распределением памяти и стартом процессора (откуда начинает, начальная инициализация). 2) постепенное знакомство с периферийными устройствами в проце.
Все остальное - это уже "шлифовка". Переферия - почему "постепенно", потому что для начала достаточно порт освоить (т.е. ногодрыганье), из-за чего Hello world в МК это "помигать светодиодиком". Затем лично я предпочитаю разобраться с таймером, хотя бы одним, и прерыванием от него - чтобы можно было сделать системные часы и делать всякие временные задержки, но это необязательно. Спасибо за полезные советы Цитата(Allregia @ Jul 22 2011, 11:43)  В Вашей задаче - после портов надо с АЦП разбираться, задержку в концйе концов, можно и тупым циклом поначалу сделать. Ваша программа будет выгладеть примерно так: Код ... А вот чтобы написать все внутренние функции - это Вам придется разбираться самостоятельно. Спасибо, задача уже мной успешно решена была, со всем разобрался, дальше работать проще.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|