Общение

russian-robots@conference.jabber.ru - Чат, в котором можно поболтать об электронике, создании роботов и программировании.
Как мне зайти в чат?

 Обсуждение

Не стесняйтесь оставлять комментарии, мне интересно и важно ваше мнение!
  • Wadimka: Подскажу где взять недорого строчники, идете/едите в любую контору которая ...
  • Vladimir: Об этом датчике я тоже знаю, хотелось с чегото начать изучать МК, а не слеп ...
  • Vladimir: Спсиба
  • Евгений: Стоит поставить инфракрасный датчик движения и не городить ничего :) Литера ...
  • Vladimir: Добрый день Евгений. Это мне для дома в кладовку. При входе на двери стоит ...
  • Евгений: Фотобарьер? По подробнее расскажите.
  • Vladimir: Добрый день. Прошу вас помочь в реализации пректа фотобарер на Tiny45, со с ...
  • Евгений: С таким кодом даже http://caxapa.ru/codebook/?search=BLSH ничего не находит ...
  • Пример работы с АЦП (atmega88)

    17th Июнь 2010 | Метки:

    Рассмотрим пример работы с АЦП (ADC) микроконтроллера atmega88  в Code Vision AVR:

    #include<mega88.h>
    #include<stdio.h>
     
    unsigned int adc_data;
    //прерывание по переполнению таймера 0
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    TCNT0=0x00; //таймер считает с нуля
    ADCSRA |= 0x40; //запускаем новое АЦ преобразование
    }
     
    //прерывание по завершению АЦ преобразования
    interrupt [ADC_INT] void adc_isr(void)
    {
    //результат преобразования (в вольтах). 1.1-опорное напряжение
    adc_data=(((ADCW)*1.1)/1024);
    //отправляем считанное значение через UART
    putchar((char)adc_data);
    }
     
    void main(void)
    {
    #asm("sei") //разрешаем прерывания
    //настраиваем таймер, таймер считает с частотой 7813кГц
    TCCR0A=0x00;
    TCCR0B=0x05;
    TCNT0=0x00;
    OCR0A=0x00;
    OCR0B=0x00;
    TIMSK0 = 0x01;
    // ADC initialization
    // ADC Clock frequency: 125,000 kHz
    // ADC Voltage Reference: Int., cap. on AREF
    // ADC Auto Trigger Source: None
    DIDR0=0x3E; //включаем только канал ADC0
    ADMUX=0b11000000; //выбираем внутренний источник опорного напряжения (для меги88 это 1.1 в)
    ADCSRA=0x8E; //включаем АЦП, выбираем частоту и включаем прерывание
    //инициализируем UART (9600 бит/с, parity:none,8 databits,1 stopbit)
    UCSR0A=0x00;
    UCSR0B=0x18;
    UCSR0C=0x06;
    UBRR0H=0x00;
    UBRR0L=0x33;
    putchar('s'); //проверка UART
     
    while(1);
     
    }

    Не забываем, что входное напряжение должно быть меньше опорного! Если входное напряжение больше опорного, необходимо поставить делитель напряжения, а результат АЦ преобразования умножить на коэффициент деления делителя.

    Вся информация о регистрах и назначении каждого бита есть в даташите, на страницах  255 – 259.

    Понравилась статья? Нажмите на любую из кнопок:

    0
    Пока комментариев нет.

    :D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: