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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Tiny2313 нужна 1 сек. на таймер 0, "Уходит" время :(
AndryG
сообщение Jul 8 2007, 19:46
Сообщение #1


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Доброго времени суток.

Контроллер - Tiny2313
Частота - 8МГц
Компилятор - CVAVR 1.25.2b1

Одна из функций устройства - подсчет текущего времени.
Используется таймер 0 (второй уже недоступен).
Прерывание по совпадению и автоматическая очистка счетчика при условии сравнения.
С предделителем 256 получаю частоту прерыания ровно 125Гц (64000 тактов)
И в прерывании делитель ставлю на 125.

Вроде всё верно, но за 8,5 часов часики удрали на 4 секунды sad.gif
Устройство активно работает с внутренней EEPROM.

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

_____
P.S.
Запскал HEX в Студии ... ставлю точку останова на вектор прерывания ...
прерывание вызывается каждые 64000 такта ... почти всегда, иногда выскакивает 64001 или
64002 - видать из-за длительных команд ... но потом всё выравнимается.
Правда симуляцию я запускал максимум на секунду - на моем компе на это около 30 минут :-)
А может это такая точность кварца? Слабо верится. Да! фузы верно настроены - проверял уже.
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Jul 8 2007, 20:09
Сообщение #2


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

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



Цитата(AndryG @ Jul 9 2007, 01:46) *



Режим работы таймера "Сброс по совпадению" использует значение, которое записано в регистре захвата или в регистре сравнения. Уточните значение этого регистра.
Далее, непонятно значение фразы "...делитель ставлю на 125". Делителя на 125 вообще нет. Есть на 8, 32, 64, .. и т.д.

Отвечу на вопрос о сбивании таймера - если таймер не останавливать, то значение счета в нем не сбивается. Запрет/разрешение прерываний здесь не влияет.

Кварц какой используете - внутренний или внешний?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 8 2007, 21:18
Сообщение #3


кекс
******

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



Цитата(AndreyKeil @ Jul 8 2007, 23:09) *
Кварц какой используете - внутренний или внешний?

Кварц разве внутренний бывает?

Цитата(AndryG @ Jul 8 2007, 22:46) *
Контроллер - Tiny2313
Частота - 8МГц

Одна из функций устройства - подсчет текущего времени.

Вроде всё верно, но за 8,5 часов часики удрали на 4 секунды sad.gif

А может это такая точность кварца? Слабо верится. Да! фузы верно настроены - проверял уже.

Это такая точность кварца. Часовые кварцы иногда уходят также, а то и больше, а у вас обычный...

8.5 часов = 3600s * 8.5 = 30600 sec

погрешность счета
4/30600 = 0.00013

если кварц у вас маркирован как 8.000Mhz - то погрешность в пределах нормы.

Цитата
- кто что может посоветовать?

На мой взгляд проще всего сделать программную коррекцию часов. Тобиш, если 4 секунды теряется за ~8 часов, вы можете каждые два часа подводить часы на 1 секунду в сторону противоположную уходу времени.

Цитата
Устройство активно работает с внутренней EEPROM.
Вот тут и начинаются вопросы ...
- если прерывание таймера возникает при их глобальном запрещении, или выполнении "длинных" команд,
то прерывание вызовется с задержкой ... сбивается ли при этом счетчик циклов в таймере?

задержка обработки прерывания не важна, важно - не пропустить прерывание.

Если у вас в системе прерывания запрещаются на время большее чем интервал между прерываниями от T0 (1/125 sec) - то тогда счетчик циклов будет сбиваться (опаздывать), т.к. некоторые прерывания будут пропущены. Если у вас прерывания запрещаются ненадолго (много меньше чем 1/125 сек), то тогда можете быть спокойны - программных сбоев быть не должно.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 8 2007, 22:12
Сообщение #4


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(defunct @ Jul 9 2007, 01:18) *
Это такая точность кварца. Часовые кварцы иногда уходят также, а то и больше, а у вас обычный...
Часовой это который 32768 ?
А откуда такая информация что у них точность выраженная в ppm лучше чем у обычных ?
Цитата
8.5 часов = 3600s * 8.5 = 30600 sec
погрешность счета
4/30600 = 0.00013

130ppm многовато для обычного "кварца", должно быть не больше 30ppm.
Может быть конденсаторы на землю неправильные ?
Или кварц не расчитан например на 3V а только на 5.
Ну или у Вас там не кварц вобще... (иногда в малогабаритных девайсах используют
другие материалы с худшей точностью)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 8 2007, 22:18
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Тоже думаю, что виновата не программа, а точность кварца. Я бы попробовал исправить положение конденсаторами на кварце. Увеличить или уменьшить, один или оба.

Была у меня ситуация, тока с часовым кварцем. Убегал на несколько секунд в день. Около него стояли кондёры где-то на 12 или 15 пф. После перепайки обоих на 22 пф разбег уменьшился раз в десять.

Цитата(singlskv)
А откуда такая информация что у них точность выраженная в ppm лучше чем у обычных ?
Причём тут ppm? Речь о начальной точности кварца.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 8 2007, 22:27
Сообщение #6


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(GetSmart @ Jul 9 2007, 02:18) *
Причём тут ppm? Речь о начальной точности кварца.

Начальная тоже в ppm указывается (допустимый разброс).
И насколько я ничего не знаю, у часовых кварцев при прочих равных
этот параметр хуже чем у "обычных"...
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 9 2007, 00:09
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Мдя... И никто не сказал, что уход то из-за того, что делитель надо ставить не на 125, а на 124 - нулевой импульс тоже надо учитывать, так счетчик досчитывает до 125, включая 125-ый такт, в итоге - 126 реально посчитанных тактов и уход частотыsmile.gif


--------------------
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 9 2007, 00:39
Сообщение #8


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(prottoss @ Jul 9 2007, 04:09) *
Мдя... И никто не сказал, что уход то из-за того, что делитель надо ставить не на 125, а на 124 - нулевой импульс тоже надо учитывать, так счетчик досчитывает до 125, включая 125-ый такт, в итоге - 126 реально посчитанных тактов и уход частотыsmile.gif

Ну кода то мы не видели, но ИМХО дело не в 124-125, иначе после такого изменения
ошибка будет ~1/125=0,008 - а это ну очень много...
Go to the top of the page
 
+Quote Post
ae_
сообщение Jul 9 2007, 00:47
Сообщение #9


Участник
***

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



Цитата(prottoss @ Jul 9 2007, 09:09) *
Мдя... И никто не сказал, что уход то из-за того, что делитель надо ставить не на 125, а на 124 - нулевой импульс тоже надо учитывать, так счетчик досчитывает до 125, включая 125-ый такт, в итоге - 126 реально посчитанных тактов и уход частотыsmile.gif

Начал отвечать про 124-125, но singlskv опередил smile.gif
Да и автор вопроса сообщил, что прогонял на симуляторе - всё нормально, 64000 тактов.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 9 2007, 10:42
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(ae_ @ Jul 9 2007, 08:47) *
Начал отвечать про 124-125, но singlskv опередил smile.gif
Да и автор вопроса сообщил, что прогонял на симуляторе - всё нормально, 64000 тактов.
тада точно кварц... наверное... a14.gif


--------------------
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jul 10 2007, 05:28
Сообщение #11


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Спасибо всем за ответы. Вчера весь день был на объекте - не смог поучаствовать ...

"Делитель на 125" ... это я про такой код:
Код
interrupt [TIM0_OVF] void timer0_ovf_isr(void){ //вызывается 125 Гц
if (times < 125)
  goto tim0_ovf_ret;
times = 0x00;  
realtime.s++;
...


Вот сам теперь сижу и думаю, а правильно ли тут 125 стоит ... хотя тоже считал .. ошибка должна быть больше тогда... (хотя может наложилось это и кварц)
И по Студии я не проверял работу делителя - точку останова ставил на прерывание, а не на строку после "делителя на 125" - у меня комп секунду эту гонять сутки будет.

Кварц маркирован .... 8 000 кГц -- сам не помню откуда он.

На счет конденсаторов идею подали -- поколупаю .. вот только бы знать в какую сторону ... может ссылка у кого есть?

И опять я уезжаю на весь день -- завтра обязательно подключусь.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 09:59
Сообщение #12


кекс
******

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



Цитата(AndryG @ Jul 10 2007, 08:28) *
Вот сам теперь сижу и думаю, а правильно ли тут 125 стоит ... хотя тоже считал .. ошибка должна быть больше тогда...

Посмотрите в даташите как работает CTC. В некоторых процах (например AT90S2313) таймер при достижении установленного числа сбрасывает и предделитель (т.о. 1 такт выпадет).

Хотя маловероятно, в t2313 это должно было быть пофикшено, да и ошибка была бы меньше - 3*10(-5).

Цитата
Кварц маркирован .... 8 000 кГц

с такой маркировкой частота стабилизации кварца может быть в пределах

от
8, 000.000 Mhz
до
8, 000.999 Mhz

Стабильность частоты как отмечали выше - 30 ppm
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 10:27
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(AndryG @ Jul 10 2007, 13:28) *
Спасибо всем за ответы. Вчера весь день был на объекте - не смог поучаствовать ...

"Делитель на 125" ... это я про такой код:
Код
interrupt [TIM0_OVF] void timer0_ovf_isr(void){ //вызывается 125 Гц
if (times < 125)
  goto tim0_ovf_ret;
times = 0x00;  
realtime.s++;
...
Че то я совсем запутался 07.gif Как из 8.000.000 Гц получить 125 Гц штатным прескалером счетчика ТС0 ??? Если учесть, что в первом посте чел поставил прескалер на 256, то имеем частоту входных импульсов ТС0 - 31.250 Гц. Далее, раз выбрано прерывание по переполнению и Output Compare Unit c OCR0A не задействован, следовательно прерывание вызывается с частотой 31250/256 = 122,0307 Гц 07.gif (Здесь бы я поставил смайлик с пистолетом у виска)


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 10:44
Сообщение #14


кекс
******

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



Цитата(prottoss @ Jul 10 2007, 13:27) *
Как из 8.000.000 Гц получить 125 Гц штатным прескалером счетчика ТС0 ???

OCR0 = 250
предделитель 256
имеем 8000000 / (250 * 256 ) = 125
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 10:49
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Jul 10 2007, 18:44) *
OCR0 = 250
предделитель 256
имеем 8000000 / (250 * 256 ) = 125
Но у парня прерывание не по совпадению с OCR0, а ПО ПЕРЕПОЛНЕНИЮ.

Цитата(AndryG @ Jul 10 2007, 13:28) *
Код
interrupt [TIM0_OVF] void timer0_ovf_isr(void){ //вызывается 125 Гц
if (times < 125)
  goto tim0_ovf_ret;
times = 0x00;  
realtime.s++;
...


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2007, 11:21
Сообщение #16


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 10 2007, 09:27) *
Че то я совсем запутался 07.gif Как из 8.000.000 Гц получить 125 Гц штатным прескалером счетчика ТС0 ??? Если учесть, что в первом посте чел поставил прескалер на 256, то имеем частоту входных импульсов ТС0 - 31.250 Гц. Далее, раз выбрано прерывание по переполнению и Output Compare Unit c OCR0A не задействован, следовательно прерывание вызывается с частотой 31250/256 = 122,0307 Гц 07.gif (Здесь бы я поставил смайлик с пистолетом у виска)

Вы сами себя запутали. Чел пишет, что выбрано "прерывание по совпадению и автоматическая очистка счетчика при условии сравнения. С предделителем 256 получаю частоту прерывания ровно 125 Гц (64000 тактов). И в прерывании делитель ставлю на 125"

Чтобы получить 125 Гц ему надо поставить счётчик на 31250/125=250. А вот дальше начинаются непонятки. Из приведенного фрагмента видно, где сбрасывается переменная times, но не видно, где она инкрементируется. То есть непонятно, на сколько делится 125-ти герцовое прерывание - на 125 или 126, чтобы инкрементировать секундный счетчик. На мой взгляд, данная неточность вкупе с неточностью кварца даёт искомую ошибку.

И не надо так шутить "с пистолетом у виска", вы ещё не на все вопросы по программатору ответили(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 11:31
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 10 2007, 19:21) *
Вы сами себя запутали.
Я сам себя не путал. biggrin.gif Чел пишет, что
Цитата
...прерывание по совпадению и автоматическая очистка...
Это наводит на мысли об использовании Output Compare Unit и OCR0B регистре. Следующим постом демонстрируется код, в котором используется прерывание, повторюсь еще раз ПО ПЕРЕПОЛНЕНИЮ счетчика ТС0. В теле прерывания видна переменная time, которая неизвестно где инкрементируется, но проверяется, и "автоматически" обнуляется smile.gif Так что я не запутался, просто Вы, уважаемый, посты через строчку читаете



Цитата(=GM= @ Jul 10 2007, 19:21) *
И не надо так шутить "с пистолетом у виска", вы ещё не на все вопросы по программатору ответили(:-).
По программатору предлагаю ехидничать в соответсвующей ветке, дабы не засорять топик smile.gif


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2007, 12:07
Сообщение #18


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 10 2007, 10:31) *
...Следующим постом демонстрируется код, в котором используется прерывание, повторюсь еще раз ПО ПЕРЕПОЛНЕНИЮ счетчика ТС0

Вы хотите сказать, что при использовании Output Compare Unit не возникает флага переполнения?
Цитата(prottoss @ Jul 10 2007, 10:31) *
Так что я не запутался, просто Вы, уважаемый, посты через строчку читаете

Ну положим, уважаемый, вы сами сказали, что запутались, я вас за язык не тянул(:-). А посты я читаю как надо, не волнуйтесь за меня.
Цитата(prottoss @ Jul 10 2007, 10:31) *
По программатору предлагаю ехидничать в соответствующей ветке, дабы не засорять топик smile.gif

И не думал ехидничать, прошу прощения, если обидел. Хотел просто обратить внимание, что не следует шутить на тему смерти.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 12:29
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 10 2007, 20:07) *
Вы хотите сказать, что при использовании Output Compare Unit не возникает флага переполнения?
Я хочу сказать, что человек не использует Output Compare Unit, а использует переполнение счетчика ТС0, неужели это не понятно??? Таким образом у него получается частота 8.000.000 / 256 (прескалер) / 256 (переполняемый ТС0) = 122, .... Гц. Я сделал такой вывод, потому что человек привел код с прерыванием по переполнению.



А если бы он использовал OCR0A = 250 и использовал прерывание по совпадению, то у него бы получилось 8.000.000 / 256 (прескалер) / 250 (ТС0 == OCR0A?) = 125 Гц. Вот тут, пожалуйста, инкрементируй переменную time и проверяй ее на меньше 125



