Перейти к содержанию
    

Вывод напряжения на LCD с ATmega32

Помогите пожалуйста разобраться, задача такая:

в CVAvr измерить напряжение на любом входе, где стоит переменный резистор, вывести значение напряжения на LCD с помощью типов int, float, char. Необходимо написать программу без использования прерываний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что именно непонятно?

как бы в принципе всё, т.к. впервые столкнулся с программированием контроллеров, кровь из носу нужно разбираться в этом деле, причем срочно. Не могу разобраться с портами что куда и как. я понимаю, что задача тривиальна, но все же не получается

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как бы в принципе всё,

 

Даташит прочитан ? Если нет, говорить не о чем. И книг по AVR масса. Тот же Трамперт и еще много много всякой литературы:

 

http://lord-n.narod.ru/walla.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимо написать программу без использования прерываний.
Из чего вытекает такое требование?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Даташит прочитан ? Если нет, говорить не о чем. И книг по AVR масса. Тот же Трамперт и еще много много всякой литературы:

 

http://lord-n.narod.ru/walla.html

Прочитан. Книги есть. Но не помогло особо пока что. мне проще понять, когда есть реальный пример.

 

Из чего вытекает такое требование?

Из ТЗ

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из ТЗ

И кто такие странные ТЗ раздает?

 

По делу: примеры в сети нужно искать. Но без базовых знаний вряд ли Вы сразу все разберете. Откажитесь от выполнения задания. Отказывать простительно, непростительно соглашаться и делать ошибки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И кто такие странные ТЗ раздает?

 

По делу: примеры в сети нужно искать. Но без базовых знаний вряд ли Вы сразу все разберете. Откажитесь от выполнения задания. Отказывать простительно, непростительно соглашаться и делать ошибки.

эээ. Дают. Для того чтоб разобраться с простыми принципами, но в силу особенностей моего мозга мне гораздо проще глянуть на пример и понять основы, нежели пыхтеть изучая их методом проб и ошибок в силу ограниченности времени. Примеры в сети искались. Подходящего не нашел. Отказаться нельзя. По прежнему жду, что кто-либо поможет все таки кодом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что из оборудования у Вас есть? 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)ж
  }
}

Лаба или курсач?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что из оборудования у Вас есть? JTAG там, плата отладочная, какие версии софта? а то напишет кто-нибудь под CV выпуска так года 2003, а у Вас этот пример не соберется. Да и LCD разные бывают.

Из оборудования все есть, Codevision есть последний и 1.25

 

Лаба или курсач?

Ни то, ни то. На работе решили меня нагрузить этим, радует только что Atmel, а не Freescale достался.

Спасибо большое за помощь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ни то, ни то.

Не верится категорически. Ограничения задания абсолютно надуманы, а сама цель "работы" совершенно бесполезна.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не верится категорически. Ограничения задания абсолютно надуманы, а сама цель "работы" совершенно бесполезна.

Не верится и не надо. Ограничения даны для того, чтобы пошагово разобраться с новым для себя разделом. Собственно и цель, как Вы говорите, "работы" такая же. Далее задания по нарастающей. Или необходимо было начинать обучение с создания программы на камне Motorolla или Freescale в каком-нибудь медицинском комплексе который пойдет в серию? Не, спасибо. Цель Вашего комментария непонятна. "Тонкий" троллинг? Толсто!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или необходимо было начинать обучение с создания программы на камне 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);         
      }
}

 

А вот чтобы написать все внутренние функции - это Вам придется разбираться самостоятельно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В серию конечно нет, но а на каком "камне" - какая разница? Конечно есть разница между Tiny и Cortex M3, а тем более Cortex A8, но не такая уж и глобальная (пока в дебри не лезть).

 

К сожалению именно в дебри с ATmega лезть и придется.

 

Процесс освоение нового "камня", это по минимуму:

1) знакомство с распределением памяти и стартом процессора (откуда начинает, начальная инициализация).

2) постепенное знакомство с периферийными устройствами в проце.

 

Все остальное - это уже "шлифовка".

Переферия - почему "постепенно", потому что для начала достаточно порт освоить (т.е. ногодрыганье), из-за чего Hello world в МК это "помигать светодиодиком".

Затем лично я предпочитаю разобраться с таймером, хотя бы одним, и прерыванием от него - чтобы можно было сделать системные часы и делать всякие временные задержки, но это необязательно.

Спасибо за полезные советы

 

В Вашей задаче - после портов надо с АЦП разбираться, задержку в концйе концов, можно и тупым циклом поначалу сделать.

Ваша программа будет выгладеть примерно так:

...

А вот чтобы написать все внутренние функции - это Вам придется разбираться самостоятельно.

Спасибо, задача уже мной успешно решена была, со всем разобрался, дальше работать проще.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цель Вашего комментария непонятна.

Не ставить и не заниматься бессмысленными задачами. Бессмысленность постановки задачи тянет за собой и бессмысленность полученного результата и "опыта".

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...