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

Обсуждаем контроллеры компании Atmel.
Ответить
Родился
Сообщения: 3
Зарегистрирован: Вт июн 13, 2023 00:06:00

Сообщение vimm »

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

Стал разбираться и оказалось, что заводские фьюзы настроены на 8 МГц внутреннего генератора и плюс делитель на 8, в окошке программатора (TL866) убрал галочку делителя на 8 и контроллер совсем перестал программироваться, взял другой atmega328a заведомо рабочий и установил галочки на внешний кварцевый генератор и опять та же картина (контроллер совсем перестал программироваться).
Прошу подсказать, где я не прав и что с этим делать т.к. 2кГц это ни о чем, нужно хотя бы 20кГц?
Реклама
Модератор
Аватара пользователя
Сообщения: 19091
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

подключи внешний кварц и начнет программироваться.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7080
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если делители и режимы настроены правильно, то ШИМ должен давать 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 МГц тактирования)... для этого у таймера есть специальные режимы.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Родился
Сообщения: 3
Зарегистрирован: Вт июн 13, 2023 00:06:00

Сообщение vimm »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4430259#p4430259"]подключи внешний кварц и начнет программироваться.[/uquote]
извиняюсь забыл уточнить, (плата Arduino-Nano) на ней есть кварц
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

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

Сообщение vimm »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4430264#p4430264"]если делители и режимы настроены правильно, то ШИМ должен давать 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 МГц тактирования)... для этого у таймера есть специальные режимы.[/uquote]
спасибо за код, но 10кГц не устроит, да и разобраться нужно, почему при изменении фьюзов возникают неполадки с платами Arduino, тут либо китайцы паяют не полноценные контроллеры либо программатор

Добавлено after 4 minutes 12 seconds:
[uquote="Martian",url="/forum/viewtopic.php?p=4430648#p4430648"]может, просто смотришь осциллографом гармонику, и если горизонтальную развертку покрутить, то внезапно станет счастье? и есть еще вариант - ШИМ не работает, зато срабатывает ватчдог.[/uquote]
Ага смешно конечно, но с фьюзами это не решит проблемку

в Протеусе выставил частоту на 1МГц и действительно на моем коде около 2кГц
Реклама
Поставщик валерьянки для Кота
Сообщения: 1948
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

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

Если до манипуляции 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 КБ) 55 скачиваний
Контактная информация:
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

[uquote="vimm",url="/forum/viewtopic.php?p=4430649#p4430649"]Ага смешно конечно, но с фьюзами это не решит проблемку[/uquote] с фьюзами нет, но с отсутствием ожидаемого у меня так было, и осцил гармонику так хорошо показал, что поверил ему (первый опыт работы с дешевым цифровиком), и ватчдог однажды совпал с требуемой частотой, да так, что фиг заметишь разницу, пока скважность не начнешь менять...
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7080
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

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

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

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

Сообщение kote52 »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4430751#p4430751"]решается вопрос просто - подключением этого самого внешнего генератора частотой от 1 кГц (точнее от 4хкратной частоты клок шины программирования) до 20 МГц и прошивки (точнее исправления фьюзов) с ним.[/uquote]
А можно поподробней, тоже окирпичил один мк, после пытался реанимировать - подавал 1МГц на XTAL1 при помощи программатора AVR910 - не помогло :dont_know:
Друг Кота
Аватара пользователя
Сообщения: 7080
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

kote52, смотря как окирпичил...
если испортил CKSEL - то генератор должен помочь,
а вот если отключен ресет (RSTDISBL) или вообще внутрисхемное программирование (SPIEN), то исправить можно будет только на HV программаторе (например фьюзебит-доктором)
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Встал на лапы
Сообщения: 121
Зарегистрирован: Пт мар 19, 2021 08:58:45

Сообщение kote52 »

[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4431340#p4431340"]если испортил CKSEL - то генератор должен помочь,
а вот если отключен ресет (RSTDISBL) или вообще внутрисхемное программирование (SPIEN), то исправить можно будет только на HV программаторе[/uquote]
Вот как окирпичил не скажу, вообще не трогал фьюзы, потом решил за каким то поменять BODLEVEL и не помню вкл ли я BODEN, перещитал в калькуляторе фьюзов и записал через SinaProg, прошился и все... Программатор USBASP. Ну и попытался через AVR910 оживить.
HV - я таким оживлял tiny13 когда использовал ресет как доп. ножку.
Попробую на макетке собрать!
Друг Кота
Аватара пользователя
Сообщения: 7080
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

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

Добавлено after 5 minutes 46 seconds:
я окирпичивал по началу, просто забыв считать фьюзы...
теперь алгоритм железный:
1 считал
2 определил инвертированность программатора
3 внес правки (именно правки, анализируя разницу текущего и требуемого состояний)
4 прошил фьюзы.
за 7 лет ни одного кирпича...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Друг Кота
Аватара пользователя
Сообщения: 15742
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

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

Сообщение OKF »

[uquote="vimm",url="/forum/viewtopic.php?p=4430151#p4430151"]Доброго времени суток!
У меня возникла некоторая проблемка:
Настроил ШИМ на atmega328a с кварцем на 16МГц на максимум и когда посмотрел осциллографом, оказалось, что ШИМ колбасит всего то на 2кГц.[/uquote]
Плата Ардуино Нано на 8 мгц не сможет загрузить софт - только через внешний программатор.
Т.е., сразу будет видно что с платой что то не так.
Ответить

Вернуться в «AVR»