Точнее OCR0A = 249 smile.gif


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2007, 12:40
Сообщение #20


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 10 2007, 11:29) *
Я хочу сказать, что человек не использует Output Compare Unit, а использует переполнение счетчика ТС0, неужели это не понятно???

Да откуда вы взяли, что он не использует Output Compare Unit? При его использовании установка флага переполнения счетчика ТС0 (и соответственно, возникновение прерывания по переполнению) возможна, например, когда биты WGM=001 или 101 (см. с. 79 документа 2543i).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 12:54
Сообщение #21


кекс
******

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



Цитата
Но у парня прерывание не по совпадению с OCR0, а ПО ПЕРЕПОЛНЕНИЮ.

Флаг TOVF устанавливается при достижении максимального значения в режиме CTC
Смотреть даташит таблица 40

Код
Mode    TOP       Update      TOVF
CTC   OCR0A   Immediate   MAX



Цитата
А если бы он использовал OCR0A = 250 и использовал прерывание по совпадению, то у него бы получилось 8.000.000 / 256 (прескалер) / 250 (ТС0 == OCR0A?) = 125 Гц.


Можно использовать любое прерывание из OCA / TOVF - результат будет одинаковым в режиме CTC.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 13:14
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 10 2007, 20:40) *
Да откуда вы взяли, что он не использует Output Compare Unit? При его использовании установка флага переполнения счетчика ТС0 (и соответственно, возникновение прерывания по переполнению) возможна, например, когда биты WGM=001 или 101 (см. с. 79 документа 2543i).
Ну про такие извраты (извиняюсь) для получения одной секунды я вообще не думал. То что Вы привели относится к Fase Correct PWM mode - флаг переполнения возникает каждые 512 входных импульсов - интересно было бы увидеть Ваши мысли по тому, как парень в таком режиме счетчика считает 1 Гц...

Цитата(defunct @ Jul 10 2007, 20:54) *
Флаг TOVF устанавливается при достижении максимального значения в режиме CTC
Я не говорил, что флаг TOVF не установится вообще в режиме СТС, но это возможно если OCR1A = 0xFF.

Тогда не будет нужных 125 Гц, В режиме PWM Fase correct, так как период переполнений равен 512-и входным импульсам (256 - ++ и 256 --) тоже нет возможности получить 125 Гц. По этому я эти режимы и возможности не привел - для меня это было очевидно. smile.gif

ИМХО парень просто ошибся в расчетах. Будем ждать, что он скажет...


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 13:19
Сообщение #23


кекс
******

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



Цитата(prottoss @ Jul 10 2007, 16:14) *
Я не говорил, что флаг TOVF не установится вообще в режиме СТС, но это возможно если OCR1A = 0xFF.

Это происходит при любом значении OCR0A.
В CTC режиме TOVF устанавливается при TCNT == OCR0A
Посмотрите же даташит на t2313 наконец.
В CTC режиме события OCA и OVF происходят синхронно. Можете и на эмуляторе проверить заодно.

Цитата
ИМХО парень просто ошибся в расчетах. Будем ждать, что он скажет...

всяко может быть.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 13:31
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Jul 10 2007, 21:19) *
Это происходит при любом значении OCR0A.
В CTC режиме TOVF устанавливается при TCNT == OCR0A
Посмотрите же даташит на t2313 наконец.
В CTC режиме события OCA и OVF происходят синхронно. Можете и на эмуляторе проверить заодно.
Да ни в жисть не поверю пока носом не ткнете - еще раз утверждаю флаг TOVF = 1, только если ТС0 = 0xFF!!!


--------------------
Go to the top of the page
 
+Quote Post
Elegorod
сообщение Jul 10 2007, 14:17
Сообщение #25


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 2-02-07
Пользователь №: 24 993



Цитата
Посмотрите же даташит на t2313 наконец.

Всем еще раз нужно заглянуть в datasheet на ATtiny2313.
На рисунке "Figure 31. CTC Mode, Timing Diagram" видно, когда "OCnx Interrupt Flag Set." Надписи "TOVn Interrupt Flag Set" вообще нет, так как прерывание по переполнению никогда не срабатывает.
В конце секции читаем:
Цитата
As for the Normal mode of operation, the TOV0 Flag is set in the same timer clock cycle that the counter counts from MAX to 0x00.

MAX = 255
Если OCR0A < 255, счетчик никогда не досчитывает до 255.

Непонятно, каким образом прерывание вообще вызывается. Может, компилятор оптимизирует
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 14:20
Сообщение #26


кекс
******

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



Цитата(prottoss @ Jul 10 2007, 16:31) *
Да ни в жисть не поверю пока носом не ткнете - еще раз утверждаю флаг TOVF = 1, только если ТС0 = 0xFF!!!

В прикрепленном архиве проект avr-studio для эмуляции поведения TOVF.
Загрузите test.aps в Avr-Studio, в открышемся ASM файле должны быть расставлены точки останова на строки

rjmp TIM0_OVF ; Timer0 Overflow Handler
и
rjmp TIM0_COMPA ; Timer0 Compare A Handler

если точки останова почему-то потерялись - поставьте их вручную.

Откомпилируйте проект и запустите. Сработает первая точка останова (на строке COMPA), после этого идите по шагам, и внимательно проследите за TOVF таймера 0. Если облом следить - то просто запустите тест дальше - и вы попадете во вторую точку останова - прерывание по OVF.

В тесте установлен режим CTC, OCR0A установлен в 250.
TOVF устанавливается в 1 непосредственно в момент сброса TCNT в 0. (иначе и быть не может, т.к. раз сбросился - значит переполнился)
Прикрепленные файлы
Прикрепленный файл  Test.zip ( 1.87 килобайт ) Кол-во скачиваний: 29
 
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 14:22
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Elegorod @ Jul 10 2007, 22:17) *
Всем еще раз нужно заглянуть в datasheet на ATtiny2313.
На рисунке "Figure 31. CTC Mode, Timing Diagram" видно, когда "OCnx Interrupt Flag Set." Надписи "TOVn Interrupt Flag Set" вообще нет, так как прерывание по переполнению никогда не срабатывает.
В конце секции читаем:

MAX = 255
Если OCR0A < 255, счетчик никогда не досчитывает до 255.
Вот вот, и я о том же. В PWM mode, такое будет, так как счетик в любом случае достигнет MAX, то бишь 0xFF (как и указано в даташите). В СТС режиме только если OCR0A = 0xFF.


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 14:28
Сообщение #28


кекс
******

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



Цитата(Elegorod @ Jul 10 2007, 17:17) *
В конце секции читаем:

MAX = 255

Это опечатка в даташите. Там должно быть:

TOP = 255
BOTTOM = 0
MAX = максимально достижимое значение определяемое OCR0A
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 14:33
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Jul 10 2007, 22:28) *
Это опечатка в даташите. Там должно быть:

TOP = 255
BOTTOM = 0
MAX = максимально достижимое значение определяемое OCR0A
Oxo smile.gif Это кто кроме Вас сказал? Во всех даташитах чтоль???


--------------------
Go to the top of the page
 
+Quote Post
Elegorod
сообщение Jul 10 2007, 14:34
Сообщение #30


Участник
*

Группа: Новичок
Сообщений: 17
Регистрация: 2-02-07
Пользователь №: 24 993



Тогда и в тексте описания ошибки, и во всем разделе "Таймеры" десятки ошибок. В ATmega8 datasheet все написано точно также.
Не может такого быть. MAX=255, TOP = OCR0A
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 14:38
Сообщение #31


