11.05.2018, 16:46
|
|
Вид на жительство
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,397
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
|
Просветите, пожалуйста, по ШИМу
Добрый день,
задачка очень простая: через АЦП считываем значение с потенциометра и передаем его в ШИМ.
Сделал так:
Код:
|
while(1)
{
if (ADCON0.GO == 0) { Voltage = ADRESH; ADCON0.GO = 1;}
CCPR1L = Voltage;
} |
но значение ШИМа постоянно "колбасит" в раене нуля.
Добавил в цикл delay_ms(100), заработало более-менее стабильно. но осцилограмка периодически дергалась.
Как надо - заработало только в таком виде:
Код:
|
while(1)
{
if (ADCON0.GO == 0) { Voltage = ADRESH; ADCON0.GO = 1;}
PWMvalue = Voltage;
if (PWMvalue != PWMold) {CCPR1L = PWMvalue; PWMold = PWMvalue;}
}
} |
Вопрос: в регистр CCPR1L нельзя часто писАть? Или это глюк кмпилятора/симулятора?
Использован PIC12F683, компилятор MicroC, симулятор с осциллографом - Proteus.
Инициализация проца:
Код:
|
OPTION_REG = 0b10000000; //PullUP disabled, Scaller to TMR0 (1:2)
INTCON = 0b10100000; //Interrupt, TMR0
OSCCON = 0b01100001; //4MHz, Internal
TRISIO = 0b00111000;
ADCON0 = 0b00001111; //Data in ADRESH, Ref Vdd, AN3, ADC run and enabled
ANSEL = 0b01011000; //Fosc/16, AN3
CMCON0 = 0b00000111; //Disable comparator
CCP1CON = 0b00001110; //PWM, active LOW
PR2 = 255;
T2CON = 0b01111101; //for PWM, postscaller 16, prescaller 4 |
|
|
|
|
11.05.2018, 19:26
|
|
Прописка
Регистрация: 14.12.2006
Адрес: Ставрополь - Донское
Сообщений: 252
Сказал спасибо: 111
Сказали Спасибо 186 раз(а) в 76 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
а не перезапускается ли ШИМ при записи?
покури датащит
|
|
|
|
11.05.2018, 19:37
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,375
Сказал спасибо: 176
Сказали Спасибо 3,128 раз(а) в 2,017 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
Вот поэтому в стм32 теневой регистр есть. Оно там записывается только в нулевой момент
__________________
кагмаподэ магмаподэ
|
|
|
|
11.05.2018, 22:05
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
Вечно тебя то в тень, то в темноту тянет.
Там дело в прелоад, включён он или выключен. Эта фишка есть во многих МК, не только в СТМ, в новых ПИКах и Мегах тоже есть. В старых нет и в документации это отражено - при быстрой смене значений будут глитчи.
|
|
|
|
11.05.2018, 22:49
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 584
Сказал спасибо: 222
Сказали Спасибо 232 раз(а) в 152 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
я дико извиняюсь, но
1. скважность ШИМ заносится из регистра CCPR1Н данные в него попадают в начале цикла ШИМ из регистра CCPR1L так шо претензии к модулю ССР мимо кассы.
2. шо там у ТС за потенциометр одному богу известно, и даже если оный в рамках дозволенных ДШ 10кОм , задержку перед преобразованием на перезаряд емкости отсутствующую у ТС никто не отменял, в ДШ есть формула расчета.
3. + шумы на входе АЦП , а никакого ЦФ в коде ТСа не наблюдаетцо
|
|
|
|
12.05.2018, 00:33
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
Это все легко определяется записью и анализом значений АЦП и выводом тестовой таблицы через ШИМ.
|
|
|
Сказали "Спасибо" STM32F0
|
|
|
12.05.2018, 03:58
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,246
Сказал спасибо: 11,165
Сказали Спасибо 3,854 раз(а) в 2,925 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
А именно потенциометр в этой схеме столь категорично обязателен?
При его замене на энкодер обработка сильно упростится.
DAC нужен там, где нет ему альтернативы.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
12.05.2018, 20:43
|
|
Вид на жительство
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,397
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
Всем спасибо за советы. Даташит читал, говорят, что в CCPR1L можно писать в любой момент. Про АЦП и шумы - тож не в счет, ибо просто строка CCPR1L := 50; прямо в цикле while уже даёт каку.
До этого делал таким же макаром с PIC16F876 (всмысле, многократная запись в CCPR), работает без проблем.
Так что куплю проц и попробую, как будет в реале
|
|
|
|
12.05.2018, 21:05
|
|
Прописка
Регистрация: 19.02.2008
Адрес: г. Иркутск
Сообщений: 275
Сказал спасибо: 213
Сказали Спасибо 166 раз(а) в 78 сообщении(ях)
|
Re: Просветите, пожалуйста, по ШИМу
У Pic12f683 c модулем CCP регулярно непонятки происходят.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:07.
|
|