Регулировка 8 каналов
|
|
mikhail09p |
Дата: Пн, 03.01.2011, 14:22 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
С новым Годом! Помогите в таком вопросе: Есть 8 каналов фазо-импульсной регулировки. Нужно по изменении считанной величины АЦП изменять яркость (угол включения симистора). Я ограничился 20-тью шагами яркости. Прерывания 2 милисек. Протеус не хочет осциллографом показывать или я чего-то не так делаю. Подскажите.
|
|
|
|
DAlexV |
Дата: Пн, 03.01.2011, 14:57 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (mikhail09p) С новым Годом! Взаимно. Схемотехнику исправил. Так же подцепил к шпротеусу Bas файл(а не HEX) Теперь можно пошагово наблюдать за выполнением.
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Пн, 03.01.2011, 15:47 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Немного не так. Там надо такт (переход через 0) надо подавать на PORTD.0 или в программе изменить на PORTB.0 Ну а принцип то хоть верный или можно как-то по другому, проще?
Сообщение отредактировал
mikhail09p - Пн, 03.01.2011, 15:58
|
|
|
|
DAlexV |
Дата: Пн, 03.01.2011, 16:18 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 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 , только через прерывание. В остальное время программа должна заниматься измерением АЦП и всякими другими задачами. Успехов Вам мой усатый друг
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Пн, 03.01.2011, 16:36 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (mikhail09p) Таймер 0 не могу использовать, так как он используется оператором HSerIn (из практического опыта) Забавный этот PBP. HSerIn из названия это хардварный УАРТ. Зачем ему еще таймер 0 ???? Оригинально. Про таймер 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
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (mikhail09p) А есть описание операторв Рыбы на русском? Извиняюсь за оффтоп. Да нет к сожалению. Quote (mikhail09p) Мне нужно вычитать значение счётчика, так как выдержка от бОльшего значения должна быть меньше, так? А вот этот вопрос я не понимаю что имеется ввиду ???? Значение для таймера ??? Есть программы специальные PIC Timer Calculator(прикрепил) или протеусом подбирать. НА сайте еще какие то для таймеров видел
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал
DAlexV - Пн, 03.01.2011, 17:11
|
|
|
|
mikhail09p |
Дата: Пн, 03.01.2011, 17:12 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Ну что то в этом роде. Только как я писал в ветке про многоканальный ШИМ лучше использовать if ... then .... else ... end if для выравнивания временных промежутков(иначе плавать будет)
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Пн, 03.01.2011, 17:42 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
А это место вывод в порт LoadBit V2, I, 1 PORTC = V2 так я сделал, а то сомневаюсь.
|
|
|
|
DAlexV |
Дата: Пн, 03.01.2011, 17:50 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
Quote (mikhail09p) так я сделал, а то сомневаюсь. Наверное да, я PBP уже давно забросил.
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Пн, 03.01.2011, 18:27 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Чёто не то. Сложная штука эти прерывания. Помогите, пожалуйста. Сделал по Вашим рекомендациям. Где ж мой добрый советчик Николай, наверно отдыхает ещё
Сообщение отредактировал
mikhail09p - Пн, 03.01.2011, 18:28
|
|
|
|
DAlexV |
Дата: Пн, 03.01.2011, 18:32 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
657
Замечания:
±
На сайте с 13.05.2008
Статус:
Offline
|
На Рыбе устроит ????
Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
|
|
|
|
mikhail09p |
Дата: Пн, 03.01.2011, 18:41 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
А есть выбор? Попробую разобратся Мож, на Рыбу перейду...
|
|
|
|