кекс
******

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



Цитата(prottoss @ Jul 10 2007, 17:33) *
Oxo smile.gif Это кто кроме Вас сказал? Во всех даташитах чтоль???

Вы уже посмотрели прикрепленный тест?
В железе он ведет себя точно также как в симуляторе.
Go to the top of the page
 
+Quote Post
kada
сообщение Jul 10 2007, 14:39
Сообщение #32


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

Группа: Свой
Сообщений: 106
Регистрация: 23-05-05
Из: Ташкент
Пользователь №: 5 324



Вполне возможно, что дело в кварце.
Столкнулись с этим однажды. В итоге поставили микросхему часов реального времени со встроенным кварцем.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2007, 14:55
Сообщение #33


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 10 2007, 12:14) *
Ну про такие извраты (извиняюсь) для получения одной секунды я вообще не думал. То что Вы привели относится к Phase Correct PWM mode - флаг переполнения возникает каждые 512 входных импульсов - интересно было бы увидеть Ваши мысли по тому, как парень в таком режиме счетчика считает 1 Гц...

Лехко. Ставите прескалер на 256, WGM=5 и OCR0A=125, тогда каждые 250 импульсов входной частоты будет возникать прерывание TOV0. Ну и поскольку входная частота для этого режима равна 8000/256=31.25 кГц, то прерывания по переполнению таймера0 будут возникать каждые 125 Гц, никаких чудес.

Такая мысль возникла. Если частота кварца у чела равна 7999 кГц вместо 8000, то за 8.5 часов набежит ошибка (1-256*250*125/7999000)*30600=4 секунды. Вот так, так что зря мы тут копья ломаем(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 15:05
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(defunct @ Jul 10 2007, 22:20) *
В тесте установлен режим CTC, OCR0A установлен в 250.
TOVF устанавливается в 1 непосредственно в момент сброса TCNT в 0. (иначе и быть не может, т.к. раз сбросился - значит переполнился)
07.gif Извините, милейший, но я в Вашем проекте ни слова, пардон, ни кода про СТС... Ерунда какая то - загрузили OCR1A значением - понятно, дальше в TCCR0B кинули (1 << WGM02)|1 - ???????? Вы сами даташит хоть одним глазом смотрели????????? lol.gif

Для СТС надо чтоб WGM01 = 1, WGM00 == 0 (это вообще в TCCR0А находится) WGM02 = 0 (А вот это находится в TCCR0B ) тогда все работает как надо.



А у Вас, как у того парня, счетчик досчитывает до OCR0A, генерит прерывание, едет дальше, переполняется, генерит переполнение, ну и так далее biggrin.gif



Вот Вам НАСТОЯЩИЙ ЦТС biggrin.gif biggrin.gif biggrin.gif



Цитата(=GM= @ Jul 10 2007, 22:55) *
Лехко. Ставите прескалер на 256, WGM=5 и OCR0A=125, тогда каждые 250 импульсов входной частоты будет возникать прерывание TOV0. Ну и поскольку входная частота для этого режима равна 8000/256=31.25 кГц, то прерывания по переполнению таймера0 будут возникать каждые 125 Гц, никаких чудес.
ДА УЖЖЖЖЖ..... Вы читали про WGM=5, то бишь PWM fase correct Mode? За 512 тактов счетчика у Вас будет ровно ДВА прерывания от OCR0A - разделите 512 на 2 и получите коэффициент деления счетчика 256... ГДЕ ТУТ ДЕЛЕНИЕ НА СТО ДВАДЦАТЬ ПЯТЬ??????????????

Дорогой мой друг, в PWM fase correct ТС не сбрасывается по совпадению с OCR, просто фаза выходного сигнала меняется smile.gif
Прикрепленные файлы
Прикрепленный файл  Test.rar ( 839 байт ) Кол-во скачиваний: 33
 


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2007, 15:10
Сообщение #35


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 10 2007, 12:14) *
Ну про такие извраты (извиняюсь) для получения одной секунды я вообще не думал

Про извраты. Вот когда в Phase Correct PWM mode по каждому прерыванию TOV0 будете писать число 6 в таймер0, а потом в регистр OCR0A - число 5, вот тогда будет изврат с большой буквы. И вы будете смеяться, но работать-таки будет...


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 15:15
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 10 2007, 23:10) *
Про извраты. Вот когда в Phase Correct PWM mode по каждому прерыванию TOV0 будете писать число 6 в таймер0, а потом в регистр OCR0A - число 5, вот тогда будет изврат с большой буквы. И вы будете смеяться, но работать-таки будет...
Нуну, Вы еще не рассказали про цикл с NOP для получения ровно одной секунды


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 16:09
Сообщение #37


кекс
******

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



Цитата(prottoss @ Jul 10 2007, 18:05) *
07.gif Извините, милейший, но я в Вашем проекте ни слова, пардон, ни кода про СТС... Ерунда какая то - загрузили OCR1A значением - понятно, дальше в TCCR0B кинули (1 << WGM02)|1 - ???????? Вы сами даташит хоть одним глазом смотрели????????? lol.gif

Да... уж.. действительно lol.gif
Ок, это я переел или недоспал ...

Остается только сказать - nice catch smile.gif

Гм.. похоже вы нашли очень вероятную причину глюка - ошибка-то примерно совпадает с изначально зарепорченной 6/ (256 * 256) = 0.000091.

Цитата
TCCR0B кинули (1 << WGM02)|1

это не по злому умыслу было, просто въелось что CTC - 3й бит TCCRxB как во многих других девайсах.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2007, 16:13
Сообщение #38


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 10 2007, 14:05) *
ДА УЖЖЖЖЖ..... Вы читали про WGM=5, то бишь PWM fase correct Mode? За 512 тактов счетчика у Вас будет ровно ДВА прерывания от OCR0A - разделите 512 на 2 и получите коэффициент деления счетчика 256...

А як жеж, читал два раза(:-)! Вам бы тоже не мешало, заодно и слово Fase подправили бы.

Я ж вам объясняю...популярно..., как работает Phase Correct PWM mode при WGM=5. Счётчик считает от BOTTOM=0 до TOP=OCR0A, потом направление счёта аппаратно меняется и он считает от TOP=OCR0A до BOTTOM=0, направление счёта опять меняется (взято прямо из описания doc2543i, с.73). При достижении BOTTOM=0 устанавливается флаг переполнения TOV0 и возникает ОДНО прерывание по переполнению таймера0.

При WGM=1 устройство работает точно так же, только TOP=0xFF. Действительно, в таком режиме будет деление на 256+256=512. Вы различие двух режимов WGM=1 и WGM=5 понимаете?

Я-то вам толкую про режим WGM=5 и TOP=125 (число, записанное в OCR0A). В этом случае TOV0 будет появляться каждые 125+125=250 импульсов входной частоты 31,25 кГц, т.е. TOV0 будет возникать с частотой 125 Гц.

Цитата(prottoss @ Jul 10 2007, 14:05) *
ГДЕ ТУТ ДЕЛЕНИЕ НА СТО ДВАДЦАТЬ ПЯТЬ??????????????

Да ёлы-палы, какие 125? Чтобы получить 125 Гц=8000000/256/250 прерывания, надо прескалер установить на 256, а таймер на 250, но никак на 125.

