Обсуждаем контроллеры компании Atmel.
Ответить

широтно-импульсная модуляция

Вт июн 13, 2023 00:27:52

Доброго времени суток!
У меня возникла некоторая проблемка:
Настроил ШИМ на atmega328a с кварцем на 16МГц на максимум и когда посмотрел осциллографом, оказалось, что ШИМ колбасит всего то на 2кГц.

Стал разбираться и оказалось, что заводские фьюзы настроены на 8 МГц внутреннего генератора и плюс делитель на 8, в окошке программатора (TL866) убрал галочку делителя на 8 и контроллер совсем перестал программироваться, взял другой atmega328a заведомо рабочий и установил галочки на внешний кварцевый генератор и опять та же картина (контроллер совсем перестал программироваться).
Прошу подсказать, где я не прав и что с этим делать т.к. 2кГц это ни о чем, нужно хотя бы 20кГц?

Re: широтно-импульсная модуляция

Вт июн 13, 2023 09:43:54

подключи внешний кварц и начнет программироваться.

Re: широтно-импульсная модуляция

Вт июн 13, 2023 09:57:30

если делители и режимы настроены правильно, то ШИМ должен давать 3,9кГц на 1 МГц тактирования
1) режим ШИМ с фазовой коррекцией (вместо FastPWM) снижает частоту в 2 раза.
2) изменить (в т.ч. и выключить) деление тактовой частоты можно и не трогая фьюз SCDIV8, кодом:
Спойлер
Код:
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
3) фьюзы действуют всегда - и при работе и при программировании и если настроил работу на внешний кварц, то и при программировании (по крайней мере по ISP) кварц тоже нужен.
4) увеличить частоту ШИМ можно, снизив его разрешение т.е. если настроив счет не до 255 (3,9кГц на 1МГц тактирования), а до более малой величины, до 99 например (10кГц на 1 МГц тактирования)... для этого у таймера есть специальные режимы.

Re: широтно-импульсная модуляция

Вт июн 13, 2023 22:37:50

подключи внешний кварц и начнет программироваться.

извиняюсь забыл уточнить, (плата Arduino-Nano) на ней есть кварц

Re: широтно-импульсная модуляция

Вт июн 13, 2023 22:42:30

может, просто смотришь осциллографом гармонику, и если горизонтальную развертку покрутить, то внезапно станет счастье? и есть еще вариант - ШИМ не работает, зато срабатывает ватчдог.
Последний раз редактировалось Martian Вт июн 13, 2023 22:43:30, всего редактировалось 1 раз.

Re: широтно-импульсная модуляция

Вт июн 13, 2023 22:47:12

если делители и режимы настроены правильно, то ШИМ должен давать 3,9кГц на 1 МГц тактирования
1) режим ШИМ с фазовой коррекцией (вместо FastPWM) снижает частоту в 2 раза.
2) изменить (в т.ч. и выключить) деление тактовой частоты можно и не трогая фьюз SCDIV8, кодом:
Спойлер
Код:
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
3) фьюзы действуют всегда - и при работе и при программировании и если настроил работу на внешний кварц, то и при программировании (по крайней мере по ISP) кварц тоже нужен.
4) увеличить частоту ШИМ можно, снизив его разрешение т.е. если настроив счет не до 255 (3,9кГц на 1МГц тактирования), а до более малой величины, до 99 например (10кГц на 1 МГц тактирования)... для этого у таймера есть специальные режимы.

спасибо за код, но 10кГц не устроит, да и разобраться нужно, почему при изменении фьюзов возникают неполадки с платами Arduino, тут либо китайцы паяют не полноценные контроллеры либо программатор

Добавлено after 4 minutes 12 seconds:
может, просто смотришь осциллографом гармонику, и если горизонтальную развертку покрутить, то внезапно станет счастье? и есть еще вариант - ШИМ не работает, зато срабатывает ватчдог.

Ага смешно конечно, но с фьюзами это не решит проблемку

в Протеусе выставил частоту на 1МГц и действительно на моем коде около 2кГц

Re: широтно-импульсная модуляция

Вт июн 13, 2023 23:12:02

Покажите, какой именно фюз меняли. Чтобы избежать ошибок в будущем (напр.: прямые/обратные значения), читайте все фюзов с чипа -> меняйте фюзов, но будьте осторожны с некоторыми.

Если до манипуляции Arduino работал, то "вина" за некорректную работу только на Вас :). Ничего, можно исправить.

Немного проводов и напр. около 20 минут внимания и можете восстановить МК:
HV Rescue Simple - High voltage programming of ATmega328P and other Atmel chips on a breadboard
---
Использую для управления вентилятором PWM на 25 kHz. Arduino Nano 16 MHz, PWM на pin 9. Код может быть полезен.
Вложения
fan_4_pin_pwm_reg_01.zip
(1.02 KiB) Скачиваний: 22

Re: широтно-импульсная модуляция

Ср июн 14, 2023 00:20:56

