Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Прерывания + таймер


Автор: -= Александр =- 13.6.2004, 00:11
Значит вот в чем проблема, точнее вопрос:
Есть таймер и есть прерывание АЦП
Работает примерно так:

процедура А()
{
В1=R;
Ждем;
B2=R;
Ждем;
B3=R;
Ждем;
Сравниваем B1,B2 и В3;
Делаем еще много всяких операций...;
}

Прерывание АЦП
{
R=результат преобразования;
}

Прерывание по таймеру
{
A();
}

А теперь вопрос: будет ли во время выполнения процедуры А случаться прерывание АЦП?
Вопрос №2: Почему когда я включаю UART, АЦП перестает работать?

Автор: shedon 13.6.2004, 13:33
Цитата
А теперь вопрос: будет ли во время выполнения процедуры А случаться прерывание АЦП?

Если ты их в процедуре А, не запретишь то будут.
Цитата
Вопрос №2: Почему когда я включаю UART, АЦП перестает работать?

Не зеная схемы и программы сказать не чего нельзя, АЦП встроено в контроллер ? Или как оно подключенно ?

Автор: Dr.Death 13.6.2004, 16:14
Я думаю у него встроено в контроллере.

Автор: shedon 13.6.2004, 18:09
Цитата
Я думаю у него встроено в контроллере.

Тогда надо даташит на контроллер смотреть...
Если он всё правильно делает...

Автор: -= Александр =- 14.6.2004, 15:59
Я тут немного поковырялся и вроде заработало все как надо. Только вот другая проблема возникла: из контроллера посылаю байт, а на ком черт знает что приходит. Я в даташите прочитал, что на моей частоте кварца будет 0.2% ошибок, но ни одного байта правильно не доходит. Если я кварц заменю это исправится?

Автор: shedon 14.6.2004, 17:29
Цитата
Если я кварц заменю это исправится?

Вероятно проблема не в кварце, а на какой скорости отправляешь, что за процессор, какой кварц и как отправляешь ?.

Автор: PILOT 15.6.2004, 19:04
Проблема только в согласовании скоростей приемника и передатчика.
Замена кварца ничего не даст.

СУВ.

Автор: -= Александр =- 15.6.2004, 22:07
У меня ATMega8535, передаю я через MAX232 на скорости 9600 или 4800. Частота кварца 16 МГц. Прога на С (через ICC), отправляю через putchar(). Принимаю все это на компе через простой терминал. (на такой-же скорости)

Автор: shedon 16.6.2004, 08:12
Возможно, несогласованны другие параметры, контроль чётности, количество стоповых байт, количество бит данных. А один байт отправляется ? Потом я смотрю у тебя Синхронный/Асинхронный приёмо-передатчик, в компе же стоит асинхронный, возможно, что ты передаёшь в синхронном режиме.
Попробуй просто передать один байт, как в даташите написанно...
Код

void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}

Автор: serg1 24.6.2004, 11:10
Поставь кварц на 11,059. Чётко работает на 9600, проверено

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)