54 сообщения в этой теме

nightt    0

Значит я устанавливаю кварц, фьюзы, и все тактируется от кварца а не от внутреннего генератора?

Я могу для кварца пользоваться пределителями?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
my504    157
Значит я устанавливаю кварц, фьюзы, и все тактируется от кварца а не от внутреннего генератора?

Я могу для кварца пользоваться пределителями?

Обычно - нет, но есть PLL в старших моделях - с ним частота кварца УМНОЖАЕТСЯ (обычно на 4)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
YurkaM    7

Вот блин! Сделал для себя маленькое открытие :o Оказывается у некоторых AVR-ок делитель есть не только на 8, который фузом ставиться! Например в Mega48 делитель можно менять програмно. Под это дело отданы 4 бита в регистре CLKPR. Делитель можно менять на ходу!! Значения 1, 2, 4, 8, ... 256

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0
Делитель можно менять на ходу!!

То есть по ходу выполнения программы? В одном моменте с одной частотой, а вдругом моменте с другой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

Не знаю как в АВРах, а в ПИКах можно с ВНУТРЕННИМ RC-генератором вытворять все что угодно на лету: и предделитель и мелкодискретная подстройка... Это все является сервисом экономии питания. А кварцевый генератор к этому хозяйству не подключен...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0

Например у меня МК работает на частоте 100 Гц. (делители и таймер)

Вызываю прерывание.

Получается 100 прерываний в секунду.

Как сделать, чтоб и в прерывании тоже, частота выполнения команд была 100 Гц, а не рабочая частота МК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

??? ЗАЧЕМ ???

Прерывание необходимо исполнить как можно быстрее, чтобы не пропустить очередное...

Изложите пожалуйста решаемую задачу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0
Изложите пожалуйста решаемую задачу...

ATmega48. 6 ШИМ. Аппаратно. Попарно. 2 ШИМ с 1-2 ног. Запаздывание. 2 ШИМ с 3-4 ног. Запаздывание. 2 ШИМ с 5-6 ног. Частота изменения сигнала между двумя ногам 1 КГц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

Это не задача, а ее реализация. Что с этим хозяйством делаем? К чему так мудрено?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
YurkaM    7
Например у меня МК работает на частоте 100 Гц.

Арифмометр какой-то, а не МК :lol:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
YurkaM    7
Например у меня МК работает на частоте 100 Гц. (делители и таймер)
- причём здесь таймер? Они никаким боком не влияют на тактовую МК
Вызываю прерывание.
- как это? Вызвать можно только внешние прерывания, воздействовав на соответствующие выводы МК, все остальные вызываются событиями встроенной периферии, например: "переполнение таймера", "принятие байта" UARTом, и т.п.
Получается 100 прерываний в секунду.
- при тактовой 100Гц (...ну, допустим), прерывания никак не смогут быть 100 раз/сек, т.к. на его обработку уходит некоторое колличество тактов. Как минимум переход по вектору, возврат из подпрограммы обработки и плюс обязательно 1 команда из основной программы.
Как сделать, чтоб и в прерывании тоже, частота выполнения команд была 100 Гц, а не рабочая частота МК?
- что значит тоже... 100Гц, а не рабочая :wacko: А какая она вне прерывания, если не рабочая???

Имхо, в голове всё таки каша какая-то... - может литературку почитать для начала?.........

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0

:blink: Я говорю что у меня прерывания вызываются 100 раз в секунду. Работа в прерывании осуществляется на тактовой частоте+делитель - кто-нибудь с этим спорит? А мне надо чтоб и работа осуществлялась на частоте 100 Гц.

