реклама на сайте
подробности

 
 
> ШИМ 100 кГц, help, ШИМ 100 кГц
САНЯ100
сообщение Jun 2 2008, 16:03
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 2-06-08
Пользователь №: 37 994



Такая проблема:
есть микроконтроллер, скажем 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 ; просто бесконечный цикл
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Jun 2 2008, 17:58
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



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

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

Выход - использовать другие режимы ШИМ.
0->OСRxB (где таймер будет считать не до 0xFF, а до OCRxB).
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 2 2008, 19:32
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 2-06-08
Пользователь №: 37 994



Выход - использовать другие режимы ШИМ.
0->OСRxB (где таймер будет считать не до 0xFF, а до OCRxB).
[/quote]

Друг, подскажи как это программно реализовать
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 2 2008, 22:19
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(САНЯ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-ти и обратно.
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 3 2008, 04:59
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 2-06-08
Пользователь №: 37 994



Цитата(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, дискретность удвоится.



можно и так- не получается
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jun 3 2008, 05:02
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



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


Это давняя, почти хроническая болезнь АВРстудии - неправильно симулировать разные режимы работы ШИМ. Лично я только убеждаюсь, что все соотв. регистры таймера проинициализарованы тем, чем нужно. Остальное делаю "вслепую"
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 3 2008, 05:07
Сообщение #7


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 2-06-08
Пользователь №: 37 994



Т.е. в программе все нормально?! добавить еще значения переключения на выводах (короче сделать ШИМ) - И ВСЕ ДОЛЖНО РАБОТАТЬ?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jun 3 2008, 05:16
Сообщение #8


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(САНЯ100 @ Jun 3 2008, 08:07) *
И ВСЕ ДОЛЖНО РАБОТАТЬ?


... если добавить настройку соответствующей линии порта на выход и загнать в TCCR1A правильные настройки COM1xx - инвертированный шим или неинвертированный
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 3 2008, 11:41
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 2-06-08
Пользователь №: 37 994



Цитата(_Pasha @ Jun 3 2008, 09:16) *
... если добавить настройку соответствующей линии порта на выход и загнать в TCCR1A правильные настройки COM1xx - инвертированный шим или неинвертированный

Вот я и хочу понять как правильно сделать настройки help.gif
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 3 2008, 13:48
Сообщение #10


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 2-06-08
Пользователь №: 37 994



Ребята, кто нито может привести кусок программы, где таймер-счетчик считает не до $ff? а ,скажем до 100 и обратно, или хотя бы просто до 100 и сброс в ноль
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 3 2008, 15:11
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 2-06-08
Пользователь №: 37 994



Посоветуйте схему JTAG для AVR рабочую,проверенную
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- САНЯ100   ШИМ 100 кГц, help   Jun 2 2008, 16:03
- - domowoj   ICR1 - регистр захвата, информация в котором защел...   Jun 2 2008, 16:39
|- - САНЯ100   Цитата(domowoj @ Jun 2 2008, 20:39) ICR1 ...   Jun 2 2008, 17:45
||- - defunct   Цитата(САНЯ100 @ Jun 3 2008, 18:11) Посов...   Jun 3 2008, 23:59
||- - САНЯ100   может кто даст нормальную ссылочку с файлами под Л...   Jun 5 2008, 14:13
|- - defunct   Цитата(САНЯ100 @ Jun 3 2008, 08:07) Т.е. ...   Jun 3 2008, 11:40
- - ILYAUL   Цитата(САНЯ100 @ Jun 2 2008, 20:03) Код ...   Jun 2 2008, 19:05
- - domowoj   Тоже не разглядел про ICR1. Но в этом реж. в него ...   Jun 3 2008, 01:51


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016