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

 
 
> Генератор меандра на ARM., Генерация сигнала управляемой частоты ARM-процессоре под Linux
Soleniy
сообщение Feb 8 2012, 13:57
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 26-11-11
Из: Минск
Пользователь №: 68 530



Здравствуйте, господа. После долгих гуглений и размышлений решил обратиться сюда.
Собственно, есть такая штука с установленным Linux (Digi Embedded Linux). Я на ней диплом сейчас пишу.
Но пока задача не связанная с дипломом.
Нужно на светодиод на плате подать сигнал заданной частоты (100 Гц - 100 kГц). Управляться это должно через Ethernet.
Как я себе это представляю: Программа на компьютере, которая формирует управляющий сигнал и передает его на плату. С этим понятно. Но вот дальше, есть много вопросов:

1) Как заставить программу записывать нули единицы в файл драйвера с нужной скоростью? Понял что всякие usleep и nanosleep не подходят, так как квант времени системы гораздо больше необходимой задержки (или я ошибаюсь?).
2) Если каким то образом заставить систему выполнять только процесс записи в файл драйвера, то загрузка CPU будет 100%. Как тогда можно слушать команду пришедшую от управляющей программы?

В общем, как так.
Буду благодарен за любые советы по этой проблеме.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 9)
cpl
сообщение Feb 8 2012, 14:56
Сообщение #2


Местный
***

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



Как вариант написать свой драйвер для мигания светодиодом, драйверу передается значение с какой частотой мигать. от управляющей программы требуется передавать только изменившиеся значение частоты мигания.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 15:02
Сообщение #3


Гуру
******

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



Цитата(Soleniy @ Feb 8 2012, 17:57) *
Нужно на светодиод на плате подать сигнал заданной частоты (100 Гц - 100 kГц).

Если 100кГц, то о программном формировании забудьте навсегда. Только аппаратный таймер/ШИМ.
Go to the top of the page
 
+Quote Post
Soleniy
сообщение Feb 8 2012, 20:57
Сообщение #4





Группа: Новичок
Сообщений: 5
Регистрация: 26-11-11
Из: Минск
Пользователь №: 68 530



cpl, я тоже уже начал склоняться к написанию драйвера для gpio. Но так как драйверы не разу не писал, ни под Linux, ни под Windows, хочется как-то обойти пока это дело (хоть я понимаю что скорее всего не получится). Вот что нагуглил:
Цитата
Задержка через порты ввода/вывода

Другой способ обеспечить задержку в несколько микросекунд - это порты ввода/вывода. Запись или чтение любого значения из порта 0x80 (о том, как это сделать, см. выше) обеспечивает задержку почти точно равную одной микросекунде, независимо от типа и скорости вашего процессора. Чтобы обеспечить задержку в несколько микросекунд, вы можете выполнить эту операцию несколько раз. Запись в этот порт не оказывает никакого влияния на компьютер (и некоторые драйверы используют это). Таким образом, обычно выполняется задержка в {in|out}[bw]_p() (см. asm/io.h).

На самом деле, операции ввода/вывода на большинство портов в диапазоне от 0 до 0x3ff тоже дают задержку около одной микросекунды. Так что, если вы, например, производите запись в параллельный порт, для обеспечения задержки, просто добавьте дополнительные inb() из порта.


Вопрос такой, сколько процессорного времени занимает считать функцией read() 1 байт из файла драйвера gpio? И возможно ли с помощью этого управлять временем? Тогда можно было бы запускать цикл с нужным числом вызовов этой функции.

aaarrr, если под аппаратное реализацией вы имеете ввиду, припаивание еще какого-то внешнего девайса, то это категорически не подходит.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 21:00
Сообщение #5


Гуру
******

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



Цитата(Soleniy @ Feb 9 2012, 00:57) *
aaarrr, если под аппаратное реализацией вы имеете ввиду, припаивание еще какого-то внешнего девайса, то это категорически не подходит.

Не припаивание внешнего, а использование внутреннего.
Go to the top of the page
 
+Quote Post
Soleniy
сообщение Feb 8 2012, 21:21
Сообщение #6





Группа: Новичок
Сообщений: 5
Регистрация: 26-11-11
Из: Минск
Пользователь №: 68 530



Цитата(aaarrr @ Feb 9 2012, 00:00) *
Не припаивание внешнего, а использование внутреннего.


Это и есть написание драйвера, или я чего-то не до понимаю? Простите мне мою неосведомленность. Студент sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 22:47
Сообщение #7


Гуру
******

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



Цитата(Soleniy @ Feb 9 2012, 01:21) *
Это и есть написание драйвера, или я чего-то не до понимаю? Простите мне мою неосведомленность. Студент sm.gif

Процессор внутри себя содержит периферию, пригодную для формирования меандра (PWM). Вот её и нужно задействовать.
Если драйвера PWM нет, то таки да, его придется написать.
Go to the top of the page
 
+Quote Post
Soleniy
сообщение Feb 14 2012, 07:20
Сообщение #8





Группа: Новичок
Сообщений: 5
Регистрация: 26-11-11
Из: Минск
Пользователь №: 68 530



Спасибо aaarrr и cpl за советы.
Пытался разобраться во внутреннем устройстве процессора. Так вот, оказывается в нем есть 4 таймера с функциями PWM. Я даже понял как ими управлять, но как мне связать выход таймера и выход к которому припаяна лампочка так, чтоб не них был один и тот же сигнал?
Прикрепил четыре файла: в timer.jpg схема таймера, в Pin.jpg номера пинов к которым подключены выходы таймеров, в Pin_Set.jpg возможные настройки этих портов и в GPBDAT.jpg описание которое меня смущает.

Помогите пожалуйста разобраться.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 
Go to the top of the page
 
+Quote Post
cpl
сообщение Feb 14 2012, 07:27
Сообщение #9


Местный
***

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



В инициализации пинов задавайте режим работы, просто пин ввод-вывод, или альтернативная функция выход таймера например.

PS
Не перегрузите вывод процессора прямым подключением светодиода, а то сгорит. Подключать лучше через буфер.
Go to the top of the page
 
+Quote Post
Soleniy
сообщение Feb 14 2012, 14:18
Сообщение #10





Группа: Новичок
Сообщений: 5
Регистрация: 26-11-11
Из: Минск
Пользователь №: 68 530



По поводу режима работы, пин светодиода (GPL10) нужно устанавливать в режим output, как я понимаю, а вот вывод таймера скорее всего в TOUT.
Так вот вопрос, возможно ли без пайки их соединить так, чтоб сигнал который появляется на GPB2(таймер 2) например, появлялся и на GPL10 (мой светодиод)?
Go to the top of the page
 
+Quote Post

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

 


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


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