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

 
 
 
Reply to this topicStart new topic
> Прерывание на SAM7s, Нужен совет и помошь
en0t
сообщение Mar 12 2008, 10:00
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



Есть микроконтролер AT91sam7s256
Задача: Получение прямоугольных импульсов от 1 Гц до 200 кГц с возможностью регулирования скважности.

Подскажите как проще сделать это.

Сам склоняюсь к использованию таймеров, но вот как оптимальней настроить и какие именно взять незнаю.

Кто знает подскажите, Зарание С П А С И Б О

Сообщение отредактировал en0t - Mar 12 2008, 10:00
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 12 2008, 10:13
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(en0t @ Mar 12 2008, 13:00) *
Есть микроконтролер AT91sam7s256
Задача: Получение прямоугольных импульсов от 1 Гц до 200 кГц с возможностью регулирования скважности.

Так это же PWM
смотрите PWM controller или Waveform operating mode у таймеров.
Go to the top of the page
 
+Quote Post
xelax
сообщение Mar 12 2008, 10:16
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(en0t @ Mar 12 2008, 13:00) *
Есть микроконтролер AT91sam7s256
Задача: Получение прямоугольных импульсов от 1 Гц до 200 кГц с возможностью регулирования скважности.

Подскажите как проще сделать это.

Сам склоняюсь к использованию таймеров, но вот как оптимальней настроить и какие именно взять незнаю.

Кто знает подскажите, Зарание С П А С И Б О


Проще всего это сделать через PWM (ШИМ). Настраивается форма, периодичность, скважность и т.д.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 12 2008, 10:17
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Для такой задачи можно использовать TC в Waveform Mode. С настройкой особых проблем, по-моему, нет.
Go to the top of the page
 
+Quote Post
en0t
сообщение Mar 12 2008, 10:32
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



не через ШИМ не получится т. к. в полученом сигнале пауза должна измерятся в микросекундах и соответственно изменятся тоже в них.
Вобшем на выходе должен получится генератор прямоугольных импульсов.

чёто типа вот этого:


http://www.telesys.ru/electronics/projects.php?do=p072

Может кто подскажет и покажет как настроить прерывание по переполнению таймер счётчика с частотой 200 кГц
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 12 2008, 10:36
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(en0t @ Mar 12 2008, 13:29) *
не через ШИМ не получится т. к. в полученом сигнале пауза должна измерятся в микросекундах и соответственно изменятся тоже в них.

Не вижу связи между ШИМ'ом и микросекундами, поясните.
Go to the top of the page
 
+Quote Post
en0t
сообщение Mar 12 2008, 10:39
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



Цитата(aaarrr @ Mar 12 2008, 13:36) *
Не вижу связи между ШИМ'ом и микросекундами, поясните.


Не Не Не
ненадо о ШИМ'е я сразу его отмел, а вот о настройке прерывания если можно поподробней раскажите обьясните покажите.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 12 2008, 10:43
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(en0t @ Mar 12 2008, 13:39) *
ненадо о ШИМ'е я сразу его отмел

Почему?

Цитата(en0t @ Mar 12 2008, 13:39) *
раскажите обьясните покажите.

smile.gif Да легко. Вот только прерываться с частотой 200KHz не советую, впрочем, хозяин - барин.

Для 48MHz MCK:
Код
void timer0_ini(void)
{
    AT91C_BASE_PMC->PMC_PCER = (0x01 << AT91C_ID_TC0);

    // Wave mode, MCK/8,  UP mode with automatic trigger on RC Compare
    AT91C_BASE_TCB->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE;
    AT91C_BASE_TCB->TCB_TC0.TC_RC = 29;
    AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_CLKEN;
    AT91C_BASE_TCB->TCB_TC0.TC_IER = AT91C_TC_CPCS;
    AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_SWTRG;

    AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0x07;
    AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (u_int)tc0_irq_handler;
}
Go to the top of the page
 
+Quote Post
en0t
сообщение Mar 12 2008, 10:54
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



насчёт шима всё просто , процесор должен выдавать несколько таких частот притом разных (от 3 до 12)
вот я и подумал что проше всего использовать преполнение по т/c , вообшё планируется ипользование частот не более 10кГц , но для того чтобы чтото можно было регулировать на таких частотак длину паузы решил что для этого 200 кГц вполне должно хватить.

Скорей всего я выбрал путь не совсем правельный так что хотел услышать мнение профи как лутше это организоватью
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 12 2008, 11:00
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(en0t @ Mar 12 2008, 13:54) *
насчёт шима всё просто , процесор должен выдавать несколько таких частот притом разных (от 3 до 12)
вот я и подумал что проше всего использовать преполнение по т/c , вообшё планируется ипользование частот не более 10кГц , но для того чтобы чтото можно было регулировать на таких частотак длину паузы решил что для этого 200 кГц вполне должно хватить.

Скорей всего я выбрал путь не совсем правельный так что хотел услышать мнение профи как лутше это организоватью

Понятно. Беда в том, что время между двумя прерываниями на 200КГц составит всего 48000000/200000=240 тактов процессора, что очень мало.

Учитывая "ногодрыгательную специфику" задачи, я бы вообще не стал использовать для ее решения ARM. AVR или мелкая логика будут смотреться куда как гармоничнее.
Go to the top of the page
 
+Quote Post
en0t
сообщение Mar 12 2008, 11:56
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 59
Регистрация: 31-01-08
Пользователь №: 34 612



Цитата(aaarrr @ Mar 12 2008, 13:43) *
Почему?
smile.gif Да легко. Вот только прерываться с частотой 200KHz не советую, впрочем, хозяин - барин.

Для 48MHz MCK:
Код
void timer0_ini(void)
{
    AT91C_BASE_PMC->PMC_PCER = (0x01 << AT91C_ID_TC0);

    // Wave mode, MCK/8,  UP mode with automatic trigger on RC Compare
    AT91C_BASE_TCB->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE;
    AT91C_BASE_TCB->TCB_TC0.TC_RC = 29;
    AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_CLKEN;
    AT91C_BASE_TCB->TCB_TC0.TC_IER = AT91C_TC_CPCS;
    AT91C_BASE_TCB->TCB_TC0.TC_CCR = AT91C_TC_SWTRG;

    AT91C_BASE_AIC->AIC_SMR[AT91C_ID_TC0] = 0x07;
    AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (u_int)tc0_irq_handler;
}

Может кто подскажет как это правельно в iar подвезать
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 12 2008, 13:22
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(en0t @ Mar 12 2008, 14:56) *
Может кто подскажет как это правельно в iar подвезать

Из
AT91C_BASE_TCB->TCB_TC0.TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE;
делаем
AT91C_BASE_TC0 -> TC_CMR = AT91C_TC_CLKS_TIMER_DIV2_CLOCK | AT91C_TC_WAVESEL_UP_AUTO | AT91C_TC_WAVE;
и т.д.
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Mar 12 2008, 19:33
Сообщение #13


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



Цитата(en0t @ Mar 12 2008, 13:00) *
Есть микроконтролер AT91sam7s256
Задача: Получение прямоугольных импульсов от 1 Гц до 200 кГц с возможностью регулирования скважности.

Подскажите как проще сделать это.

Сам склоняюсь к использованию таймеров, но вот как оптимальней настроить и какие именно взять незнаю.

Кто знает подскажите, Зарание С П А С И Б О


С П А С И Б О не булькает. Его в стакан не нальёшь. И в карман не положишь.


Цитата(en0t @ Mar 12 2008, 13:32) *
не через ШИМ не получится т. к. в полученом сигнале пауза должна измерятся в микросекундах и соответственно изменятся тоже в них.


Ассемблер с подчётом программы по тактам никто не отменял.


--------------------
[ZX]
Go to the top of the page
 
+Quote Post

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

 


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


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