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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Расчет таймера
GDI
сообщение Feb 20 2007, 18:03
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



чтобы получить быстрый меандр надо использовать выход OCP любого таймера и правильно настроить схему сравнения и режим таймера, тогда и никакие прерывания не потребуются, и контроллер не будет отвлекаться, все будет работать аппаратно.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2007, 18:07
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Artur Nikitin @ Feb 20 2007, 16:45) *
Осталось только теперь заставить при программировании прописывать фузы. В наследство достался бат-файл, который сам все пишет. Использую альтера байт бластер
А какую программу программатора вызывает бат-файл? Если там avreal32, то в опции -f добавьте (измените) -fCKSEL=A


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 21 2007, 09:58
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Цитата(GDI @ Feb 20 2007, 18:03) *
чтобы получить быстрый меандр надо использовать выход OCP любого таймера и правильно настроить схему сравнения и режим таймера, тогда и никакие прерывания не потребуются, и контроллер не будет отвлекаться, все будет работать аппаратно.


Выводы уже заняты под порты общего назначения (плата уже разведена), приходится делать на прерывании. Хочу сделать на таймере1, настройки следующие:
TCCR1A= 0x00;
TCCR1B= 0x01;
OCR1AH= 0x00;
OCR1AL= 0x05;

TIMSK_OCIE1A = 1; //разрешение прерывания по совпадению А

#pragma vector = TIMER1_CAPT1_vect
__interrupt void TM1_CP1(void)
{
PORTD_PORTD7 = !PORTD_PORTD7;
TCNT1 = 0;
}

по переполнению работало, по совпадению что то не вижу частоты на ножке


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post
Artur Nikitin
сообщение Feb 21 2007, 10:27
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 30
Регистрация: 28-11-06
Из: Набережные Челны
Пользователь №: 22 856



Цитата(Сергей Борщ @ Feb 20 2007, 18:07) *
А какую программу программатора вызывает бат-файл? Если там avreal32, то в опции -f добавьте (измените) -fCKSEL=A

Да, авреал, добавил фузы в конце. Т.к. по умолчанию проц работает от 1МГц, а кварц 4МГц, то после установления фузы все должно заработать в 4 раза быстрее (например светодиод должен моргать быстрее, т.к. мигает по таймеру), но ентого не наблюдается cranky.gif


--------------------
начинающий программист
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 21 2007, 10:36
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Artur Nikitin @ Feb 21 2007, 08:58) *
по переполнению работало, по совпадению что то не вижу частоты на ножке
Вы не на то прерывание повисли. CAPTURE - это захват, копирование значения таймера в регистры OCR в момент прихода внешнего сигнала. Вам нужет вектор COMPARE. Это во-первых. Во-вторых используйте режим CTC или FAST PWM таймера - тогда он будет сбрасываться автоматически.
Код
TCCR1A = (0<<COM1A1)|(0<<COM1A0)|(0<<COM1B1)|(0<<COM1B0)|(0<<WGM11)|(0<<WGM10);
TCCR1B = (0<<ICNC1)|(0<<ICES1)|(0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10);

OCR1A = 5;
TIMSK = (0<<OCIE2)|(0<<TOIE2)|(0<<TICIE1)|(1<<OCIE1A)|(0<<OCIE1B)|(0<<TOIE1)|(0<<TOIE0);


#pragma vector = TIMER1_COMPA_vect
__interrupt void handler(void) {
    PORTD ^= (1<<7);
}


Цитата(Artur Nikitin @ Feb 21 2007, 09:27) *
Да, авреал, добавил фузы в конце. Т.к. по умолчанию проц работает от 1МГц, а кварц 4МГц, то после установления фузы все должно заработать в 4 раза быстрее (например светодиод должен моргать быстрее, т.к. мигает по таймеру), но ентого не наблюдается cranky.gif
Закоротите кварц пинцетом. Если все остановится - меняйте кварц, он у вас не той системы (рассчитан на работу с третьей гармоникой). Если будет продолжать работать - разбирайтесь с фузами. Считайте их, сравните.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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