Файлы  •  Ссылки  •  Прошивки  •  Правила  •  Архив  •   FAQ  •  Участники  •  Поиск
Регистрация  •  Вход

Как расчитать частоту дискритизации ШИМ в ATtiny 26L

Список форумов» Программное обеспечение» Микроконтроллеры
АвторСообщение
ARTEM27
Участник
Сообщения: 243




02-06-2015 09:05

Всем добрый день ! улыбка

Как уже написал мучает меня контроллер ATtiny 26L.
В даташите есть страница под номером 57.
Я настроил контроллер под первую строку в этой таблице.

тактовая 1 МГц по умолчанию.
Режим не FAST.
В соответствие с таблицей и формулами в документе
сделал следующее 1000000 Гц/16=62500 Гц
потом 62500Гц /(OCR1C=199+1)=312.5 Гц
То есть частота ШИМ равна 312.5 Гц
замерил на осциллографе. Все четко.
Длительность импульса шим регулируется
Но в таблице ещё есть параметр частота дискритизации ШИМ и равна она 20кГц в моем случае
ВОПРОС. Как ее рассчитать ?Помогите иначе с ума сойду
Сумасшедший!

http://filecloud.me/eveymsdwbl56.html это даташиит
pavel-pervomaysk
Your editor
Сообщения: 8037




02-06-2015 09:34

1МГц (1 такт 1 мкс).
1 Гц (1с)
Считай.

Как только запустился таймер, прерывание сработает, когда он переполнится.
Как его заполнять и на какой тактовой частоте - твоя задача.
Не забудь про прескаллер (делитель) своего таймера прочитать.
ARTEM27
Участник
Сообщения: 243




02-06-2015 10:26

pavel-pervomaysk писал:
1МГц (1 такт 1 мкс).
1 Гц (1с)
Считай.

Как только запустился таймер, прерывание сработает, когда он переполнится.
Как его заполнять и на какой тактовой частоте - твоя задача.
Не забудь про прескаллер (делитель) своего таймера прочитать.


Если я правильно понял то прескаллер это есть регистр TCCR1B
TCCR1B|=(1 Или есть ещё какой-то прескаллер о котором я не увидел инфу в доках ?
pavel-pervomaysk
Your editor
Сообщения: 8037




02-06-2015 11:57

Timer/Counter1 Control Register A – TCCR1A
Режим работы таймера

Timer/Counter1 Control Register B – TCCR1B
4 бита прескаллера CS13 CS12 CS11 CS10
PCK - PCK/16384, тоесть 1 счет таймера за опредеденной количество циклов тактового генератора.
в моем даташите страница 52 с таблицей.


На пальцах:

cli ; Disable interrupts
TCCR1B = (TCR1B &0xC0 | 0x04); ставим прескаллер F.osc/8.
заносим значение в TCNT1 (внимательно читаем как), ибо там есть неплохие грабли...
sei ;
ждем прерывания, по надобности его обрабатываем, либо в векторе ставим Reti.
ARTEM27
Участник
Сообщения: 243




02-06-2015 13:22

pavel-pervomaysk писал:
Timer/Counter1 Control Register A – TCCR1A
Режим работы таймера

Timer/Counter1 Control Register B – TCCR1B
4 бита прескаллера CS13 CS12 CS11 CS10
PCK - PCK/16384, тоесть 1 счет таймера за опредеденной количество циклов тактового генератора.
в моем даташите страница 52 с таблицей.


На пальцах:

cli ; Disable interrupts
TCCR1B = (TCR1B &0xC0 | 0x04); ставим прескаллер F.osc/8.
заносим значение в TCNT1 (внимательно читаем как), ибо там есть неплохие грабли...
sei ;
ждем прерывания, по надобности его обрабатываем, либо в векторе ставим Reti.


Может мы о разных режимах беседуем
Как видишь, я прерывание здесь вообще не использую. ШИМ блок
работает аппаратно

#include
#include

void dnPWM (void) {


if (OCR1A OCR1A=OCR1A-2 ; // уменшаем содержимое регистра сравнения

}

while ((PINB&(1 }




void upPWM (void) {

if (OCR1A>1){
OCR1A=OCR1A+2 ; // увеличиваем содержимое регистра сравнения

}
while ((PINB&(1 }








void scan (void){


if ((PINB&(1 upPWM() ;
while ((PINB&(1

}

if ((PINB&(1 dnPWM() ;
while ((PINB&(1 }

}







void mcu_init (void) { // инициализация контроллера


ACSR|= (1
DDRB|= ((1 DDRB&=~((1 OCR1A = 20; //скважность ШИМ начальное
OCR1C = 199; // Частота ШИМ
TCCR1A|= (1 (PB1)
TCCR1B|=(1 }











int main (void) {


mcu_init() ; //вызов инициализации контроллера


while(1){
scan(); // опрос кнопок
if (TIFR&(1 TIFR=0x64; // и PB0 меняет своё состояние за два такта и на осцилографе видно что таймер
// переполняется с частотой 62500 гЦ

if ((PORTB&(1
PORTB|=(1
if (PORTB&(1
PORTB&=~(1 }

}
}

}

}

Добавлено 02-06-2015 13:24

Отобразилось не совсем правильно. Работаю с AVR Studio 4 + WINAVR
ARTEM27
Участник
Сообщения: 243




02-06-2015 20:37

Все. Разобрался. Извиняюсь за коламбур.
Формула (на стр.56 прикрепленного мной даташита.) Fpwm=Ftck1/(OCR1C+1) подходит для расчета режима FAST PWM и так же для расчета режима обычного PWM.Я делал расчет обычного PWM ,а смотрел в таблицу 27.И конечно же у меня ничего не получалось.Т.к я брал тактовую частоту 1мГц.А таблица эта сделана для расчета от 64мГц.То есть если мы в таблицу поставим за место PCK число 64000000 гц то все сходится.Вот тут то я и заблудился думая ,что это частота дискритизации( в самой левой колонки в таблице ) при 1мГц.А это оказалась частота FAST PWM при 64мГц.
Объяснил как мог. улыбка
Список форумов» Программное обеспечение» Микроконтроллеры» Как расчитать частоту дискритизации ШИМ в ATtiny 26L
Перейти:  
Текущий раздел» Программное обеспечение» Микроконтроллеры (Микроконтроллеры - AVR-ы, PIC-и и другие)


Похожая информация:
  • Програматор для Attiny 13,Attiny 26
  • ATtiny 2313 и ORANGE4
  • Прошивка ATTINY 2313 программатором USBASP








  • Информация по ремонту для специалистов - справочники, инструкции, энциклопедия, советы и секреты ремонта,  настройка, сервисные режимы
    Powered by phpBB 2.0.18 © 2001, 2002 phpBB Group!