Цитата(prottoss @ Jul 10 2007, 14:05) *
Дорогой мой друг, в PWM fase correct ТС не сбрасывается по совпадению с OCR, просто фаза выходного сигнала меняется smile.gif

Не сбрасывается, ну и что? Он считает сначала вверх, потом вниз и устанавливает TOV0, который вы как раз и оспариваете, утверждая, что автор не может использовать прерывание по переполнению, поскольку он использует режим сравнения.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 16:15
Сообщение #39


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 11 2007, 00:13) *
А як жеж, читал два раза(:-)! Вам бы тоже не мешало, заодно и слово Fase подправили бы.
Сорриsmile.gif Исправлюсь


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 10 2007, 16:21
Сообщение #40


кекс
******

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



Цитата(=GM= @ Jul 10 2007, 19:13) *
Не сбрасывается, ну и что? Он считает сначала вверх, потом вниз и устанавливает TOV0, который вы как раз и оспариваете, утверждая, что автор не может использовать прерывание по переполнению, поскольку он использует режим сравнения.

Сорри что влажу в ваш спор, приведу только цитату из самого первого поста:

Цитата
Прерывание по совпадению и автоматическая очистка счетчика при условии сравнения.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 10 2007, 16:38
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 11 2007, 00:13) *
Не сбрасывается, ну и что? Он считает сначала вверх, потом вниз и устанавливает TOV0, который вы как раз и оспариваете, утверждая, что автор не может использовать прерывание по переполнению, поскольку он использует режим сравнения.
Блин... Вы опять все сног на голову. Я ничего не утверждал. Я просто прицепился к тому, что в маленькой песчинке smile.gif исходного кода было показано прерывание по переполнению, при этом говорилось, что прескалер = 256, счетчик автоматически сбрасывается при достижении значения 125. По коду я понял, что счетчик, это переменная time, которая и сбрасывается "автоматически"...Хоят по коду соооовсем не видно, где эта переменная делает ++.



Самое главное, что завтра, по прочтенни данного топика автор многое узнает smile.gif ... Во первых узнает, как люди ломают копья над неосвещенными вопросами. Во вторых ознакомится с режимами работы ТС0 и , думаю, для него много прояснится. smile.gif


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 10 2007, 22:35
Сообщение #42


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 10 2007, 16:38) *
Блин... Вы опять все с ног на голову. Я ничего не утверждал

Здравствуйте вам! Как же вы ничего не утверждали, когда в посте #19 вы говорите
Цитата(prottoss @ Jul 10 2007, 12:29) *
Я хочу сказать, что человек не использует Output Compare Unit, а использует переполнение счетчика ТС0, неужели это не понятно??? Таким образом у него получается частота 8.000.000 / 256 (прескалер) / 256 (переполняемый ТС0) = 122, .... Гц. Я сделал такой вывод, потому что человек привел код с прерыванием по переполнению

Вам было сказано, что вывод неверен, что Output Compare Unit МОЖНО использовать вместе с прерыванием TOV0, при этом частота прерываний таймера0 по переполнению будет 125 Гц.

Далее вам было показано, что нужно сделать (пост #33)
Цитата(=GM= @ Jul 10 2007, 14:55) *
Лехко. Ставите прескалер на 256, WGM=5 и OCR0A=125, тогда каждые 250 импульсов входной частоты будет возникать прерывание TOV0. Ну и поскольку входная частота для этого режима равна 8000/256=31.25 кГц, то прерывания по переполнению таймера0 будут возникать каждые 125 Гц, никаких чудес


И после этого говорить, что ничего не утверждали? Ну теперь-то согласны, что можно (но не обязательно нужно) легко, непринуждённо и без всяких извратов получить 125-ти герцовое прерывание по переполнению, используя Output Compare Unit в режиме Phase Correct PWM?

(Для ссылок см. посты #13, #17, #19, #22, #33, #34, #38, #41)


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
AndryG
сообщение Jul 11 2007, 05:25
Сообщение #43


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Почитал я ветку ... и понял, что сейчас мне на орехи достанется :-)
Меня в командировку сорвали - вот и не смог участвовать ... и кусок кода я с старой версии взял да поправил ... и предназначался он для ответа, "что такое делитель на 125" ... а с прерыванием протупил.

Как тут писалось на форуме, тоже попался с "бит 3 & CTC" -> пришлось в даташит залазить.

Для ясности приведу куски с рабочего проекта.
Инициализация:
Код
TCCR0A=0x02;
TCCR0B=0x04;
TCNT0=0x00;
OCR0A=0xF9;
OCR0B=0x00;


И само прерывание
Код
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
times++;                        
if (times < 125)
  goto tim0_ovf_ret;
times = 0x00;
realtime.s++;
//--------------------------Секунда!            
new_second = 1;
//конец новой секунды
tim0_ovf_ret:
}


