Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Proteus не хочет "дружить" с ШИМ PIC16F877. Почему

Непрочитано 17.08.2009, 21:29  
finiki
Частый гость
 
Регистрация: 10.03.2007
Сообщений: 30
Сказал спасибо: 8
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
finiki на пути к лучшему
По умолчанию Proteus не хочет "дружить" с ШИМ PIC16F877. Почему

Задача простая - сформировать ШИМ сигнал частотой 22 кГц.
Программа пока тоже простая - запускаем ШИМ и больше ничего не делаем, только после каждого периода формируем на отдельном выводе формируем короткий импульс для синхронизации процесса.
Моделируем в Proteus - все хорошо (проект PWM_good.DSN).

Теперь чуть-чуть усложним программу - после каждого периода будем перезаписывать длительность импульса ШИМ (регистр CCPR1L), чтобы затем управлять скважностью.
И тут все рушится (проект PWM_bad.DSN) - формируется только один первый период сигнала ШИМ!

Кто-нибудь может объяснить в чем дело?
Подробности в прилагаемом архиве. Использую Proteus 7.4 SP3.
Заранее благодарен.

Прикрепленный файл: 8733328.rar
Реклама:
finiki вне форума  
Непрочитано 17.08.2009, 22:28  
arhimed486
Прописка
 
Регистрация: 01.08.2009
Сообщений: 138
Сказал спасибо: 5
Сказали Спасибо 37 раз(а) в 13 сообщении(ях)
arhimed486 на пути к лучшему
По умолчанию

Честно скажу: в пиках не разбираюсь , так как с AVR работаю, но это вроде помогло:

Wait
btfss PIR1,TMR2IF
goto Wait
;Сформировался один период.
bcf PIR1,TMR2IF ;Сбросить флаг прерывания.
bsf PORTC,0 ;Синхр.=1
bcf PORTC,0 ;Синхр.=0
movlw d'45' ;!!! Перезапишем ширину
movwf CCPR1L ;!!! импульса.
clrf TMR2 ; это помогло
goto Wait ;

Методом тыка
arhimed486 вне форума  
Непрочитано 17.08.2009, 23:47  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от finiki
И тут все рушится (проект PWM_bad.DSN) - формируется только один первый период сигнала ШИМ!
Сие науке не известно...
И охота вам глюки Протеуса иследовать? По моему проще (а главное быстрее найти причину) опробовать всё в железе. Может статся что в железе заработает. Во всяком случае у меня в 16F628,16F690,16F877A и в ATMega8 проблем с регулировкой ШИМ не возникало. Всё как в даташите сказано.
picavr вне форума  
Непрочитано 18.08.2009, 09:35  
finiki
Частый гость
 
Регистрация: 10.03.2007
Сообщений: 30
Сказал спасибо: 8
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
finiki на пути к лучшему
По умолчанию

Сообщение от picavr
По моему проще (а главное быстрее найти причину) опробовать всё в железе.
Проблема в том, что последнее время вопрос моделирования вышел на первое место, т.к. для меня процессы разработки и отладки в железе значительно разнесены не только во времени, но и в пространстве.

Что касается ШИМ, то модель даже когда работает - работает все равно неправильно, т.к. период сигнала ШИМ (положительный перепад)должен начинаться в момент обнуления TMR2, а тут связь сигнала с работой таймера плохо прослеживается. Короткие импульсы синхронизации на рисунке - моменты переполнения таймера.

-- Прилагается рисунок: --
finiki вне форума  
Непрочитано 18.08.2009, 12:08  
picavr
Почётный гражданин KAZUS.RUN
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,815
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию

Сообщение от finiki
процессы разработки и отладки в железе значительно разнесены не только во времени, но и в пространстве.
Мне сложно понять, как можно что то писать без отладки в железе. Отладка это - ЧАТЬ работы по написанию пограммы. Порой в зависимости от результатов отладки одного модуля, переписываешь другой програмный модуль.

Сообщение от finiki
период сигнала ШИМ (положительный перепад)должен начинаться в момент обнуления TMR2. Короткие импульсы синхронизации на рисунке - моменты переполнения таймера.
Вам не нравится что короткий импульс не совпадает с перепадом ШИМ?

Скорее всего, момент обнуления TMR2 это на рисунке момент перепада сигнала ШИМ. А импульсы синхронизации это уже то что вы формируете по прерыванию TMR2.
Я правильно понял?
Отследите в отладчике MPLAB сколько проходит времени между переполнением таймера и тем моментом когда фрмируется ваш короткий импульс.

-- Прилагается рисунок: --
picavr вне форума  
Непрочитано 18.08.2009, 12:19  
finiki
Частый гость
 
Регистрация: 10.03.2007
Сообщений: 30
Сказал спасибо: 8
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
finiki на пути к лучшему
По умолчанию

Сообщение от arhimed486
это вроде помогло:
......................................
movlw d'45' ;!!! Перезапишем ширину
movwf CCPR1L ;!!! импульса.
clrf TMR2 ; это помогло
goto Wait ;
Можно пойти еще дальше и перед обнулением таймера прочитать его содержимое, а после обнуления - восстановить счет, но это помогает, если мы пытаемся увеличить (или оставить неизменной) длительность импульса ШИМ. Если же пытаться уменьшать длительность импульса, то примочка с обнулением таймера не срабатывает! Еще эфект зависит от исходной скважности. Полный мрак!!!

Диагноз для модели ШИМ в PIC16F877 (по совокупности фактов): пациент скорее мертв, чем жив. Но, это - мое мнение. Хотелось бы послушать авторитетных людей.
finiki вне форума  
Непрочитано 18.08.2009, 12:32  
finiki
Частый гость
 
Регистрация: 10.03.2007
Сообщений: 30
Сказал спасибо: 8
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
finiki на пути к лучшему
По умолчанию

Сообщение от picavr
Вам не нравится что короткий импульс не совпадает с перепадом ШИМ?
Скорее всего, момент обнуления TMR2 это на рисунке момент перепада сигнала ШИМ. А импульсы синхронизации это уже то что вы формируете по прерыванию TMR2.
Я правильно понял?
Отследите в отладчике MPLAB сколько проходит времени между переполнением таймера и тем моментом когда фрмируется ваш короткий импульс.
Проходит несколько тактов, но дело не в этом. Мне не нравится не то, что импульс синхронизации не совпадает с перепадом сигнала, а то,с каким именно перепадом (в этот момент должен быть перепад из 0 в 1, а не наоборот).

-- Прилагается рисунок: --
finiki вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Решено] RISC vis CISC, все "ЗА" и "ПРОТИВ". sanitar249 Отвлекитесь, эмбеддеры! 1 24.10.2007 09:56
Нет библиотеки Proteus "compim.dll" yel Proteus, KiCAD и другие ECAD 3 11.01.2007 10:20
datasheet на ШИМ "a1147lt" Dreikons Поиск схем. Делимся схемами 0 21.10.2006 08:55


Часовой пояс GMT +4, время: 13:56.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.