Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR Studio, ATmega8 и частота
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
coolibin
Столкнулся c такой проблемой, есть устройство с восьмой мегой и кварцем на 16мГц, ПО к камню пишу на AVR Studio. Делаю задержку на 1 с, а проц после прошивки выдаёт 4 с, получается он работает на частоте 4 мГц. Есть ли в AVR Studio какие то настройки частоты? и если есть, то как установить частоту 16 мГц? ну, а если всё дело не в студии, то подскажите, пожалуйста, в чём.
Maik-vs
Цитата(coolibin @ Apr 12 2008, 12:41) *
Есть ли в AVR Studio какие то настройки частоты? и если есть, то как установить частоту 16 мГц? ну, а если всё дело не в студии, то подскажите, пожалуйста, в чём.

Разумеется, в опциях дебаггера. По умолчанию там 4 мгц. Так что должно быть наоборот: 4 секунды в студии и 1 секунда контроллером. Хотя, если не прошить фузы под внешний кварц, контроллер будет работать на 1 мгц от внутреннего генератора и выдаст таки 4 секунды.
sKWO
Цитата(coolibin @ Apr 12 2008, 11:41) *
Делаю задержку на 1 с

Интерессно , а как Вы тогда считаета задержку? По колличеству тактов для 16 мгц, или по прцессорному времени в студии?
coolibin
Цитата(sKWO @ Apr 13 2008, 16:13) *
Интерессно , а как Вы тогда считаета задержку? По колличеству тактов для 16 мгц, или по прцессорному времени в студии?

По расчётам по количеству тактов для 16 мгц, в реале процессор делает задержку в 4 раза дольше.
coolibin
Так что? ни у кого никаких идей?
defunct
Цитата(coolibin @ Apr 14 2008, 15:40) *
Так что? ни у кого никаких идей?

Вам задали пару уточняющих вопросов.
Потрудитесь на них ответить.

Приведите код программы, настройки проекта и настройки Fuse битов.
coolibin
Код программы и настройки Fuse битов дать сейчас не могу. А вот что касается настроек проекта, то меня как раз этот вопрос и интересует, где находжятся настройки в AVR Studio? я искал не нашел. Имеются ввиду настройки частоты.
megachip
Цитата(coolibin @ Apr 16 2008, 10:20) *
Код программы и настройки Fuse битов дать сейчас не могу. А вот что касается настроек проекта, то меня как раз этот вопрос и интересует, где находжятся настройки в AVR Studio? я искал не нашел. Имеются ввиду настройки частоты.


Debug->AVR Simulator Options->Frequency)
coolibin
- atmega8
- кварц 16МГц
- Фьюзы:
а) CKOPT = 0
б) CKSEL = E(1110)
- Debug->AVR Simulator Options->Frequency = 4мГц. Кстати, влияет ли эта частота на реальную частоту?
- Код:
Код
Wait1s:
    ldi        Cnt2,    250
    Wait1s_out:
        ldi        Cnt1,    251
        Wait1s_mid:
            ldi        Cnt0,    255
            Wait1s_in:
                nop
                dec        Cnt0
                brne    Wait1s_in
            dec        Cnt1
            brne    Wait1s_mid
        dec        Cnt2
        brne    Wait1s_out
    ret
coolibin
ХЕЛП!!!!
megachip
Цитата(coolibin @ Apr 17 2008, 19:28) *
- atmega8
- кварц 16МГц
- Фьюзы:
а) CKOPT = 0
б) CKSEL = E(1110)
- Debug->AVR Simulator Options->Frequency = 4мГц. Кстати, влияет ли эта частота на реальную частоту?


На реальную частоту не влияет.
У Вас наверно МК работает от внутреннего генератора, отпаяйте кварц и проверте будет ли работать прошивка.
sKWO
Цитата(coolibin @ Apr 17 2008, 19:28) *
- Debug->AVR Simulator Options->Frequency = 4мГц. Кстати, влияет ли эта частота на реальную частоту?

С чего это ей влиять? Это же частота отладчика (симулятора) контроллера. Он (отладчик) будет симулировать работу Вашей программы на частоте 4мгц, в Ваших настройках по умолчанию.
Вы хотите сделать занятую задержку, посчитайте какое время занимает один такт при 16мгц и легко узнать колличество тактов для определённой задержки.
На си было бы так:
Код
#define XTALL 16.0
#define delay_us(us) __delay_cycles (XTALL * us);
#define delay_ms(ms) delay_us (1000 * ms)

В Вашем же случае посмотрите внимательно сколько тактов занимает каждая команда ну и внимательно с внешними циклами повторения.
BUSU задержки я стараюсь меньше использовать, пользуюсь таймерами smile.gif
К примеру на си проджэкт Alechin Jan использованию таймера 0 атмеги128
coolibin
Цитата(megachip @ Apr 18 2008, 15:04) *
...
У Вас наверно МК работает от внутреннего генератора, отпаяйте кварц и проверте будет ли работать прошивка.

А если он работает от внутреннего геннератора, как мне его заставить работать от внешнего кварца?


Да, и ещё, а почему, если он работает на 1МГц, задержка расчитаная на 16 МГц работает 4 сек, а не 16 сек?
Палыч
Цитата(coolibin @ Apr 17 2008, 19:28) *
- atmega8 - кварц 16МГц
- Фьюзы: а) CKOPT = 0.......
- Код: ...............
1. По поводу fuses: посмотрите внимательно на таблицу 4 в DS - для 16 МГц CKOPT=1 (для вышего случая - вторая строчка снизу в таблице, последняя строка таблицы - не Ваш случай !)
2. По поводу процедуры Wait1s. Не поленился подсчитать время выполнения процедуры в тактах. У меня получилось 48 255 254 такта. При "скорости" контроллера 16 000 000 тактов в секунду получаем 48 255 254 / 16 000 000 = 3,016 секунд. У Вас контроллер делает задержку на 4 секунды... Я ошибся, или Вы грубо замеряли?
gte
Цитата(coolibin @ Apr 18 2008, 18:07) *
А если он работает от внутреннего геннератора, как мне его заставить работать от внешнего кварца?

Правильной установкой Fuse
Цитата
Да, и ещё, а почему, если он работает на 1МГц, задержка расчитаная на 16 МГц работает 4 сек, а не 16 сек?

Если посчитать задержку в симуляторе при установленной частоте симуляции 4 МГц, а запустить от внутреннего генератора на 1 МГц, то так и будет.
Считайте установки Fuse с кристалла и приведите здесь, тогда будет все видно.
ae_
Цитата(coolibin @ Apr 18 2008, 01:28) *
Код
Wait1s:
    ldi        Cnt2,    250
    Wait1s_out:
        ldi        Cnt1,    251
        Wait1s_mid:
            ldi        Cnt0,    255
            Wait1s_in:
                nop
                dec        Cnt0
                brne    Wait1s_in
            dec        Cnt1
            brne    Wait1s_mid
        dec        Cnt2
        brne    Wait1s_out
    ret

Время выполнения этого кода (((1+3)*255+3)*251+3)*250+4 = 64 194 004 такта.
При тактовой 16МГц это 4.01212525 сек.
coolibin
Да, я виноват, неправильно посчитал, заместо 3 + 1 поставил 1. Респект тебе ae_. И всем огромая благодарность за терпение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.