Микроконтроллеры | А таймер реального времени ATMega128 |
|
---|---|---|
BCluster: Вопрос - после того как происходит это прерывание, счетчик разве сбрасывается? BCluster: И ыще, я хоть там напишу PORTF=(PORTF^(17)) штоп мигать светодиодом все равно тормозить будет BCluster: но умножение и деление не одно и тоже ? BCluster: Самое интереснойе - все заработало, заменил кварц на 12 мГц. |
|
|
во первых спасибо за ответы (: раньше я писал так: насчет умножения... судя по вашим словам получается что а*0.1 будет выполнятся быстрее чем а/10? за СТС отдельное спасибо будем стараться работать с ним |
|
|
BCluster: 4322000/43220 = 100 а не 10... и я на 256 не делю... там просто остались комменты... делил на 8 1) Нет там никаких комментов, в предделителе для таймера1 вы делите именно на 256: TCCR1B=0х04 CSR2-0=100, т.е. CLK/256. А потом эта частота для получения прерывания по переполнению делится ещё на 2260. Не знаю, как оно у вас работает тютя в тютю. 2) Ну да 100 Гц или 10 мс. Отсчитываете 10 раз и получаете 100 мс. 3) По-моему, вам ничего делить не надо, надо просто досчитать до 10, обнулиться и по-новой. j++; |
|
|
1. Просьбо - пишите мне "ты" вместо "вы"... мойа психика не выдерживает такого обращения (: делил действительно на 8, наверное не тот исходнек запостил, прошу прощения а зачем 10 раз вызывать прерывание, когда можно 1? или изза этого деления глюки могут происходить временные? |
|
|
1) Ну мы с вами пока на брудершафт не пили, так что писать вам "ты" не могу, и потом, вдруг вы из сигуранцы какой-нибудь, а я вот планирую крепость Аккерман посетить . 2) Ну покажите, как разрулить ситуацию одним прерыванием, у вас вроде требование было 100 мс точно. Или это примерно? И зачем вы делили на 2260? 3) Само деление не сложная процедура, но достаточно объёмная, особенно на си. Страшного ничего не произойдёт, если будете делить, так же впрочем, как и с 10 прерываниями вместо одного. Если конечно, у вас вагон процессорного времени. 4) Видимо, на 4 Мгц у вас элементарно не хватает времени на обработку прерываний, вы там долгоиграющие функции заложили, типа sprintf. Поэтому некоторые прерывания пропадают, значит следующий раз таймер1 вынужден считать от 0 до 65536, поскольку пропала инициализация таймера на 2260, отсюда тормознутость. Вот, кстати, одна из причин, зачем нужно быстрое выполнение прерывания. 5) Интересно, как же это у вас таймер0 заработал? 6) И попрошу вас напоследок, давайте выдавать на гора поменьше олбанского. |
|
|
Ррр, ну ладно я попробовал делим на 8 а потом еще на 50к TCCR1B = 0x00; насчет албанского договорились *THUMBS UP* |
|
|
BCluster: Одним прерыванием? Секунду. Кварц 4 МГц делим на 8 а потом еще на 50к Вот только не надо передёргивать. Вам решение (пусть и 10 прерываний) было дано на кварц 4,322 МГц, а вы даёте решение на кварц 4 МГц (с одним прерыванием). С какого припрыга, спрашивается? Так не пойдёт. Давайте всё-ж-таки решение на кварц 4,322 МГц с одним прерыванием. Кстати, и на кварц 12 МГц не видно решения в одно прерывание. |
|
|
ok, сейчас пересчитаю на 4.322 делим на 8 и на 54025 //TIMER1 initialize - prescale:8 TCCR1B = 0x00; //stop ICR1H = 0xD3; на 12 МГц //TIMER1 initialize - prescale:64 TCCR1B = 0x00; //stop ICR1H = 0x49; на 64 и 18750 |
|
|
Совсем другое дело. Что-то я плохой сегодня, невпопад отвечаю . Наверное, думаю о завтрашнем дне, иду сдавать практическое вождение. |
|
|
GM: иду сдавать практическое вождение. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |