реклама на сайте
подробности

 
 
> Таймер работает не корректно
e-leks
сообщение Oct 3 2013, 15:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 12-10-11
Пользователь №: 67 694



Процессор: ATmega
Частота: 8 МГц.
Компилятор: AVR GCC
После пробного запуска кода в симуляторе импульс на ножке имеет верхний и нижний участки одинаковой длины, хотя я добиваюсь обратного. Прошу посмотреть код, не могу объяснить ситуацию.

Спасибо.
CODE
#include <avr/io.h>
#include <avr/interrupt.h>

int t = 0x90;
ISR(TIMER0_COMP_vect)
{
if(PINA & 0x01)
{
PORTA &= ~0x01;
OCR0 = 0x90;
}
else
{
PORTA |= 0x01;
OCR0 = 0x0C;
}
TCNT0=0x00;
}

int main(void)
{
DDRA = 0x01;

// Делитель на 1024 (8МГц / 1024 = 7,8125КГц)
// 128 мкс
TCCR0=0x05;
TCNT0=0x00;
//OCR0=0x0C;

TIMSK=0x02;

// Разрешаем прерывания глобально
sei();

while(1)
;

return 0;
}


Сообщение отредактировал IgorKossak - Oct 3 2013, 18:04
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
e-leks
сообщение Oct 4 2013, 13:44
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 12-10-11
Пользователь №: 67 694



Люди добрые, я использовал "стандартные" подходы:
1. Установил делитель
2. Настроил таймер на сравнение
3. Использовал режим СТС для сброса
4. Включил прерывания глобально
Мне не нужно больше ничего придумывать, мне нужно понять: либо я написал что то неправильно, либо ошибка не в моих действиях. Прошу Вас помочь заставить мой код работать или ответить почему он не работает корректно. Неужели у столь большого сообщества специалистов нет ответа на далеко не самый сложный вопрос?

Благодарю!
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 4 2013, 15:12
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Поправьте оператор if в процедуре прерывания
Код
    if(PORTA & 0x01)
Поскольку непонятно, что у Вас там к соответствующей ноге подключено. То, что Вы на ногу РА0 выдали высокий уровень, вовсе не значит, что он там появится - может на эту ногу "навалиться" низкий уровень "извне".
Go to the top of the page
 
+Quote Post
e-leks
сообщение Oct 4 2013, 15:21
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 12-10-11
Пользователь №: 67 694



Цитата(Палыч @ Oct 4 2013, 19:12) *
Поправьте оператор if в процедуре прерывания

Не помогло, а может симулятор не корректно работать? Просто осциллографа нет, проверить не где. Попробую подключить к сервомашинке, посмотрю будет ли реагировать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016