Почитав ветку, увидел такие точки зрения, которые мне бы и в голову никогда не пришли ... спасибо вам всем ... сейчас буду вчитываться, да пробовать.
Прошу прощения за созданные неоднозначности.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 11 2007, 11:06
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 11 2007, 06:35) *
Здравствуйте вам! Как же вы ничего не утверждали, когда в посте #19 вы говорите
Вам было сказано, что вывод неверен, что Output Compare Unit МОЖНО использовать вместе с прерыванием TOV0, при этом частота прерываний таймера0 по переполнению будет 125 Гц.
Далее вам было показано, что нужно сделать (пост #33)
И после этого говорить, что ничего не утверждали? Ну теперь-то согласны, что можно (но не обязательно нужно) легко, непринуждённо и без всяких извратов получить 125-ти герцовое прерывание по переполнению, используя Output Compare Unit в режиме Phase Correct PWM?
(Для ссылок см. посты #13, #17, #19, #22, #33, #34, #38, #41)
Да уж, погорячился я маненькоsmile.gif Сорри. Почему то забыл что PHASE Correct PWM есть двух типов - первый (PWM = 1), при котором счетчик считает от 0 до МАХ и далее от МАХ и до 0; второй (PWM = 5) соответсвенно от 0 до OCRnA до и далее от OCRnA до 0.

Да и не подумал я, что человек таким хитрым способом будет получать 1 секунду. Зачем PWM c возможностью изменения частоты, если есть простой СТС. Вот о чем я думал, когда спорил... smile.gif


--------------------
Go to the top of the page
 
+Quote Post
oles_k76
сообщение Jul 12 2007, 19:31
Сообщение #45


RF
***

Группа: Свой
Сообщений: 321
Регистрация: 12-04-06
Из: Berlin
Пользователь №: 16 046



Все верно,если на кварце 8.000, то частотомер, например Ч3-66 покажет 8 000 122Гц, сам вот вожус с подобной проблеммой.
Купили кварцевый генератор,без даташита, на нем было написано 10.0000
Оказалось что при 5в питании частотомер показал 10 000 146Гц а вот при 3В 10 000 081Гц
опытным путем проверил всю партию. Оказалось все параметры оптимизированы на 3В-3.3В


--------------------
теперь питание компьютера можно отключить
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 12 2007, 20:59
Сообщение #46


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(олесь @ Jul 12 2007, 23:31) *
Все верно,если на кварце 8.000, то частотомер, например Ч3-66 покажет 8 000 122Гц, сам вот вожус с подобной проблеммой.
Купили кварцевый генератор,без даташита, на нем было написано 10.0000
Оказалось что при 5в питании частотомер показал 10 000 146Гц а вот при 3В 10 000 081Гц
опытным путем проверил всю партию. Оказалось все параметры оптимизированы на 3В-3.3В

Это Вы о чем ???
Если о этом:
Цитата
Цитата
Кварц маркирован .... 8 000 кГц

с такой маркировкой частота стабилизации кварца может быть в пределах
от
8, 000.000 Mhz
до
8, 000.999 Mhz
То ИМХО, это некоторое заблуждение считать, что чем больше нулей указанно после
запятой, тем кварц точнее.

Прикинем для Вашего случая:
8 000 122 при номинальной 8 000 000
итого ошибка 122 /8 000 000 = 15,25 * 10(-6)
то есть всего 15 ppm (15 милионных долей)
для стандартных(не термостабилизированных, состаренных, и тд) кварцев
нормальным является отклонение частоты от базовой <30ppm при нормальной температуре(25С)
Так что Ваш резонатор, впрочем как и генератор, вполне прошли тест smile.gif

Посчитаем что получится для Вашего кварца за сутки:
60*60*24*122/8 000 000 = 1,3176 сек
Если не устраивает, пытайтесь подобрать емкости,
только имейте в виду, если для задачи нужна реально большая точность,
то тогда однозначно начинаем смотреть в сторону термостабилизированных,
состаренных и тд кварцев(а лучше готовых генераторов). Только стоить это будет ....

Вот для примера ссылка по параметрам отечественных кварцев (простых):
http://www.symmetron.ru/suppliers/resonators/rezonator.pdf

У импортных(простых) все примерно так же.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 12 2007, 22:30
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(=GM= @ Jul 11 2007, 01:35) *
Ну теперь-то согласны, что можно (но не обязательно нужно) легко, непринуждённо и без всяких извратов получить 125-ти герцовое прерывание по переполнению, используя Output Compare Unit в режиме Phase Correct PWM?


С удовольствием почитал Ваши изыски. Хочется отметить, что Вы безусловно знаете толк в извращениях. Ну я в э.... хорошем смысле этого слова. biggrin.gif

Я бы не додумался. Всё таки чёткое знание работы переферии помогает ... выкрутится из любой ситуации. А парень, как и следовало ожидать, ответил просто - блин, я ж не ту программу вам послал. smile.gif Поздно, она уже у нас заработала! smile.gif

Фактически можно послать любой кусок старой программы и, подписавшись чужим именем, с помощью провокаций, умело поддерживать тему. Ч/з две недели искомая программа будет написана. smile.gif prottoss-а нужно сильно разозлить, высказать неуважение к его знаниям. Если удастся задеть за живое - он к вечеру проект готовый и отлаженный выложит. Всю работу закинет, а это сделает! smile.gif

lol.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 12 2007, 22:40
Сообщение #48


кекс
******

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



Цитата(SasaVitebsk @ Jul 13 2007, 01:30) *
(=GM= @ Jul 11 2007, 01:35)
С удовольствием почитал Ваши изыски. Хочется отметить, что Вы безусловно знаете толк в извращениях. Ну я в э.... хорошем смысле этого слова. biggrin.gif

lol.gif

"я злой и страшный, серый волк,
я в ИзвращеньЯх знаю толк"

© Мурзилка из Красная Шапочка (приключения Кати Очкаревой)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 13 2007, 10:31
Сообщение #49


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(SasaVitebsk @ Jul 12 2007, 21:30) *
С удовольствием почитал Ваши изыски. Хочется отметить, что Вы безусловно знаете толк в извращениях. Ну я в э.... хорошем смысле этого слова. biggrin.gif

(С)Француженка, быть может, мать твоя...(:-) Ну я б чё-нибудь другое сказал про извраты, но модераторы у нас строгие, пришли на ум слова из песни, Гарик Сукачёв поёт.

Цитата(SasaVitebsk @ Jul 12 2007, 21:30) *
Я бы не додумался. Всё таки чёткое знание работы переферии помогает ... выкрутится из любой ситуации. А парень, как и следовало ожидать, ответил просто - блин, я ж не ту программу вам послал. smile.gif Поздно, она уже у нас заработала! smile.gif

Ну, разработчик систем с встроенным микроконтроллером (или имбеддер на англицкий манер) волей-неволей должен знать оборудование, с которым он работает, и вдумчиво его использовать, иначе это будет не езда, а ёрзанье(:-). Последних надо бы называть ёрзальщиками(:-).

А вот всем вам вопрос на засыпку: зачем введён такой режим WGM=5?

Цитата(SasaVitebsk @ Jul 12 2007, 21:30) *
prottoss'а нужно сильно разозлить, высказать неуважение к его знаниям. Если удастся задеть за живое - он к вечеру проект готовый и отлаженный выложит. Всю работу закинет, а это сделает! smile.gif

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

Саша, у меня пара вопросов к вам, не знаю, может новую ветку открыть, ну как получится. Какие сейчас модны (и востребованы) драйверы для светодиодов для панно, ну и цены тоже интересно...Никогда этим не занимался, а тут нашёл интересное (и дешёвое, вроде бы) решение - один чип управляет током 8-16 диодов со средним током до 70 мА на диод и никаких внешних элементов...Что скажете?

Цитата(defunct @ Jul 12 2007, 21:40) *
"я злой и страшный, серый волк,
я в ИзвращеньЯх знаю толк"
© Мурзилка из Красная Шапочка (приключения Кати Очкаревой)

Мне больше нравится из Красной Пашечки: ...вдали проковылял хромой заяц с явными признаками цирроза печени, волк привалился к березе и дал дуба.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 13 2007, 10:44
Сообщение #50


кекс
******

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



Цитата
А вот всем вам вопрос на засыпку: зачем введён такой режим WGM=5?

ЧИМ + ШИМ.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 13 2007, 11:31
Сообщение #51


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Jul 13 2007, 09:44) *
ЧИМ + ШИМ

Это как?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 13 2007, 11:53
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 13 2007, 19:31) *
Это как?
оччччччь просто smile.gif

ШИМ (широтно-импульсная модуляция) aka WGM = 0x01:
Меняется длительность импульса при неизменной частоте - производится при помощи изменения содержимого регистра OCRnx

ЧИМ (частотно-импульсная модуляция) aka WGM = 0x05:
Меняется длительность импульса пропорционально частоте - так же при помощи OCRnx


--------------------
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 13 2007, 13:53
Сообщение #53


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(=GM=)
Саша, у меня пара вопросов к вам, не знаю, может новую ветку открыть, ну как получится. Какие сейчас модны (и востребованы) драйверы для светодиодов для панно, ну и цены тоже интересно...Никогда этим не занимался, а тут нашёл интересное (и дешёвое, вроде бы) решение - один чип управляет током 8-16 диодов со средним током до 70 мА на диод и никаких внешних элементов...Что скажете?
MBI5016, MBI5026, MBI5168


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 13 2007, 15:23
Сообщение #54


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 13 2007, 10:53) *
ШИМ (широтно-импульсная модуляция) aka WGM = 0x01:
Меняется длительность импульса при неизменной частоте - производится при помощи изменения содержимого регистра OCRnx

Здесь вроде бы ясно. А вот здесь непонятно.
Цитата(prottoss @ Jul 13 2007, 10:53) *
ЧИМ (частотно-импульсная модуляция) aka WGM = 0x05: Меняется длительность импульса пропорционально частоте - так же при помощи OCRnx

