Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ШИМ 100 кГц, help
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
САНЯ100
Такая проблема:
есть микроконтроллер, скажем ATmega8535,
есть кварц, пусть 12 МГц,
использовать таймер-счетчик будем в режиме счета до максимального числа и обратно.
Так вот в чем проблема, в таком режиме таймер-счетчик можно использовать минимум как 8-битный.
мне нужно получить частоту ШИМ = 100 кГц, соответственно, если не используем предделитель частоты
получаемчастоту ШИМ=12 МГц/510,
где 510-кол-во счета таймера
Мне нужно чтоб частота ШИМ равнялась 100 кГц, так вот, если испоьзовать такой счетчик, то кристал должен работать на частоте 12 МГц*510=многова то будет


Спецы, как можно исправить проблему, в принципе, можно заставить таймер считать от 0...61 и от 60 ...1
Уважаемые, помогите настроить таймер, чтоб так считал, вот мой кусок прграммы:
таймер все равно считает до 255 и обратно, где ошибка? 07.gif

Start:
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, high(RAMEND)
out SPH, R16

clr R16
out ICR1H, R16
ldi R16, 60 ; ICR1 = 60 - "потолок" счетчика
out ICR1L, R16
clr R16
ldi R16, 160 ; ICR1 = 60 - "потолок" счетчика
out TCNT1L, R16
; в OCR1A и(или) OCR1B можно занести коэффициент заполнения ШИМ
; предварительно настроив режим выхода OC1A и OC1B
ldi R16, (1<<WGM11)
out TCCR1A, R16
ldi R16, (1<<WGM13)+(1<<CS10); счетчик работает на тактовой частоте без деления
out TCCR1B, R16

rjmp PC ; просто бесконечный цикл
domowoj
ICR1 - регистр захвата, информация в котором защелкивается по сигналу ICP.
Для ШИМ нужно исп. OCR.
САНЯ100
Цитата(domowoj @ Jun 2 2008, 20:39) *
ICR1 - регистр захвата, информация в котором защелкивается по сигналу ICP.

В смысле? как это организовать?

Для ШИМ нужно исп. OCR. -это понятно
defunct
Цитата(САНЯ100 @ Jun 2 2008, 19:03) *
должен работать на частоте 12 МГц*510=многова то будет

Почему 12M * 510?
вообще-то 100kHz * 510.
Но и это многовато.
Цитата
Мне нужно чтоб частота ШИМ равнялась 100 кГц

Выход - использовать другие режимы ШИМ.
0->OСRxB (где таймер будет считать не до 0xFF, а до OCRxB).
ILYAUL
Цитата(САНЯ100 @ Jun 2 2008, 20:03) *
Код
      
      ldi      R16, 60        ; ICR1 = 60 - "потолок" счетчика
      out      ICR1L, R16
     clr      R16
ldi      R16, 160        ; ICR1 = 60 - "потолок" счетчика
      
      rjmp   PC           ; просто бесконечный цикл


Вы с цифрами ничего не напутали

510=$1FE

Значит младший байт $FE , старший $01
а 160 = $A0 - 60= $3С
САНЯ100
Выход - использовать другие режимы ШИМ.
0->OСRxB (где таймер будет считать не до 0xFF, а до OCRxB).
[/quote]

Друг, подскажи как это программно реализовать
defunct
Цитата(САНЯ100 @ Jun 2 2008, 22:32) *
Друг, подскажи как это программно реализовать

Сорри, я чего-то подумал на другой чип. Для m8535 все верно.
Вот убрал лишнее и проверил
CODE

clr R16
out ICR1H, R16
;
ldi R16, 60 ; ICR1 = 60 - "потолок" счетчика
out ICR1L, R16
;
; в OCR1A и(или) OCR1B можно занести коэффициент заполнения ШИМ
; предварительно настроив режим выхода OC1A и OC1B
ldi R16, (1<<WGM11) // | (1 << WGM10)
out TCCR1A, R16
ldi R16, (1<<WGM13) | (1<<CS10); счетчик работает на тактовой частоте без деления
out TCCR1B, R16

rjmp PC ; просто бесконечный цикл

Если смотреть симулятором, то там баг - действительно крутит до 512.
А в железе этот же код (смотреть через JTAG, на m16) работает как надо - до 60-ти и обратно.
domowoj
Тоже не разглядел про ICR1.
Но в этом реж. в него ( ICR1) коэф. счета нужно заносить число 30, а не 60.
Т.е. дискретность ШИМ при 100кГц будет период/30.

САНЯ100 а зачем вам считать в обе стороны,
может подойдет реж. fast PWM, дискретность удвоится.
САНЯ100
Цитата(defunct @ Jun 3 2008, 02:19) *
Сорри, я чего-то подумал на другой чип. Для m8535 все верно.
Вот убрал лишнее и проверил
CODE

clr R16
out ICR1H, R16
;
ldi R16, 60 ; ICR1 = 60 - "потолок" счетчика
out ICR1L, R16
;
; в OCR1A и(или) OCR1B можно занести коэффициент заполнения ШИМ
; предварительно настроив режим выхода OC1A и OC1B
ldi R16, (1<<WGM11) // | (1 << WGM10)
out TCCR1A, R16
ldi R16, (1<<WGM13) | (1<<CS10); счетчик работает на тактовой частоте без деления
out TCCR1B, R16

rjmp PC ; просто бесконечный цикл

Если смотреть симулятором, то там баг - действительно крутит до 512.
А в железе этот же код (смотреть через JTAG, на m16) работает как надо - до 60-ти и обратно.




Нда, и как же быть? может действительно чего не хватает? ведь по идее он во время отладки тоже должен считать до 60 и обратно 05.gif

Цитата(domowoj @ Jun 3 2008, 05:51) *
Тоже не разглядел про ICR1.
Но в этом реж. в него ( ICR1) коэф. счета нужно заносить число 30, а не 60.
Т.е. дискретность ШИМ при 100кГц будет период/30.

при частоте 12 МГц чтобы частота ШИМ получилась 100 Кгц надо чтоб счетчик считал кол-во импульсов=120, в принципе все равно в каком режиме получить ШИМ

САНЯ100 а зачем вам считать в обе стороны,
может подойдет реж. fast PWM, дискретность удвоится.



можно и так- не получается
_Pasha
Цитата(САНЯ100 @ Jun 3 2008, 07:59) *
Нда, и как же быть? может действительно чего не хватает? ведь по идее он во время отладки тоже должен считать до 60 и обратно 05.gif


Это давняя, почти хроническая болезнь АВРстудии - неправильно симулировать разные режимы работы ШИМ. Лично я только убеждаюсь, что все соотв. регистры таймера проинициализарованы тем, чем нужно. Остальное делаю "вслепую"
САНЯ100
Т.е. в программе все нормально?! добавить еще значения переключения на выводах (короче сделать ШИМ) - И ВСЕ ДОЛЖНО РАБОТАТЬ?
_Pasha
Цитата(САНЯ100 @ Jun 3 2008, 08:07) *
И ВСЕ ДОЛЖНО РАБОТАТЬ?


... если добавить настройку соответствующей линии порта на выход и загнать в TCCR1A правильные настройки COM1xx - инвертированный шим или неинвертированный
defunct
Цитата(САНЯ100 @ Jun 3 2008, 08:07) *
Т.е. в программе все нормально?! добавить еще значения переключения на выводах (короче сделать ШИМ) - И ВСЕ ДОЛЖНО РАБОТАТЬ?

Да.

Для отладки разживитесь JTAGICE'ом. Всяко приятнее отлаживать прямо на чипе, чем сталкиваться с такими вот глюками симуляторов. (для затравки - Evertool)
САНЯ100
Цитата(_Pasha @ Jun 3 2008, 09:16) *
... если добавить настройку соответствующей линии порта на выход и загнать в TCCR1A правильные настройки COM1xx - инвертированный шим или неинвертированный

Вот я и хочу понять как правильно сделать настройки help.gif
САНЯ100
Ребята, кто нито может привести кусок программы, где таймер-счетчик считает не до $ff? а ,скажем до 100 и обратно, или хотя бы просто до 100 и сброс в ноль
САНЯ100
Посоветуйте схему JTAG для AVR рабочую,проверенную
defunct
Цитата(САНЯ100 @ Jun 3 2008, 18:11) *
Посоветуйте схему JTAG для AVR рабочую,проверенную

Я уже одну проверенную привел:
Цитата
(для затравки - Evertool)

Наберите слово "Evertool" в Google и первая ссылка - Ваша smile.gif
САНЯ100
может кто даст нормальную ссылочку с файлами под ЛУТ Evertool, ЧЁ ТО Я ЗАПУТАЛСЯ
Заранее СПАСИБО
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.