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

 
 
> Fast PWM на AVR
Валентиныч
сообщение Mar 18 2006, 14:01
Сообщение #1


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

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Парочка вопросов к уважаемой публике.
1) Можно ли на Меге 8 (f(clc)=8 МГц, Timer2) организовать PWM с программной регулировкой частоты (от 20 до 200 кГц) и скважности (с дискретностью не хуже 5 %) ШИМ-сигнала?
2) Если можно - то КАК ЭТО СДЕЛАТЬ (какие настройки таймера использовать)?

Сообщение отредактировал Валентиныч - Mar 18 2006, 14:03


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Mar 18 2006, 18:38
Сообщение #2


кекс
******

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



Вот пример реализации ЧИМ + ШИМ на Tiny13 (OCR0A - регулирует частоту, OCR0B - ширину импульса):

Код
.include <tn13def.inc>
.def AL = R24
.def AH = R25

.equ  Period = 100;
.equ  SwitchPoint =  20;

;--------------------------------------------------
; Макрос настройки таймера T0 на работу в режиме ОС
; с длительностью периода = Period, и скважностью шириной импульса определяемой SwitchPoint
.macro INIT_TIMER0
    ldi  AL, (Period); Длительность периода
    out  OCR0A, AL

    ldi  AL, (SwitchPoint); Скважность
    out  OCR0B, AL

    ldi  AL, (1 << WGM01);  Режим CTC по достижению OCR0A
    out  TCCR0A, AL

    ldi  AL, 1
    out  TCCR0B, AL;   Режим подсчета тактов (Prescaler = 1)

    ldi  AL, (1 << OCIE0A)|(1 << OCIE0B); Разрешить оба прерывания по достижению OCR0A и OCR0B
    out  TIMSK0, AL
.endmacro
;---------------------------------------------------
.cseg

;===================================================
; ENTRY POINT
;===================================================
.org 0
    rjmp  Start
    reti; IRQ0 Handler
    reti; PCINT0 Handler
    reti; Timer0 Overflow Handler
    reti; EEPROM Ready Handler
    reti; Analog Comparator Handler
    rjmp  TIM0_COMPA; Timer0 CompareA Handler
    rjmp  TIM0_COMPB; Timer0 CompareB Handler
    reti; Watchdog Interrupt Handler
    reti; ADC Conversion Handler

START: //
    ldi   AL,low(RAMEND); Main program start
    out   SPL, AL
    ldi   AL, $FF
    out   DDRB, AL

    INIT_TIMER0; Инициализация таймера

    sei


;****************************************************
; Основной цикл программы
;****************************************************
MainCycle:          
    rjmp  MainCycle  

    
;****************************************************
; Обработчик прерывания TMR0 (Timer 0 OC)
;****************************************************
TIM0_COMPA:; Timer0 Compare A Handler
    cbi   PortB, 0
    reti

;****************************************************
; Обработчик прерывания TMR0 (Timer 0 OC)
;****************************************************
TIM0_COMPB:; Timer0 Compare B Handler
    sbi   PortB, 0
    reti


Удачи

Цитата
В Мегах такой фишки не нахожу.

В мегах то же самое только на таймере 1. Поле для конструирования частот и ширины куда больше т.к. таймер 16-бит. если не нужно использовать все 16 разрядов, то можно производить запись соответственно только в младшую часть регистров OCR1AL, OCR1BL..

Сообщение отредактировал defunct - Mar 19 2006, 06:54
Go to the top of the page
 
+Quote Post



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

 


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


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