Помогите настроить таймер
- Войдите на сайт для отправки комментариев
Сб, 28/05/2022 - 23:26
Необходимо настроить таймер на 0,1 секунду, частота 8МГц
TCCR1B = (1<<CS12)|(0<<CS11)|(1<<CS10); // настраиваем делитель TIMSK |= (1<<TOIE1); // разрешаем прерывание по переполнению таймера TCNT1 = 64456;
https://www.google.com/m/search?q=avr%20timer%20calculator
Спасибо тебе, добрый человек
Странно, вроде так, но на выходе частота по ослику 7,8кГц
А тактовая чистая скоко (по ослику)?
а как на проце ее замерять, на кварце стазу проц вырубает
и тут совсем данные то разнятся, мне нужно получить 10Гц, а на выходе кГц
Ну, как... Предделитель =1, наверное и CTC на таймере заюзать.
https://www.arduinoslovakia.eu/application/timer-calculator
TCCR1A мне использовать нельзя, нужна эта лапа для tone TCCR3A занята другим таймером
то есть OCIE1A и OCIE3A нельзя
Вопрос был какой? Настроить таймер. С словацким исходником работает на нужной частоте?
5 Гц показывает
и ругалось на TIMSK3 поставил ETIMSK
Atmega128 у меня
Хорошо, что не Байкал и узнали мы об этом не через полгода.
извиняюсь
мне в программе просто нужно 2 таймера и свободная лапа OC1A
Попробовал первый таймер и как не меняй число 244 Гц выдает и все
Вы хотите на ноге частоту получить или в прерывании ? Вот тут:
http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/pomogite-nastr...
прерывание вызывается 10 раз в секунду, но диод моргает 5 раз в секунду, так как на одно моргание уходит два вызова прерывания.
Что бы моргало 10 раз в секунду надо делитель на 64 и число сброса 6249.
на ноге мне нужно чтобы работала функция tone, и еще 2 прерывания чтобы работали на библиотеке MegaCore я так понял можно настроить только таймеры 1 и 3, на нулевой выдает кучу ошибок что не знает таких, да и которые знает не удается настроить выдает постоянно одну и ту же частоту какое бы я число сброса не поставил, главное что на тестовой плате arduino nano все работает хорошо на 328p чипе, а вот с atmega128 какая-то засада
на ноге мне нужно чтобы работала функция tone
10 Гц ?
Почему вы MegaCore называете библиотекой ??? Это просто пакет поддержки плат. Там прост сопоставлены имена регистров, констант ... с их физическим расположением в памяти процессора.
не tone нужно менять в программе (шаговым управлять через драйвер), а прерывания отдельно должны работать одно на 10 гц, а другое на 1000 или даже больше (для считывания кнопок)
тоне от того же таймера что и прерывания 10 Гц?
вчера ковырял файлы чтобы сравнить где же в нано прописаны эти:
нет оно так думаю работать не будет, нужно tone на той лапе отдельно и 2 любые другие таймера, но нормально не хочет работать ни один
ХЗ где вы смотрите ! https://ww1.microchip.com/downloads/en/DeviceDoc/doc2467.pdf стр. 103
TCCR0B там реально НЕТ !!!
а это не он
8-bit Timer/Counter0 with PWM and Asynchronous Operation
Таймер есть ! Регистры у него зовутся иначе !!!
хоть бы пример был с этими регистрами, ппц весь инет перерыл
Timer/Counter Control Register – TCCR0
Timer/Counter Register – TCNT0
Output Compare Register – OCR0
Asynchronous Status Register – ASSR
Timer/Counter Interrupt Mask Register – TIMSK
Timer/Counter Interrupt Flag Register – TIFR
Special Function IO Register – SFIOR
Не знаю как на 128ом, но обычно таймер0 используется в скетчах как системный для millis, delay и прочего ...
да я увидел регистры, но не знаю что в них писать
В даташите же расписано все от и до !
все равно ошибки такого плана
Где вы там нашли TCCR0A ?
в документации на другом сайте по этому счетчику
Ну если в 128 регистры называются по другому - значит надо что то поменять или нет ???
да, пытаюсь
А функции tone мешают прерывания? (почему-то), шаговик дергается раз в секунду, скорее всего по времени получается прерывание от часов каждую секунду, и на осциллографе это хорошо видно.
3d_killer -Почему вы читаете какие-то левые описания для других МК? Ведь есть отдельный даташит на атмегу 128 - там и смотрите!
Что касается проблем с прерываниями - не видя вашего кода, сказать. почему у вас "прерывание дергается" - невозможно. Судя по вопросам выше - вы в коде наверняка наворотили черти что...
Сейчас сделал так
Так же работает внешнее прерывание с часов, которое сбрасывает сторожевой таймер
tone вызывается один раз при старте на лапе 13 PB5 (OC1A)
Теперь еще раз сформулируйте понятным языком. что именно тут не работает.
код нужно выкладывать ВЕСЬ
Тут все работает, но tone каждую секунду прерывается на очень короткое время и далее возобновляется
мне казалось что tone работает как ШИМ и не зависит от прерываний в программе, но информации не нашел
tone вызывается один раз при старте на лапе 13 PB5 (OC1A)
если вы пытаетесь в одной программе использовать первый таймер в своем коде и в функции tone() - надо после каждого использования tone настраивать таймер заново.
А лучше просто отказаться от готовой функции tone() и написать вывод частоты на пин самостоятельно через регистры
так прерывания не сбиваются, все работает просто tone говорю же каждую секунду останавливается на короткий промежуток времени и запускается заново на той же частоте
мне казалось что tone работает как ШИМ и не зависит от прерываний в программе, но информации не нашел
посмотрите исходник tone для атмеги128, если оно на аппаратном ШИМе - то влиять не должно, а если на программном(через прерывание) - то конечно другие интерррапты будут влиять
Написал выше - не используйте tone, пишите самостоятельно
Так как первый и третий таймеры у меня задействованы получается через регистры мне нужно это делать на нулевом таймере?
Вот вроде написал на нулевой таймер но он что-то не стартует
переписал, но все равно молчит
Может проще нам рассказать что и на каких ногах должно быть? Плюс какие прерывания должны вызываться ? Без общей картины - одно чинится, другое ломается !!!