Мне казалось, что будут генерироваться короткие импульсы неизменной ширины в два такта (может в один), а период будет меняться с помощью OCR0А. Т.е. длительность импульсов неизменна, а частота импульсов меняется. Легко убедиться в этом, если постепенно приближать значение OCR0А к 0xFF, скажем, при OCR0А=0xFЕ импульсы будут шириной 4 такта, а при OCR0А=0xFF импульсы будут шириной 2 такта.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 13 2007, 15:38
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 13 2007, 23:23) *
Мне казалось...
Я поражаюсь 07.gif Парень убедил всех и меня... В итоге он сам не знает того, в чем он всех победил... crying.gif



Еще раз: PWM = 0x005:

1. Цикл счета есть количество импульсов TCn от OCRnx ...0 + 0 ... OCRnx

2. Фаза сигнала меняется при переходе значения счетчика через 0

3. Меняя значение OCRnx мы, соответсвенно меняем частоту изменения фазы, при этом длительность импульса тоже меняется...


--------------------
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jul 13 2007, 16:18
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(=GM= @ Jul 13 2007, 13:31) *
Саша, у меня пара вопросов к вам, не знаю, может новую ветку открыть, ну как получится. Какие сейчас модны (и востребованы) драйверы для светодиодов для панно, ну и цены тоже интересно...Никогда этим не занимался, а тут нашёл интересное (и дешёвое, вроде бы) решение - один чип управляет током 8-16 диодов со средним током до 70 мА на диод и никаких внешних элементов...Что скажете?

Самые распространённые похоже MBI. Они и найболее гуманные по цене. есть на 8 и 16 светодиодов. 70ма это норма для данных корпусов.
Хотя тема сейчас популярная и выпускаются драйвера многими фирмами. Например TI. Вот здесь, к примеру http://www.e-neon.ru/ интересные предложения. Походу какая то новая контора открылась. Есть драйвера на 24 светодиода (8RGB), а также готовые драйвера для полноцветных матриц с динамической индикацией.

Вопрос цены в данном секторе весьма любопытный. Лучше поговорить с EXeGLuMATOR или ещё с кем нибудь из тех кто экранами занят. Я только бегущие строки и табло делаю пока. Экранов даже в проекте нет. Смысл в том, что они берут всё это миллионами и десятками миллионов штук. В связи с этим цена у них раза в два меньше чем у меня. Так я ещё и жду по 3 месяца заказ. Но, в принципе, цены сейчас существенно упали. Если буквально 3 года назад светодиодная моно матрица 8х8 стоила 5$, то теперь 1.5$.

Появились светодиоды 18W. 07.gif Прайс тут обзорный прислали.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 13 2007, 16:33
Сообщение #57


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 13 2007, 14:38) *
Я поражаюсь 07.gif Парень убедил всех и меня... В итоге он сам не знает того, в чем он всех победил... crying.gif

Чудак, вы рrottoss. не собирался я никого ни побеждать, ни злить. Истина, как говорится, мне дороже.
По тому делу, которое мы обсуждали раньше. Вы так ничего и не поняли(:-). Говорю последний раз. Представьте себе, при WGM=5 счётчик считает вверх. 0, 1, 2, 249. Следующее значение счетчика будет 250, и оно совпадёт с содержимым OCR0А, которое равно 250 (на самом деле 249, ну да ладно, оставим так). Что произойдёт? А вот что. Направление счёта счетчика сменится на обратное, затем произойдёт обновление регистра OCR0А, в него перепишется ТО ЖЕ САМОЕ ЗНАЧЕНИЕ 250. Со следующего такта счетчик начнёт считать вниз. Когда счётчик дойдёт до 0, возникнет прерывание таймера по переполнению TOV0. Далее весь цикл повторится, надеюсь, теперь вы это поняли?
Ну а прерывания (125 штук в секунду) можно использовать для организации текущего времени.

Теперь по вашему сегодняшнему заявлению.
Цитата(prottoss @ Jul 13 2007, 14:38) *
Еще раз: PWM = 0x005:

prottoss, это уже не смешно, ну не PWM=5, а WGM=5.
Цитата(prottoss @ Jul 13 2007, 14:38) *
1. Цикл счета есть количество импульсов TCn от OCRnx ...0 + 0 ... OCRnx
2. Фаза сигнала меняется при переходе значения счетчика через 0
3. Меняя значение OCRnx мы, соответственно меняем частоту изменения фазы, при этом длительность импульса тоже меняется...

1) Ну хорошо, согласен.
2) О, боги! Ну откуда вы взяли, что фаза OCR0 будет меняться при переходе значения счетчика через 0? Ну хотя бы взгляните на график на рис.32. Где там меняется фаза выходного сигнала?
3) Где по-вашему будет происходить сравнение содержимого счётчика и OCR0? Если в нуле, тогда у вас всегда будет меандр переменной частоты.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 13 2007, 16:45
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 14 2007, 00:33) *
Ну хотя бы взгляните на график на рис.32.
Это про FAST PWM MODE... smile.gif

Стоит ли дальше продолжать диалог?

RE: Мы сдеся про ФАЗЕ КОРРЕКТ ПВМ МОДЕЕЕ... Аууу...


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 13 2007, 21:38
Сообщение #59


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 13 2007, 15:45) *
Это про FAST PWM MODE... smile.gif Стоит ли дальше продолжать диалог?
RE: Мы сдеся про ФАЗЕ КОРРЕКТ ПВМ МОДЕЕЕ... Аууу...

Поправлю, график на рис.33.

Хорошо бы вы "здеся" ответили на 2 вопроса по существу.

1) Откуда вы взяли, что фаза OCR0 будет меняться при переходе значения счетчика через ноль? Ну хотя бы взгляните на график на рис.33. Где там меняется фаза выходного сигнала?

2) Где по-вашему будет происходить сравнение содержимого счётчика и OCR0? Если в нуле, тогда у вас всегда будет меандр переменной частоты, зависящей от содержимого OCR0.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 13 2007, 22:27
Сообщение #60


кекс
******

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



Цитата(=GM= @ Jul 14 2007, 00:38) *
2) Где по-вашему будет происходить сравнение содержимого счётчика и OCR0? Если в нуле, тогда у вас всегда будет меандр переменной частоты, зависящей от содержимого OCR0.

Регистра OCR0 вообще-то 2. OCR0A - задает частоту, OCR0B - "ширину" импульса.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 14 2007, 21:03
Сообщение #61


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Jul 13 2007, 22:27) *
Регистра OCR0 вообще-то 2. OCR0A - задает частоту, OCR0B - "ширину" импульса

Ерунду говорите, в атмеге2313 два независимых Output Compare Units А и В ассоциированных с таймером0. Регистр OCR0A используется одним блоком, регистр OCR0A - другим. Вот ссылка: Timer/Counter0 is a general purpose 8-bit Timer/Counter module, with two independent Output Compare Units, с.66, документ 2543i.

Отличие двух блоков в том, что для блока А может использоваться фиксированное значение TOP=0xFF в режиме Phase Correct PWM, а для блока В - не может. Естественно, мы говорим о блоке А.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 14 2007, 22:39
Сообщение #62


кекс
******

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



Цитата(=GM= @ Jul 15 2007, 00:03) *
Ерунду говорите, в атмеге2313 два независимых Output Compare Units А и В ассоциированных с таймером0. Регистр OCR0A используется одним блоком, регистр OCR0A - другим. Вот ссылка: Timer/Counter0 is a general purpose 8-bit Timer/Counter module, with two independent Output Compare Units, с.66, документ 2543i.

Отличие двух блоков в том, что для блока А может использоваться фиксированное значение TOP=0xFF в режиме Phase Correct PWM, а для блока В - не может. Естественно, мы говорим о блоке А.

Сами вы ерунду говорите. Если счетчик (TCNT) начнет считать в обратную сторону при достижении OCR0A, то
- во-первых значения OCR0B >= OCR0A дадут константу на выходе OC0B,
- а во-вторых вывод OC0A нет смысла применять (кроме случая когда нужен строго ЧИМ).

ЧИМ + ШИМ можно получить естесственно только на выводе OC0B.



Если же я действительно говорю ерунду, и если TCNT не начинает считать в обратную сторону при достижении OCR0A, тогда то что вы раньше говорили - насчет TOVF - чушь, т.к. частота следования TOVF будет неизменной.

Так что определитесь уж.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 15 2007, 10:45
Сообщение #63


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



To defunct. Кажется понял наконец корень всех затруднений, как всегда, это недоговоренность. Я говорил про блок А (пост #54) и его выход OCR0A, который в режиме WGM=5 даёт строгий ЧИМ - короткие импульсы постоянной длительности с переменным периодом.

А вы начали говорить об использовании блока В, непонятно кстати по какой причине и не указывая этого. Ну здесь я согласен, с выхода блока В можно получить ИЛИ ЧИМ, с заданной длительностью импульса (регистр OCR0B=const) и переменным периодом (регистр OCR0A=var) ИЛИ ШИМ, с переменной скважностью (регистр OCR0B=var) и постоянным периодом (регистр OCR0A=const).

Что касается вот этого,
Цитата(defunct @ Jul 14 2007, 22:39) *
Если же я действительно говорю ерунду, и если TCNT не начинает считать в обратную сторону при достижении OCR0A, тогда то что вы раньше говорили - насчет TOVF - чушь, т.к. частота следования TOVF будет неизменной. Так что определитесь уж.

то не врубаюсь. Могу только подтвердить, что при WGM=5 таймер0 считает в двух направлениях, при достижении нуля устанавливается флаг TOV0. Если не менять содержимое OCR0A, то частота прерываний будет неизменна.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
prottoss
сообщение Jul 15 2007, 12:33
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(=GM= @ Jul 15 2007, 18:45) *
то не врубаюсь. Могу только подтвердить, что при WGM=5 таймер0 считает в двух направлениях, при достижении нуля устанавливается флаг TOV0. Если не менять содержимое OCR0A, то частота прерываний будет неизменна.


Так врубитесь же наконец smile.gif При WGM = 1, если менять содержимое OCRnx - частота выходных импульсов OCnx НЕ МЕНЯЕТСЯ и равна частоте входных импульсов TC, деленной на 510 (для 8-и битных счетчиков, два прохода, с инкрементом и декрементом, от 0 и до максимума, т.e. 255), меняется длительность импульсов

При WGM = 5, практически тоже самое, НО, максимум равен НЕ 255, а числу в OCRnA, при этом не зависит, какое число сидит в OCRnB. НО, с помощью OCRnA мы можем менять частоту выходных импульсов, а спомощью OCRnB их ширину

Частота прерываний от TOVF будет в первом случае равна частоте входных импульсов ТС, деленной на 510, во втором, как Вы уже говорили зависит от значения OCRnA, подробнее можете посмотреть в любимом smile.gif даташите


--------------------
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 15 2007, 13:34
Сообщение #65


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(prottoss @ Jul 15 2007, 12:33) *
При WGM = 1, если менять содержимое OCRnx - частота выходных импульсов OCnx НЕ МЕНЯЕТСЯ и равна частоте входных импульсов TC, деленной на 510 (для 8-и битных счетчиков, два прохода, с инкрементом и декрементом, от 0 и до максимума, т.e. 255), меняется длительность импульсов

При WGM = 5, практически тоже самое, НО, максимум равен НЕ 255, а числу в OCRnA, при этом не зависит, какое число сидит в OCRnB. НО, с помощью OCRnA мы можем менять частоту выходных импульсов, а спомощью OCRnB их ширину

Частота прерываний от TOVF будет в первом случае равна частоте входных импульсов ТС, деленной на 510, во втором, как Вы уже говорили зависит от значения OCRnA, подробнее можете посмотреть в любимом smile.gif даташите

Всё это я вам уже раз десять говорил разными словами, а ВЫ мне говорили, что так не бывает. Теперь вы повторяете мне мои слова. Зачем?

Я вам вопросы по существу задал, а вы их замотали. Вопросы-то простые.

1) Откуда вы взяли, что фаза OCR0А будет меняться при переходе значения счетчика через ноль? Взгляните на график на рис.33. Где там меняется фаза выходного сигнала?

2) Где на временной шкале, по-вашему, будет происходить сравнение содержимого счётчика и OCR0А?

3) какова форма выходного сигнала на выходе ОС0А в режиме WGM=5?


Не врубаюсь я вот в эти фразы

defunct...если TCNT не начинает считать в обратную сторону при достижении OCR0A, тогда то что вы раньше говорили - насчет TOVF - чушь, т.к. частота следования TOVF будет неизменной. Так что определитесь уж

Слова все знакомые, но ничегошеньки не понимаю, смысл какой-то мутный

- ...если TCNT не начинает считать в обратную сторону при достижении OCR0A
Почему не начинает? Начинает, читайте все мои посты. Зачем вы об этом вообще говорите?

- тогда то что вы раньше говорили - насчет TOVF - чушь
Какую чушь я раньше говорил о TOVF? Что вы тут плетёте?

- т.к. частота следования TOVF будет неизменной
Будет неизменной, 125 Гц для оговоренных выше условий, подтверждаю. Ну и что? Что вы всем этим хотите сказать?

-Так что определитесь уж
С чем определиться? Постарайтесь яснее выразить свои мысли.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 15 2007, 15:53
Сообщение #66


кекс
******

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



Цитата(=GM= @ Jul 15 2007, 16:34) *
Слова все знакомые, но ничегошеньки не понимаю, смысл какой-то мутный

Перечитайте плз. несколько раз весь тот пост, не отрывая пол-предложения от всего контекста.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 15 2007, 16:43
Сообщение #67


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(defunct @ Jul 15 2007, 15:53) *
Перечитайте плз. несколько раз весь тот пост, не отрывая пол-предложения от всего контекста.

Перечитал два раза. Смысл вашего поста всё равно мутный, ничего личного.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 15 2007, 22:04
Сообщение #68


кекс
******

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



Цитата(=GM= @ Jul 15 2007, 19:43) *
Перечитал два раза. Смысл вашего поста всё равно мутный, ничего личного.

Ок, не мутно не я уже говорил ЧИМ+ШИМ получается на выводе OC0B WGM2..0 = 5:

OCR0A - задает частоту
OCR0B - ширину импульса.
OCR0B должен быть строго меньше OCR0A.

и вы тоже:
Цитата
с выхода блока В можно получить ИЛИ ЧИМ, с заданной длительностью импульса (регистр OCR0B=const) и переменным периодом (регистр OCR0A=var) ИЛИ ШИМ, с переменной скважностью (регистр OCR0B=var) и постоянным периодом (регистр OCR0A=const).


но
Цитата
А вы начали говорить об использовании блока В, непонятно кстати по какой причине и не указывая этого.

Дело в том, что WGM2..0 = 5 в отрыве от блока B нет смысла рассматривать.
Go to the top of the page
 
+Quote Post

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

 


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


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