Krik99 писал(а):Скажите как настроить таймер на tiny2313 чтобы срабатывал каждую 1 секунду
BerZerK-ku писал(а)://4Мгц/1024 = 3906,25Гц.
А почему бы не использовать прескалер = 256 ? Там же есть такой. Тогда вообще всё получается шоколадно: 4Мгц/256 = 15625 Гц. Загнать таймер в режим "Clear Timer on Compare Match (CTC) Mode", и в регистр сравнения (Output Compare Register) прописать 15625 ... И никаких ошибок в сутки.
Если насчёт формулы Вы обратились ко мне, то никакой формулы у меня нет. Всё написано в datasheet. Надо просто изучить, как работают таймеры и включить здравый смысл. Перед каждым таймером можно включить счётчик, который делит тактовую частоту контроллера. Этот счётчик называется "Prescaler". Смотрите в datasheet раздел "Timer/Counter0 and Timer/Counter1 Prescalers". К сожалению, для этого счётчика нельзя установить произвольный коэффициент деления. Можно только выбрать одно из значений: "The prescaled clock has a frequency of either fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O/256, or fCLK_I/O/1024." Остальное можно "доделить" уже на самом таймере. Если использовать таймер 0, то он может делить, максимум, на 256. Ели таймер1, то можно делить уже на 65536.
Главная задача - представить частоту кварца в виде произведения множителей, а эти множители распределить между счётчиками - прескалером, таймером, и можно также организовать счётчик программно.
Барсик писал(а):А почему бы не использовать прескалер = 256 ? Там же есть такой. Тогда вообще всё получается шоколадно: 4Мгц/256 = 15625 Гц. Загнать таймер в режим "Clear Timer on Compare Match (CTC) Mode", и в регистр сравнения (Output Compare Register) прописать 15625 ... И никаких ошибок в сутки.
Примерно как считать я понял. Говорят что можно ещё после переполнения не с нуля начинать, а с определённого знчения. Я так понял что с начало считают 4000000/256=15625, а потом ставят значение Output Compare Register = 15625... Output Compare Register в него пишеш любое значение какое тебе нужно, лижбы без десятичных, правильно я понял? Вот хочу ещё подсчитать для 100 раз в секунду. Можно былобы 4000000/256=15625/100=156,25 но тут будет не точно изза десятичных оставшихся. А вот так 4000000/64=62500/100=625 и можно ставить Output Compare Register = 625 , и если я не ошибаюсь частота должна быть 100 прерываний в секунду? Правильно ли я думаю?
Krik99 писал(а):Говорят что можно ещё после переполнения не с нуля начинать, а с определённого знчения.
Можно. Достаточно в TCNTx записать нужное значение.
Krik99 писал(а):А вот так 4000000/64=62500/100=625 и можно ставить Output Compare Register = 625 , и если я не ошибаюсь частота должна быть 100 прерываний в секунду? Правильно ли я думаю?
Верно.
При использовании прерывания (флага прерывания) сравнения надо не зыбывать про TCNTx. Например: если счет идет от о до 625, то надо его обнулять.
BerZerK-ku писал(а):...При использовании прерывания... надо не зыбывать про TCNTx ...надо его обнулять.
Лучше как раз забыть об этом раз и навсегда. Для этого надо использовать режим таймера "Clear Timer on Compare Match (CTC) Mode", о котором я писал выше. В этом режиме не требуется обнулять счётчик. Он обнуляется сам, когда достигнет значения, которое находится в регистре сравнения (Output Compare Register). Таким образом, при инициализации таймера, вы задаёте режим "CTC", и только один раз загружаете значение коэффициента пересчёта в регистр сравнения. Дальше таймер сам молотит как миленький без Вашего участия.
P.S. Да, и прерывание надо использовать не по переполнению счётчика, а по совпадению с регистром сравнения:
5 0x0004 TIMER1 COMPA Timer/Counter1 Compare Match A
Что-то запутался. А может показать как это 4Мгц/256 = 15625 Гц и (Output Compare Register) = 15625 будет смотрется в настройках таймера для Timer1 в tiny2313. За ранние спасибо.
а можно где-нибдуь скачать имеджКрафт про безплатно? чертовы буржуины просят за ImageCraft pro на официальном сайте 500 баков , а все безплатное только на 30 дней
Krik99 писал(а):Что-то запутался. А может показать как это 4Мгц/256 = 15625 Гц и (Output Compare Register) = 15625 будет смотрется в настройках таймера для Timer1 в tiny2313. За ранние спасибо.
// установка режимов и прескалера TCCR1A=0x00; TCCR1B=0x0C;
// загрузка регистра сравнения OCR1A=15625;
// разрешаем прерывания по совпадению с регистром сравнения TIMSK=0x40;
Krik99 писал(а):Что-то запутался...
Дык надо взять datasheet и тупо присвоить значения соотвествующим управляющим регистрам.
А в CodeVisionAVR можно вызвать автоматический генератор программ и просто расставить галки в настройках таймера.
BerZerK-ku писал(а):... черт его знает что в регистре по включению сидит.
Я по простоте душевной всегда думал, что при включении или сбросе в регистрах сидит то, что в datasheet называют "Initial Value". Для регистра TIFR это значение = 00000000. Или я не прав?
Кроме того, я всегда считал, что установленному флагу соответствует логическая 1, а сброшенному - 0. А Вы говорите, что сбрасываете флаги, а сами присваиваете регистру значение 0xFF. Или я что-то не догоняю ?
BerZerK-ku писал(а):... черт его знает что в регистре по включению сидит.
Я по простоте душевной всегда думал, что при включении или сбросе в регистрах сидит то, что в datasheet называют "Initial Value". Для регистра TIFR это значение = 00000000. Или я не прав?
Первый раз слышу об этом. Запомню. Просто всегда перестраховывался.
Барсик писал(а):Кроме того, я всегда считал, что установленному флагу соответствует логическая 1, а сброшенному - 0. А Вы говорите, что сбрасываете флаги, а сами присваиваете регистру значение 0xFF. Или я что-то не догоняю ?
OCF0 is cleared by writing a logic one to the flag
Вроде бы все флаги прерываний в AVR сбрасываются так програмным образом.
BerZerK-ku писал(а):Вроде бы все флаги прерываний в AVR сбрасываются так програмным образом.
В смысле, "клин клином вышибают"? Т.е. значение флага равно лог.1. Чтобы его сбросить, надо в тот же флаг записать тоже лог.1, и получится значение лог.0 ?
Барсик писал(а):В смысле, "клин клином вышибают"? Т.е. значение флага равно лог.1. Чтобы его сбросить, надо в тот же флаг записать тоже лог.1, и получится значение лог.0 ?
здраствуйте товарисчи!!!Подскажите,пожалуйста,какой датчик можно прицепить к мк что бы измерять маленький вес,или хотя бы фиксировать изменение веса или давления на какую нить пластинку.
Зараннее благодарен.