Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Помогите кто разбирается пожалуйста! (AVR прога)

Отправлено ody67 02 июня 2009, г. 19:34


align=Top
Проблема такая: нужно сравнивать сигнал с АЦП (8bit) с значением таймера (T1), причем имеет значение знак напруги ( внешний элемент переворачивает отрицат. сигнал и сообщает на ногу МК что отриц. ) а еще сигнал АЦП нужно делить на полторы части и сравнивать с таймером (см. рисунок)
В момент когда они равны ( зеленые кружки на рисунке )вызвать подпрограмму Next(). Таймер обнуляется внешним прерыванием int0
Я это сделал так:
ISR(SIG_INTERRUPT0)
{
Prev = TCNT0;
TCNT0 = 0;
}
ISR(SIG_ADC)
{
adc_data=ADCH;
if (adc_data > 155)
{
adc_data = adc_data - 155;
}
if (sign == 1)
{
if ( adc_data == Prev - TCNT0 )
Next(1);
}
else if ( sign == 0 )
{
if ( adc_data == TCNT0 )
Next(1);
}
}
и в инициализации:
TCCR0=0x04;
TCNT0 = 0;
ADMUX=0xE0;
ADCSRA=0x8F;
Симулировал в VMLAB работает не так совсем как надо, видит одно из 20 нужных случаев остальные пропускает.
Подскажите пожалуйста в чем я ошибся??
Заранее благодарен!
А, еще внешнее прерывание по растущему фронту импульса с периодом 20мс/6.
Вх. сигнал может быть любой формы, синусоида там или вообще черт знает что.
МК -mega8 частота любая лишь бы подошла таймеру для точности.


Составить ответ | Вернуться на конференцию.

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
умножьте 2 на три:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru