Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2014, 01:15   #11
balabol
Member
 
Регистрация: 13.01.2014
Сообщений: 44
Вес репутации: 0
balabol is an unknown quantity at this point
По умолчанию Re: ШИМ & GPIO

Я весь путь "самурая" наверное не повторю, т.к. много, что руками допиливал и собственно все в транке.

Но основная мысль следующая:
1. Если в настройках вызываемых make kernel_menuconfig "Device Drivers" нет пункта "PWM Support", дела не очень хороши. Это значит, что самого драйвера нет. Его нужно как-то получить в транк.
Люди идут разными дорогами кто-то ищет готовый транк, кто-то вообще из сериальников ШИМ делает Мне эти пути не подходят т.к. у меня есть уже собранный транк, который встал на железку. И я им дорожил.
Собственно я скачал несколько транков и путем проб и ошибок добавил необходимый комплект сырцов для компиляции драйвера.
Кстати выяснилась подробность, что драйвера эти бывают как "железные", т.е. есть аппаратный генератор ШИМ, так и софтовый. Я встроил драйвер софтовый, т.е. работающий на теймере.

Не лучшее решение, т.к. ест процессорное время и может подвиснуть. Но лучшего нет для меня пока.

2. Если п.1 удалось преодолеть, остается дело за малым. Найти пакет, который дружит с вашим ядром и называется pwm-gpio-custom. Ставим, компилируем все это.

3. Если и 3 пункт вам удалось пройти заливаем прошивку в роутер и идем в OpenWRT

4. В каталоге /sys/class/pwm должны появиться ШИМы. Но совсем не обязательно
5. Если ШИМы не появились, видимо у вас GPIO используются другими примочками. У меня это делали LEDы. Идем обратно в make menuconfig и убираем лишнее.
6. Опять билдим и идем в openWRT. Есть? Нет? Ну не страшно... если нет, то значит, что у вас само без инициализации не взлетает. Делаем так:
insmod pwm-gpio-custom bus0=0,21

21 это номер GPIO. Не угадаете, фокус не удастся

Далее, если ошибок не было, идем в /sys/class/pwm и смотрим.

Если там что-то есть - УРА!

Ну а дальше все как у всех:

Init @tick_hz at 1000000000UL (hardcoded) :
# cat /sys/class/pwm/gpio_pwm.0\:0/request

Define 100hz period :
# echo 10000000 > /sys/class/pwm/gpio_pwm.0\:0/period_ns

Define percent when gpio goes polarity for one tick :
Base polarity is 0, so here 10% of tick is 0v, 90% is +3.3v.
If you set polarity to 1, gpio goes 10% to 3.3v, and 90% to 0v.
# echo 1000000 > /sys/class/pwm/gpio_pwm.0\:0/duty_ns

Start pwm :
# echo 1 > /sys/class/pwm/gpio_pwm.0\:0/run

Stop pwm :
# echo 0 > /sys/class/pwm/gpio_pwm.0\:0/run

P.S. Кстати 9 каналов я тоже поднял.

Последний раз редактировалось balabol; 20.01.2014 в 01:18.
balabol вне форума   Ответить с цитированием
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 16:36. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика