Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Регулировка 8 каналов
Регулировка 8 каналов
mikhail09p Дата: Пн, 03.01.2011, 14:22  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

С новым Годом!

Помогите в таком вопросе:
Есть 8 каналов фазо-импульсной регулировки.
Нужно по изменении считанной величины АЦП изменять яркость (угол включения симистора).
Я ограничился 20-тью шагами яркости. Прерывания 2 милисек.
Протеус не хочет осциллографом показывать или я чего-то не так делаю.
Подскажите.

Прикрепления: Faze_8_kanal.rar (50.9 Kb)
ЯНДЕКС Дата: 03.01.2011
DAlexV Дата: Пн, 03.01.2011, 14:57  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
С новым Годом!
Взаимно. Схемотехнику исправил. Так же подцепил к шпротеусу Bas файл(а не HEX) Теперь можно пошагово наблюдать за выполнением.
Прикрепления: 7360168.rar (52.3 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Пн, 03.01.2011, 15:47  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Немного не так. Там надо такт (переход через 0) надо подавать на PORTD.0 или в программе изменить на PORTB.0
Ну а принцип то хоть верный или можно как-то по другому, проще?

Сообщение отредактировал mikhail09p - Пн, 03.01.2011, 15:58
DAlexV Дата: Пн, 03.01.2011, 16:18  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
Немного не так. Там надо такт (переход через 0) надо подавать на PORTD.0 или в программе изменить на PORTB.0

насколько помниться порт D не имеет поддержку прерываний а в коде есть ссылка на B.0 по этому и изменил D.0 на B.0
Сейчас делаю примерно такой же проект. Только с двигателем. 1024 шага регулировки и оптосиммистор на управление. Алгоритм следующий.
B.0 от датчика фазы. На него же настроено прерывание которое запускает таймер 0 (например). Прерывание от переполнения таймера 0 запускает управляющий импульс на симмистор.
Если нужно регулировать 8 каналов одновременно, то не много по другому. От прерывания по датчику фазы стартует таймер настроенный на равные промежутки времени. По прерыванию от таймера инкреминируем переменную счетчика срабатываний таймера и сравниваем с каждым каналом. Достиг нужного значения, выключили соответствующий канал. После каждого срабатывания таймера(или прерывания от датчика фазы) не забываем сбрасывать флаги прерывания, иначе так и будет висеть в прерывании. Этот алгоритм очень похож на принцип многоканального ШИМа который мы уже обсуждали http://picbasic.ru/forum/5-517-1 , только через прерывание. В остальное время программа должна заниматься измерением АЦП и всякими другими задачами. Успехов Вам мой усатый друг wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Пн, 03.01.2011, 16:36  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (DAlexV)
От прерывания по датчику фазы стартует таймер

Вот это место интересует подробней. Хоть кусочек кода... А то как собака - понимать - понимаю, а сказать....

Таймер 0 не могу использовать, так как он используется оператором HSerIn (из практического опыта) http://picbasic.ru/forum/5-587-1#6756 а мне он будет нужен.

Сообщение отредактировал mikhail09p - Пн, 03.01.2011, 16:54
DAlexV Дата: Пн, 03.01.2011, 16:54  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
Таймер 0 не могу использовать, так как он используется оператором HSerIn (из практического опыта)

Забавный этот PBP. HSerIn из названия это хардварный УАРТ. Зачем ему еще таймер 0 ???? sad Оригинально. smile Про таймер 0 это я к примеру привел. Можно использовать любой свободный таймер.
Quote (mikhail09p)
Вот это место интересует подробней.
Настраиваем прерывание по B.0(по спаду). Таймер выключен, но разрешены прерывания от него. В прерывании проверяем от чего оно произошло(тестим флаги). Если от B.0(B0IF) то запускаем таймер устанавливая нужный флаг(TMR0ON) и сбрасываем B0IF. Второй флаг который тестим это TMR0IF(переполнение таймера). Если произошло, то не забываем сбросить TMR0IF обновляем значение TMR0L(TMR0H для 16 битного режима) и дальше
Quote (DAlexV)
инкреминируем переменную счетчика срабатываний таймера и сравниваем с каждым каналом. Достиг нужного значения, выключили соответствующий канал.


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Пн, 03.01.2011, 16:59  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (DAlexV)
Забавный этот PBP

А есть описание операторв Рыбы на русском? Извиняюсь за оффтоп.

Мне нужно вычитать значение счётчика, так как выдержка от бОльшего значения должна быть меньше, так?
Ещё: запускаем таймер устанавливая нужный флаг(TMR0ON) и сбрасываем B0IF
а может лучше сбросить B0IF в конце обработки прерывания, тоесть после 20 отсчётов Т1 в данном случае?
Самое большее, чем рискуем, это пропустить одну полуволну, а в противном случае есть возможность срабатывания от помехи? Верно? И можно отсчёты сделать чуть-чуть меньше 2 милисек для уверенности, будет подобие синхронизации с 0.

Сообщение отредактировал mikhail09p - Пн, 03.01.2011, 17:10
DAlexV Дата: Пн, 03.01.2011, 17:10  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
А есть описание операторв Рыбы на русском? Извиняюсь за оффтоп.
Да нет к сожалению.
Quote (mikhail09p)
Мне нужно вычитать значение счётчика, так как выдержка от бОльшего значения должна быть меньше, так?

А вот этот вопрос я не понимаю что имеется ввиду ???? Значение для таймера ??? Есть программы специальные PIC Timer Calculator(прикрепил) или протеусом подбирать. НА сайте еще какие то для таймеров видел
Прикрепления: PIC_Timer_Calcu.exe (220.0 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал DAlexV - Пн, 03.01.2011, 17:11
mikhail09p Дата: Пн, 03.01.2011, 17:12  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Quote (DAlexV)
Quote (DAlexV)инкреминируем переменную счетчика срабатываний таймера и сравниваем с каждым каналом. Достиг нужного значения, выключили соответствующий канал.

Я это имел ввиду.

For I = 0 To 7
If Vyv = Rez[I] Then
LoadBit V2, I, 1
PORTC = V2
DelayUS 2
V2 = 0
PORTC = %00000000
Dec Vyv
EndIf
Next I

DAlexV Дата: Пн, 03.01.2011, 17:19  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Ну что то в этом роде. Только как я писал в ветке про многоканальный ШИМ лучше использовать
if ... then
....
else
...
end if

для выравнивания временных промежутков(иначе плавать будет)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Пн, 03.01.2011, 17:42  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

А это место вывод в порт

LoadBit V2, I, 1
PORTC = V2

так я сделал, а то сомневаюсь.
ЯНДЕКС Дата: 03.01.2011
DAlexV Дата: Пн, 03.01.2011, 17:50  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (mikhail09p)
так я сделал, а то сомневаюсь.
Наверное да, я PBP уже давно забросил.


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Пн, 03.01.2011, 18:27  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Чёто не то. Сложная штука эти прерывания. Помогите, пожалуйста. Сделал по Вашим рекомендациям.
Где ж мой добрый советчик Николай, наверно отдыхает ещё holiday
happy
Прикрепления: F_8_kint.rar (23.9 Kb)

Сообщение отредактировал mikhail09p - Пн, 03.01.2011, 18:28
DAlexV Дата: Пн, 03.01.2011, 18:32  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

На Рыбе устроит ????

Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
mikhail09p Дата: Пн, 03.01.2011, 18:41  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

А есть выбор? biggrin
Попробую разобратся wink
Мож, на Рыбу перейду...
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Регулировка 8 каналов
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: