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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Ищу третий месяц объяснение этих 4 строчек., таймер1 (режим 8)
ветерок
сообщение Jun 3 2017, 17:21
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 29-11-06
Из: Ижевск
Пользователь №: 22 902



Этот код реализует меандр длительностью "1" и "0" 170 и 100 микросекунд (примерно)
Код
// Настройка ТАЙМЕРА1
TCCR1A=(1<<COM1A1)|(1<<COM1A0);// порт PB1 как инвертированый выход таймера
TCCR1B=(1<<WGM13)|(1<<CS12)|(1<<CS10); // режим 8 ,таймера, частота клока: Fclk/256=62500 Гц (1 тик таймера=0.9536 мкс (62500\65536) )
  uint16_t x = 170; // длительность '1' (единички или иначе импульса) в микросекундах
uint16_t y = 100;   // Длительность '0'(ноля или паузы) в микросекундах
  ICR1= (uint32_t) (x+y) /128;
  OCR1A= (uint32_t) y /128;


но в даташитах ниводном не нашёл такой режим работы
И кусок текста или таблицу в которой бы указывалось что используется оба регистра OCR1A и ICR1 в работе!
в таблице есть ICR
а на диаграмме OCR

А это...
Код
ICR1= (uint32_t) (x+y) /128;
  OCR1A= (uint32_t) y /128;

вообще магия

Может кто ткнёт пальцем.
хочу понять где это описано и как это работает.



Сообщение отредактировал ветерок - Jun 3 2017, 17:23


--------------------
Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 3 2017, 17:49
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Прикрепленное изображение


а ещё больше картинки слабо сделать?
Go to the top of the page
 
+Quote Post
ветерок
сообщение Jun 3 2017, 18:05
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 29-11-06
Из: Ижевск
Пользователь №: 22 902



Допустим...
А где это написано ?


--------------------
Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 3 2017, 18:23
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



таблица 16-4, столбец TOP
Go to the top of the page
 
+Quote Post
Den64
сообщение Jun 3 2017, 18:26
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Адекватно тему создать можно было? (я б так вопросы задавал, мне б не отвечали)
Всё примитивно. ICR1 задаёт период следования импульсов, а OCR1A задаёт скважность (точнее длительность импульса). В даташите всё есть, трудно не заметить.
Go to the top of the page
 
+Quote Post
ветерок
сообщение Jun 4 2017, 02:56
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 29-11-06
Из: Ижевск
Пользователь №: 22 902



В каком месте даташита, можно ткнуть пальцем где явно описан этот примитив ?
Например конкретно это :" ICR1 задаёт период следования импульсов"
а OCR1A (или ICR1, если режим 9) задаёт скважность (точнее длительность импульса)" это вроде как-то понятно
мне не понятно где написано переключение сравнения с OCR1A на ICR1 и обратно.

Я бы понял если бы было написано типа
после совпадения счёта с регистром OCR, происходит изменение значения на выходе счётчик считает дальше до совпадения с содержимым в регистре ICR

Но это не написано!
Написана билиберда! Это реально так.

_pv
вот где ты там это увидел,там только изображено то что написано в тексте,таймер использует для своей работы такие -то регистры ну и спользует,это я вижу и понимаю
у меня другой вопрос был
где описаны моменты перехода с одного на другой.

Я конечно в меру тупой но всё таки очень хотелось бы понять,спасибо за отзывчивость sm.gif

Сообщение отредактировал ветерок - Jun 4 2017, 03:36


--------------------
Go to the top of the page
 
+Quote Post
Harvester
сообщение Jun 4 2017, 06:22
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(ветерок @ Jun 4 2017, 05:56) *
В каком месте даташита, можно ткнуть пальцем где явно описан этот примитив ?
Например конкретно это :" ICR1 задаёт период следования импульсов"
а OCR1A (или ICR1, если режим 9) задаёт скважность (точнее длительность импульса)" это вроде как-то понятно
мне не понятно где написано переключение сравнения с OCR1A на ICR1 и обратно.

п. 16.9.5 стр. 127:
Цитата
The counter counts repeatedly from BOTTOM (0x0000) to TOP and then from TOP to BOTTOM. In
non-inverting Compare Output mode, the Output Compare (OC1x) is cleared on the compare match between
TCNT1 and OCR1x while upcounting, and set on the compare match while downcounting.
...
The PWM resolution for the phase and frequency correct PWM mode can be defined by either ICR1 or OCR1A.
...
In phase and frequency correct PWM mode the counter is incremented until the counter value matches either
the value in ICR1 (WGM13:0 = 8), or the value in OCR1A (WGM13:0 = 9).

В переводе на русский:
При WGM13:0 = 8 счетчик считает от BOTTOM (0x0000) до TOP (ICR1) и обратно до BOTTOM.
В неинвертированном режиме в момент совпадения значения счетчика с OCR1 выход OC1x сбрасывается (при прямом счете) и устанавливается (при обратном счете).
В Вашем случае (инвертированный режим) - наоборот.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
ветерок
сообщение Jun 4 2017, 09:40
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 29-11-06
Из: Ижевск
Пользователь №: 22 902



совершенно верно

"При WGM13:0 = 8 счетчик считает от BOTTOM (0x0000) до TOP (ICR1) и обратно до BOTTOM." где здесь хоть слово о OCR1 ?

"В неинвертированном режиме в момент совпадения значения счетчика с OCR1... " а здесь где упоминание про ICR1 ?

Я то как раз не спорю что они по отдельности задействовани в каждом из режимов,а где написано что в раз ну или по очереди?


Сообщение отредактировал ветерок - Jun 4 2017, 09:46


--------------------
Go to the top of the page
 
+Quote Post
Den64
сообщение Jun 4 2017, 09:46
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Цитата(ветерок @ Jun 4 2017, 12:40) *
тут как раз написано что этот режим использует либо только ICR1 8 режим , либо только OCR1A в режиме 9

В режиме 9 OCR1A используется как регистр задающий TOP для таймера. В остальных режимах он работает как бы независимо, если выражаться простым языком.
Вы в переводе либо даташит читаете? На английском там всё чётко расписано.
Go to the top of the page
 
+Quote Post
ветерок
сообщение Jun 4 2017, 09:48
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 29-11-06
Из: Ижевск
Пользователь №: 22 902



оригинал читаю и перевод смотрел
ну его смысла нет смотреть перевод-то,тоже самое написано.
авторы так и пишут,как ты
OCR1 пишут ,а ICR1 в уме,как бы ))) или наоборот
Чё тут не понятного, всёж ясно, я телепат.
у них мода видимо раньше началась на фразу нынче модную "как-то так.."
ну как-то так у нас работает процессор,мдас.
))

Я похоже тупее чем о себе думал sm.gif

Сообщение отредактировал ветерок - Jun 4 2017, 09:56


--------------------
Go to the top of the page
 
+Quote Post
Den64
сообщение Jun 4 2017, 11:56
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 584
Регистрация: 22-11-07
Из: Курская область
Пользователь №: 32 571



Цитата(ветерок @ Jun 4 2017, 12:48) *
OCR1 пишут ,а ICR1 в уме,как бы ))) или наоборот
Чё тут не понятного, всёж ясно, я телепат.

Цитата
The 16-bit comparator continuously compares TCNT1 with the Output Compare Register (OCR1x). If TCNT
equals OCR1x the comparator signals a match. ...
The Waveform Generator uses the match
signal to generate an output according to operating mode set by the Waveform Generation mode (WGM13:0)
bits and Compare Output mode (COM1x1:0) bits.

Блоки сравнения работают всегда если работает соответствующий ему таймер. Так и указано в доках.
А ICR это регистр захвата, в указанном режиме он работает как ограничение счёта (или по науке модуль счёта).
Всё чётко прописано. Нужно только читать, а не телепатить.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Jun 5 2017, 13:21
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(ветерок @ Jun 3 2017, 20:21) *
но в даташитах ниводном не нашёл такой режим работы
И кусок текста или таблицу в которой бы указывалось что используется оба регистра OCR1A и ICR1 в работе!

Посмотрите даташиты на 128-ю мегу. Там уже появилось описание "Phase and Frequency Correct PWM Mode" с соответствующей диаграммой.
Go to the top of the page
 
+Quote Post
Эдди
сообщение Jun 5 2017, 14:52
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Ты-то сам эту белиберду читал?
Код
  uint16_t x = 170; // длительность '1' (единички или иначе импульса) в микросекундах
  uint16_t y = 100;   // Длительность '0'(ноля или паузы) в микросекундах
  ICR1= (uint32_t) (x+y) /128;
  OCR1A= (uint32_t) y /128;

В ICR1 будет 2, в OCR1A - нуль.
И непонятно, зачем что-то в ICR1 писать, который автоматом заполняется значением счетчика при наступлении внешнего события.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 5 2017, 20:24
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Эдди @ Jun 5 2017, 17:52) *
И непонятно, зачем что-то в ICR1 писать, который автоматом заполняется значением счетчика при наступлении внешнего события.
"Мартышка и очки":
QUOTE
К несчастью, то ж бывает у людей:
Как ни полезна вещь, — цены не зная ей,
Невежда про нее свой толк все к худу клонит;
А ежели невежда познатней,
Так он ее еще и гонит.
Читайте доки, в них есть ответ на ваш вопрос.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
akl
сообщение Jun 6 2017, 03:44
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 4-04-07
Из: Ижевск
Пользователь №: 26 773



Цитата(Эдди @ Jun 5 2017, 18:52) *
И непонятно, зачем что-то в ICR1 писать, который автоматом заполняется значением счетчика при наступлении внешнего события.
В этом режиме ICR1 используется в качестве регистра сравнения и автоматом в него извне ничего не заносится.
Код
;Проверка режима 8 таймера1
    .INCLUDE "tn2313def.inc"

.equ    Fo=20000000

    .CSEG

.org    0x00
RESET:
    SBI    ACSR,ACD; Запрет работы компаратора

    LDI    R22,$FF    ; Установка портов
    OUT    DDRD,R22
    OUT    DDRB,R22
    OUT    DDRA,R22
;************************************************
    LDI    XH,HIGH(100*Fo/1000000/2-1)
    LDI    XL,LOW(100*Fo/1000000/2-1)
    OUT    OCR1AH,XH
    OUT    OCR1AL,XL

    LDI    XH,HIGH((170+100)*Fo/1000000/2-1)
    LDI    XL,LOW((170+100)*Fo/1000000/2-1)
    OUT    ICR1H,XH
    OUT    ICR1L,XL

    LDI    R22,1<<SE
    OUT    MCUCR,R22

    LDI    R22,1<<COM1A1|1<<COM1A0
    OUT    TCCR1A,R22

    LDI    R22,1<<WGM13|1<<CS10
    OUT    TCCR1B,R22    ;T1 режим 8

;WAIT:
    SLEEP
    RJMP    RESET
;************************************************
.EXIT
Этот код дает на выходе PB3/OC1A (на макете стоит ATtiny2313, кварц 20МГц) довольно строгие 100мкс - 0 и 170мкс - 1
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 15th June 2025 - 23:55
Рейтинг@Mail.ru


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