АЦП на Atmega8

Обсуждаем цифровые устройства...
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 340
Зарегистрирован: Сб янв 08, 2011 18:10:22
Откуда: Украина

Сообщение zwer97 »

Есть Atmega8, знаю что у нее есть функция считывания и переобразования аналогового сигнала в цыфровой через порты ADC.
Аналоговый сигнал у меня представлен сигналом с акселерометра mma7361 (там выходит питание от 1 до 2 вольт). Нужно переобразовать в число и залить в переменную. Времени учить АЦП полностью нету, да и смысла тоже, это разовый проэкт.
Помогите пожалуйста с кодом.
*Немного не в ту тему, но форум для МК закрыт.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

там учить 2 страницы. стыдно.
Fucking static initialization order fiasco
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 340
Зарегистрирован: Сб янв 08, 2011 18:10:22
Откуда: Украина

Сообщение zwer97 »

Pink-Pank писал(а):там учить 2 страницы. стыдно.
http://myrobot.ru/wiki/index.php?n=CodeLibrary.AVRADC вот, + кучу сайтов перелопатил. Так и не понял как значение в переменную записать.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 340
Зарегистрирован: Сб янв 08, 2011 18:10:22
Откуда: Украина

Сообщение zwer97 »

Вот моя програма, но значение ADCH всегда 255 и не меняеться (вычеслил експерементально)

Код: Выделить всё

#define F_CPU 1000000UL  // 1 MHz
   #include <avr/io.h>
   #include <avr/delay.h>
   
   int main (void){

	// инициализация портов

   DDRD = 0xff; 
   DDRC = 0x00;
   
   ADCSR = 0b10000011; // ADEN=1 (7-й бит); ADPS2..0=011;
   ADMUX = 0b00100001; // MUX3..0=ADC1 (00001);
   
while(1) {

		ADCSR |= _BV(ADSC);   // запуск преобразования

		loop_until_bit_is_set(ADCSR,ADSC); // ждем, пока не 
                                                   // будет сброшен ADSC

		_delay_us(1);   // ждем обновления регистра данных
		if (ADCH < 255) 
		{PORTD |= _BV(PD0); // установить "1" на линии 0 порта D
         PORTD &= ~_BV(PD1); // установить "0" на линии 1 порта D
		}
		else
		{
		PORTD |= _BV(PD1); // установить "1" на линии 1 порта D
        PORTD &= ~_BV(PD0); // установить "0" на линии 0 порта D
		}
		}
		}
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 340
Зарегистрирован: Сб янв 08, 2011 18:10:22
Откуда: Украина

Сообщение zwer97 »

Нашел ответ на свой вопрос вод тут. Всем кому нужно, заходите. Все очень понятно написано)) http://radioparty.ru/index.php/prog-avr ... l=&start=1
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 340
Зарегистрирован: Сб янв 08, 2011 18:10:22
Откуда: Украина

Сообщение zwer97 »

Теперь появилась следующая проблема.
Нужно считать два аналоговых сигнала с ADC0 и ADC1, но повсюду написано только как считать один.
Без опытного человека не обойтись.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 721
Зарегистрирован: Ср июн 11, 2014 09:43:13
Откуда: США

Сообщение Pink-Pank »

Есть такой чувак Евстифеев. Написал книгу на руccком об AVR-контроллерах. скачайте.
Fucking static initialization order fiasco
Контактная информация:
Ответить

Вернуться в «Цифровая техника»