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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> ШИМ 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
domowoj
сообщение Jun 2 2008, 16:39
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



ICR1 - регистр захвата, информация в котором защелкивается по сигналу ICP.
Для ШИМ нужно исп. OCR.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 2 2008, 17:45
Сообщение #3


Участник
*

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



Цитата(domowoj @ Jun 2 2008, 20:39) *
ICR1 - регистр захвата, информация в котором защелкивается по сигналу ICP.

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

Для ШИМ нужно исп. OCR. -это понятно
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 2 2008, 17:58
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 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
ILYAUL
сообщение Jun 2 2008, 19:05
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(САНЯ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С


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 2 2008, 19:32
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 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
Сообщение #7


кекс
******

Группа: Свой
Сообщений: 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
domowoj
сообщение Jun 3 2008, 01:51
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



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

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


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 3 2008, 04:59
Сообщение #9


Участник
*

Группа: Новичок
Сообщений: 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
Сообщение #10


;
******

Группа: Участник
Сообщений: 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
Сообщение #11


Участник
*

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



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


;
******

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



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


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


кекс
******

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



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

Да.

Для отладки разживитесь JTAGICE'ом. Всяко приятнее отлаживать прямо на чипе, чем сталкиваться с такими вот глюками симуляторов. (для затравки - Evertool)
Go to the top of the page
 
+Quote Post
САНЯ100
сообщение Jun 3 2008, 11:41
Сообщение #14


Участник
*

Группа: Новичок
Сообщений: 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
Сообщение #15


Участник
*

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



Ребята, кто нито может привести кусок программы, где таймер-счетчик считает не до $ff? а ,скажем до 100 и обратно, или хотя бы просто до 100 и сброс в ноль
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 22:03
Рейтинг@Mail.ru


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