работа с несколькими АЦП

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: работа с несколькими АЦП

Сообщение Rusfaner » 31 июл 2009, 08:58

Спасибо avr123.nm.ru за помощь и за то что втянул меня в это дело!!!
Все так просто оказалось, правда это понимаешь только потом.
Заработало, только немного подкорректировал:
Код: Выделить всё
if ((adc_data[2] - (adc_data[1]-adc_data[0]) - adc_data[0] ) < 212 ) {  PORTB.0 = 1; }
  else  { PORTB.0 = 0; };
if ((adc_data[1] - adc_data[0] ) < 212 ) {  PORTB.1 = 1; }
   else  { PORTB.1 = 0; };

Первая часть ппроекта осилена.
Rusfaner
 
Сообщения: 12
Зарегистрирован: 29 июл 2009, 14:11
Откуда: Всеволожск (СПб)

Re: работа с несколькими АЦП

Сообщение avr123.nm.ru » 31 июл 2009, 09:35

Да ... Когда что-то начинает работать - всегда радостно ! :good:
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: работа с несколькими АЦП

Сообщение boez » 31 июл 2009, 15:58

А вот это
Код: Выделить всё
(adc_data[2] - (adc_data[1]-adc_data[0]) - adc_data[0] )

разве не равно
Код: Выделить всё
(adc_data[2] - adc_data[1])

?
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: работа с несколькими АЦП

Сообщение avr123.nm.ru » 31 июл 2009, 16:03

Можно на яблоки или на пирожки земенить и прикинуть или на бумажке посчитать.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: работа с несколькими АЦП

Сообщение Rusfaner » 31 июл 2009, 21:27

Согласен, пробовал и так и так, результат один. Просто оставил первый ваиант.
Код: Выделить всё
(adc_data[2] - (adc_data[1]-adc_data[0]) - adc_data[0] )

Код: Выделить всё
(adc_data[2] - adc_data[1])
Rusfaner
 
Сообщения: 12
Зарегистрирован: 29 июл 2009, 14:11
Откуда: Всеволожск (СПб)

Re: работа с несколькими АЦП

Сообщение Rusfaner » 06 авг 2009, 22:49

При продвижении дальше возникли следующие трудности:
Кроме загорания светодиода, пытаюсь вывести звук на PB1/OC1A, который должен появиться при загорании любого светодиода.
Звук получается только при лог.1 на PD2 (на PD1 и PD0 не реагирует).
Причем генерация звука идет прерывистая. Я так понимаю, звук прерывается на время обработки прерывания.
Код: Выделить всё
if ((adc_data[2]-(adc_data[1]-adc_data[0])-adc_data[0])<218) {     
      PORTD.0=1;                                                           
   
     TCCR1A=0x40; // включение звука             
   
    }
else  {
     PORTD.0=0;
     TCCR1A=0x00;
     
    };                   
if ((adc_data[1]-adc_data[0])<218) {     
      PORTD.1=1;   
      TCCR1A=0x40; // включение звука                                                           
    }
else  {
     PORTD.1=0;
     TCCR1A=0x00;
    };       

if (adc_data[0]<218) {     
      PORTD.2=1;                   
      TCCR1A=0x40; // включение звука
    }
else  {
     PORTD.2=0;
     TCCR1A=0x00;
     
    };


Таймер так сконфигурирован:

Код: Выделить всё
TCCR1A=0x00;     // регистр управления таймером1  на выводе  OC1A =  0 (звук выключен)
TCCR1B=0x0D;     // 00001101 режим работы CTC и коэф. предделения 1024 f= 7,813 kHz
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x07;      // регистр сравнения (еще деление на 7)
OCR1BH=0x00;
OCR1BL=0x00;
Rusfaner
 
Сообщения: 12
Зарегистрирован: 29 июл 2009, 14:11
Откуда: Всеволожск (СПб)

Re: работа с несколькими АЦП

Сообщение avr123.nm.ru » 06 авг 2009, 23:44

>> Звук получается только при лог.1 на PD2 (на PD1 и PD0 не реагирует).

дак по вашему коду только на PD2 звук и включается

TCCR1A=0x40; // включение звука

===============

Сокращайте длину процедур в прерывании и повышайте частоту такта МК.

Возможно ва над опереходить к прерыванию только для музыки.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: работа с несколькими АЦП

Сообщение Rusfaner » 07 авг 2009, 10:23

Так ведь TCCR1A=0x40; добавлял во все три выхода одинаково.
Частоту тактирования повышал, не помогло.
Если переходить на прерывание только по таймеру, то как тогда с АЦ преобразованиями?
:pardon:
Rusfaner
 
Сообщения: 12
Зарегистрирован: 29 июл 2009, 14:11
Откуда: Всеволожск (СПб)

Пред.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 10