+(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
:blink: Я говорю что у меня прерывания вызываются 100 раз в секунду. Работа в прерывании осуществляется на тактовой частоте+делитель - кто-нибудь с этим спорит? А мне надо чтоб и работа осуществлялась на частоте 100 Гц.

+(

Как Вы не поймете, что временная диаграмма контроллера в режиме реального времени должна строиться на ТАЙМЕРАХ, а не на тактовой частоте. К тактовой частоте обращаются для микропотребления и для небольших точных юстировок частоты для тех же таймеров (УАРТа и т.п.) Тактировать МК на 100 герцах - полный абсурд...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0

Я не тактирую МК сотней Гц. :blink:

Я о чем говорю-то :angry:

Я говорю что МК у меня работает на 3686400 Гц :angry:

Прерывание вызывается 100 раз в секуду :angry:

Вот так:

TCNT0 = 112

TCCR0B = 4

Внутри самого перывания все работает на 3686400 Гц :angry:

А мне надо чтоб работало на сотне (оборотов :lol: )

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
YurkaM    7
Я не тактирую МК сотней Гц.

Вот твои слова из 31 поста

Например у меня МК работает на частоте 100 Гц

Ну и...????

Если упорно хочется реализовать эту бредятину, возьми и внутри прерывания после каждой команды сделай вызов ПП задержки в виде декремента огромной переменной (такой, чтобы получились твои 100Гц)

Ну ещё можно наверное попытаться использовать два разных внешних генератора для тактирования МК и подключать нужный ко входу XTAL1 сигналом от самого же МК. С ПИКами вроде делали такие фокусы, с АВРками незнаю... Но наверняка граблей там не мало.

Изменено пользователем YurkaM

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0
Если упорно хочется реализовать, возьми и внутри прерывания после каждой команды сделай вызов ПП задержки в виде декремента огромной переменной (такой, чтобы получились твои 100Гц)

Пример можете показать? ПП задержка, это что?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
Если упорно хочется реализовать, возьми и внутри прерывания после каждой команды сделай вызов ПП задержки в виде декремента огромной переменной (такой, чтобы получились твои 100Гц)

Пример можете показать? ПП задержка, это что?

ПП - подпрограмма... Что, плохо выспался, тормозим-с...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0

Подскажите, пожалуйста, что-то не соображу, у меня в проге (CVAVR), вызывается прерывание от каждого таймера, как сделать, чтоб между прерываниями была определенная задержка? И как расчитать эту задержку?

1 Вариант: В конце обработчика каждого прерывания, до }, ставить задержку. Тогда как расчитать?

Если скажем частота прерываний 100 раз в сек, а работа в прерывании на начальной

частоте МК?

2. В инициализации таймеров, после каждого таймера, до цикла while(1){}, ставить delay_ms(x), - х - как расчитать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

Фу ты, ну ты! Прерывания от двух и более таймеров, работающих ОДНОВРЕМЕННО не делают (иначе необходима система приоритетных прерываний с таймерами задержки, как сделано в PIC32). Зачем системе куча часов? Нужно привести все таймеры к наименьшему общему делителю и сделать один с таким интервалом пересчета. А остальное считается в разных регистрах-счетчиках простыми инкрементами в обработчике прерываний....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0

Ну как же не делают?! :huh:

Я на ATmege48 пытаюсь сделать 6 ШИМ аппаратных. Это предусмотренно. Аппаратно так сказать. В нем даже специально для этого 6 ног сконфигурированно.

Как сделать задержку, временную, так чтоб прерывания получались как и раньше, 100 раз в секунду, но между ними был временной интервал по 0,006 сек. ШИМы сдвоенны.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
Ну как же не делают?! :huh:

Я на ATmege48 пытаюсь сделать 6 ШИМ аппаратных. Это предусмотренно. Аппаратно так сказать. В нем даже специально для этого 6 ног сконфигурированно.

Как сделать задержку, временную, так чтоб прерывания получались как и раньше, 100 раз в секунду, но между ними был временной интервал по 0,006 сек. ШИМы сдвоенны.

Да нет никакой связи между ШИМами и прерываниями. ШИМ - аппаратный формирователь импульсов переменной длительности. Управляется программно. Причем здесь прерывания???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0

ОЙ! Простите меня ради Бога! Я в тормознутом каком-то состоянии, оговорился. Конечно, прерывания ни причем. Я хотел сказать, как расчитать задержку между начало каждого из 3 по 2 ШИМ сигнала?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157
ОЙ! Простите меня ради Бога! Я в тормознутом каком-то состоянии, оговорился. Конечно, прерывания ни причем. Я хотел сказать, как расчитать задержку между начало каждого из 3 по 2 ШИМ сигнала?

Аппаратные ШИМы построены на счетчиках, регистрах и компараторах(цифровых). Как счетчик сбросишь, так дьюти цикл и начнется. Сбрасывай счетчики ШИМов когда необходимо и будешь получать синхронизацию между ШИМами. Правда непонятно зачем? Разве только для когерентной попарной работы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
nightt    0
Как счетчик сбросишь, так дьюти цикл и начнется. Сбрасывай счетчики ШИМов когда необходимо и будешь получать синхронизацию между ШИМами

Что-то типа этого что-ли?

while(1)

{

do

{

TCNT0 = 0;

}while("сдесь что-то");

do

{

TCNT1 = 0;

}while("сдесь что-то");

do

{

TCNT2 = 0;

}while("сдесь что-то");

};

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    157

Ты слишком много от меня ждешь... :) Во первых я не любитель писать на Си (как говорит один умный человек, я - не СИфилитик, я АСМатик), во вторых работаю в основном с пиками... У меня вообще специфический опыт работы. Про алгоритмы - сколько хочешь, а программные реализации сходу - только на некоторые чипы (авры к ним не относятся). Я могу конечно написать пример на пике, но оно тебя разве устроит...?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас