INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

АЦП (ADC) в AVR mega88 (mega8, mega48, mega168, mega328)

№ 5146 В разделах: Electronics Programming от May 6th, 2013,
В подшивках:

По работе мне понадобилось сделать датчик поворота руля. Самый простой и точный способ это выдернуть шифратор из обычной компьютерной мыши, пришаманить его к рулевой колонке, а потом тупо считать подаваемые импульсы. А что если руководитель проекта подумал, что сделать это с помощью переменного резистора гораздо круче? Ну раз он захотел, то почему бы и нет? Ну подумаешь точность немного упадет 🙂 Все равно компьютер будет подруливать.

Чтобы ADC заработал нужно подключить AGND, AREF и AVCC к питанию. Резистор нужно подключить к ADC0 согласно схеме на рисунке ниже.
sNRkfEiZeFSjInT7nvBGsBg

Теперь необходимо инициализировать АЦП. Включаем нужный пин на вход (я это сделал довольно грубо и одним махом сделал входом весь порт C), устанавливаем делитель в ADCSRA на 256, в DIDR0 отключаем ненужные входы АЦП 1, а нужные 0 и настраиваем мультиплексор.

void initADC(void) {
   DDRC = 0;
   PORTC = 0xFF; 
   PRR |= (1<<PRADC);
   ADCSRA = (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
   DIDR0=0b00111110;
   ADMUX = (1<<MUX0);
}

Чтобы снизить шумы можно применить LC фильтр, описаный в даташите

adc_noise_reduce

Теперь можно начать читать из АЦП значения. Они будут изменяться от 0 до 1023.

  int adc_value=0;
  while (1) {
      sumsung_clr();
      sumsung_goto(0,0);
      fprintf_P(&display,PSTR("%02d\n"), adc_value);
      _delay_ms(300);
      ADCSRA |= (1<<ADSC)|(1<<ADEN);
      while((ADCSRA & (1<<ADSC))!=0) ;
      adc_value=ADC; 
  }

Должно получиться что-то типа такого

2013-05-07 00.34.21

Демонстрационный стенд с подключеным экраном

2 комментариев »

2 responses to “АЦП (ADC) в AVR mega88 (mega8, mega48, mega168, mega328)”

  1. Руслан says:

    Здравствуйте, Владимир.
    Подскажите, как можно прошить ATtiny45 с помощью Arduino Nano? Возможно ли такое?
    Ограничения такие:
    1. Из программатора только Arduino Nano с разъемом ICSP
    2. Прошивка в виде *.hex, т.е. прога Arduino IDE отпадает – она не знает hex.

    Подключение ATtiny45 к Nano я нашел (http://blog.roguecode.co.za/make-dirt-cheap-electronics-with-attiny45-arduino-nano/), но не знаю чем прошивать.

  2. 21h says:

    большинство программаторов AVR работает на частоте 12 мгц и выше, т.к. сделаны они на той же AVRке. если ваша нано может работать на 12 мгц и выше, то проблем быть не должно. программируете сначало свою ардуину прошивкой для программатора, а потом ардуиной закачиваете прошивку в тиньку. для ардуино куча всяких сайтов сделано. достаточно немного погуглить и сразу все нужные программы найдете.

    Если вы совсем не знаете что и как, то можно купить готовый программатор всего за 150 руб http://www.dx.com/ru/p/usbasp-usbisp-downloader-programmer-for-51-avr-157167?r=47602088

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Облачная платформа
Яндекс.Метрика

Fortune cookie: "It was man who first made men believe in gods." [Critias (480-403 B.C.E.)]