Ага смешно конечно, но с фьюзами это не решит проблемку
с фьюзами нет, но с отсутствием ожидаемого у меня так было, и осцил гармонику так хорошо показал, что поверил ему (первый опыт работы с дешевым цифровиком), и ватчдог однажды совпал с требуемой частотой, да так, что фиг заметишь разницу, пока скважность не начнешь менять...

Re: широтно-импульсная модуляция

Ср июн 14, 2023 08:05:31

скорее всего это проклятие понипрог - инверсные фьюзы...
И получилось так, что вместо
"Тактирование от Кварца; Частота 8,0-... МГц; [CKSEL=1111]"
получили:
"Внешний тактовый сигнал; [CKSEL=0000]"

Добавлено after 1 minute 23 seconds:
решается вопрос просто - подключением этого самого внешнего генератора частотой от 1 кГц (точнее от 4хкратной частоты клок шины программирования) до 20 МГц и прошивки (точнее исправления фьюзов) с ним.

Добавлено after 12 minutes 34 seconds:
Чтобы в дальнейшем не наступать на эти грабли, сверяйся с фьюзами "RSTDISBL" и "SPIEN", (но не меняй их! - если программатор к чипу подключился, то они установлены 100% правильно) а если конфигурация требует их переключить - знай, это инверсная твоему прогеру конфигурация и её нужно вывернуть, чтобы эти фьюзы стали совпадать.
ПС бывают варианты, когда нужно менять эти фьюзы, но когда это делают, то твердо знают, зачем это делают и к каким последствиям это приведёт...

Re: широтно-импульсная модуляция

Ср июн 14, 2023 21:47:20

решается вопрос просто - подключением этого самого внешнего генератора частотой от 1 кГц (точнее от 4хкратной частоты клок шины программирования) до 20 МГц и прошивки (точнее исправления фьюзов) с ним.

А можно поподробней, тоже окирпичил один мк, после пытался реанимировать - подавал 1МГц на XTAL1 при помощи программатора AVR910 - не помогло :dont_know:

Re: широтно-импульсная модуляция

Чт июн 15, 2023 06:24:14

kote52, смотря как окирпичил...
если испортил CKSEL - то генератор должен помочь,
а вот если отключен ресет (RSTDISBL) или вообще внутрисхемное программирование (SPIEN), то исправить можно будет только на HV программаторе (например фьюзебит-доктором)

Re: широтно-импульсная модуляция

Чт июн 15, 2023 10:00:53

если испортил CKSEL - то генератор должен помочь,
а вот если отключен ресет (RSTDISBL) или вообще внутрисхемное программирование (SPIEN), то исправить можно будет только на HV программаторе

Вот как окирпичил не скажу, вообще не трогал фьюзы, потом решил за каким то поменять BODLEVEL и не помню вкл ли я BODEN, перещитал в калькуляторе фьюзов и записал через SinaProg, прошился и все... Программатор USBASP. Ну и попытался через AVR910 оживить.
HV - я таким оживлял tiny13 когда использовал ресет как доп. ножку.
Попробую на макетке собрать!

Re: широтно-импульсная модуляция

Чт июн 15, 2023 10:38:00

для тини13 нужен последовательный HV программатор, для более многоногих контроллеров - тини2313 и мег нужен параллельный HV прогер, его на макетке не так просто собрать... проще всего иметь в закромах фьюз-доктора, вот мой вариант из того, что на материнках водится... https://www.radiokot.ru/forum/viewtopic ... 6#p3870306

Добавлено after 5 minutes 46 seconds:
я окирпичивал по началу, просто забыв считать фьюзы...
теперь алгоритм железный:
1 считал
2 определил инвертированность программатора
3 внес правки (именно правки, анализируя разницу текущего и требуемого состояний)
4 прошил фьюзы.
за 7 лет ни одного кирпича...

Re: широтно-импульсная модуляция

Пт июн 16, 2023 08:47:52

vimm
Платки ардуино по умолчанию приходят с прошитым бутлоадером.
Далее в зависимости от того, как их использовать -
если под ардуиноIDE смена базовой частоты довольно сложный процесс, ибо увязан с другим функционалом,который может быть нарушен.
Лучше тогда установить платформы, позволяющие эти значения изменять (их штуки три как минимум имеются).
Если для самостоятельной разработки иными средствами - тогда надо предварительно тот бутлоадер удалить - выполнить полное стирание МК и проверить BOD (по умолчанию там он активирован) и размещение таблиц векторов прерываний ("последствия" ранее установленного бутлоадера BOOTRST, BOOTSZ1 и BOOTSZ0 и прочее...).
Да и кварц у нанок/про-мини весьма далек от "абсолютной точности" и капризен в отношении внешних загрязнений.
:roll:

Re: широтно-импульсная модуляция

Пт июн 16, 2023 10:14:12

Доброго времени суток!
У меня возникла некоторая проблемка:
Настроил ШИМ на atmega328a с кварцем на 16МГц на максимум и когда посмотрел осциллографом, оказалось, что ШИМ колбасит всего то на 2кГц.

Плата Ардуино Нано на 8 мгц не сможет загрузить софт - только через внешний программатор.
Т.е., сразу будет видно что с платой что то не так.
Ответить