roboforum.ru

Технический форум по робототехнике.
Текущее время: 18 фев 2025, 22:58

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 15:36 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Configurator писал(а):
Честно сказать, я так и невкурил, как мне выставить точную частоту 2ШИМ в 50 Гц.
Этим что, никто не занимается? Ребят, вы как с Луны свалились.
Вы можете подсказать, как это по шагам сделать, хоть примерно.

Так ты определись с частотой МК в начале.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 15:53 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
Цитата:
Default Clock Source
The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed,
resulting in 1.0MHz system clock.


Ну взял и всю малину испортил! А так бы человек никогда и не узнал, что такое CKDIV! ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 16:14 
Не в сети

Зарегистрирован: 28 ноя 2007, 14:57
Сообщения: 11
Значит, если я пользуюсь ШИМом, от внутреннего генератора, то начальную частоту я могу поделить только на 1024, 256, 64, 8. Так?

Если я подключаю кварц, то кроме пределителя я еще могу пользоваться TCNT0?
Так?
Для точной доводки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 16:29 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
Не. Мухи отдельно, котлеты отдельно!
Цитата:
Если я подключаю кварц, то кроме пределителя я еще могу пользоваться TCNT0?

Делитель ШИМа работает независимо от основного генератора. Основной генератор делится отдельно (CKDIV), ШИМ делится отдельно (TCNT и проч).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 16:45 
Не в сети

Зарегистрирован: 28 ноя 2007, 14:57
Сообщения: 11
Цитата:
Делитель ШИМа работает независимо от основного генератора. Основной генератор делится отдельно (CKDIV), ШИМ делится отдельно (TCNT и проч).

А вот и нет! :shock:
Ппри работе с ШИМ, мы можем делить только пределителем! На 1024, 256, 64 и 8! :evil:
TCNT0 катит только с таймерами, если задействовано прерывание! С ШИМ он не работает! :evil:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 17:03 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
Или я туплю или одно из двух. ШИМ работает от таймера. Все зависит от режима (стр 104, 133, 157, ДШ ATmega48/88/168) Я через TCNT не делал, не зачем было! Вот мой код вывода звука через ШИМ.

Код:
#include <avr/pgmspace.h>
#include <avr/interrupt.h>

unsigned int    sound = 0;
unsigned char   *data;

#define DIV_0           ((0 << CS22) | (0 << CS21) | (1 << CS20))
#define DIV_8           ((0 << CS22) | (1 << CS21) | (0 << CS20))
#define DIV_64          ((0 << CS22) | (1 << CS21) | (1 << CS20))
#define DIV_256         ((1 << CS22) | (0 << CS21) | (0 << CS20))
#define DIV_1024        ((1 << CS22) | (0 << CS21) | (1 << CS20))

ISR(SIG_OUTPUT_COMPARE3A) {
    sei();

    if (sound) {
        if (sound--) {
            OCR1B = pgm_read_byte(data++);
        } else {
            TCCR1A = 0;
            TCCR1B = 0;
            TCCR3B = 0;
            DDRE &= ~(1 << PE2);
        }
    }
    TCNT3 = 0;
}

void SoundPlay(unsigned char* wave, unsigned int wave_size) {
    if (!sound) {
        data = wave;
        sound = wave_size;

        DDRE |= (1 << PE2);
        TCCR1A = (1 << WGM10) | (1 << COM1B1);
        TCCR1B = (1 << WGM12) | DIV_0;

        TCCR3A = 0;
        TCCR3B = DIV_8;
        OCR3A = 125;
        ETIMSK |= (1 << OCIE3A);
        TCNT3 = 0;
    }
}


ATmega162, внутрений RC, CKDIV=1 (8мгц)
На 1 таймере сидит ШИМ (32 кгц), на 3 - таймер для его обновления (8 кгц)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 17:03 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
раз почти разобрались вставлю и свои 20 копеек, разбираясь как же работает CKDIV выяснилось влияние этого фуза только на запуск МК, при высоких частотах ставится чтоб затормозить МК в 8 раз. Разбирался почти как
Strijar писал(а):
Я сильно не задумываясь - выставил минимальную частоту таймера - повесил в обработчике "мигалку" и засек секундомером частоту.

пытался выставить 1/8/16 секунд и установкой фузов изменить частоту мигания. так вот установка в 1 или 0 CKDIV не дала ни какой разницы на мигание лампочки.
а установка предделителя как раз давала такой эффект.
вот мой первый топик:
viewtopic.php?f=2&t=2891


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 17:08 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
Код:
    /* 8 MHz */

    CLKPR = (1 << CLKPCE);
    CLKPR = 0;


И не нужно никаких фузов...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 17:10 
Не в сети

Зарегистрирован: 28 ноя 2007, 14:57
Сообщения: 11
Понял я твою кодировку. У тебя стандартные пределители. Вот ты их и используешь. Точной доводки нет. А она и не нужна, если разобраться. Редко это бывает, когда нужна определенная частота ШИМ. Для определенной частоты нажен определенный кварц, чтоб поделив его на пределитель, получить требуемую.
:Yahoo!:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 17:15 
Не в сети
Аватара пользователя

Зарегистрирован: 03 авг 2007, 19:43
Сообщения: 1437
Откуда: Екатеринбург
прог. языки: Си, асм со словарем
во во, так теперь и делаю. мастер кодевижена сам это же и вставляет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 17:16 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
В ДШ на указанных страницах черным по белом написано, что TOP ШИМа (его частота) может зависеть от OCRхA или ICRx ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 30 ноя 2007, 18:56 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Вот сделал 50 Гц 2х ШИМ на Таймер_0 в ATmega48 от внутреннего генератора на 8 МГц
с пояснениями, расчетами и симуляцией в AVR Studio - всё в архиве.

На PD5 шим инвертированый а на PD6 "обычный".

Настройка прерываний и ШИМ сделана с помощью мастером CVAVR !

Что такое ШИМ - задача 8 краткого курса - http://www.avr123.nm.ru/z8.htm


Вложения:
m48_pwm_timer0.rar [7.96 КиБ]
Скачиваний: 45
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 03 дек 2007, 15:49 
Не в сети

Зарегистрирован: 28 ноя 2007, 14:57
Сообщения: 11
Выставил фьюзы. Хотел оставить 13 000 Гц.
Чип перестал отвечать.
Выставил:
CKSEL0 = 0
CKSEL1 = 0
CKSEL2 = 0
CKSEL3 = 0

CKDIV8 = 1


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 03 дек 2007, 17:47 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Configurator писал(а):
Выставил фьюзы. Хотел оставить 13 000 Гц.


Это ваши фантазии ???

Configurator писал(а):
Чип перестал отвечать.
Выставил:
CKSEL0 = 0
CKSEL1 = 0
CKSEL2 = 0
CKSEL3 = 0

CKDIV8 = 1


Надеюсь такую комбинацию в не у меня вычитали - http://www.avr123.nm.ru/07.htm

Нет чтоб вначале спросить а потом сделать ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 2PWM
СообщениеДобавлено: 04 дек 2007, 20:46 
Не в сети
Аватара пользователя

Зарегистрирован: 28 авг 2006, 17:09
Сообщения: 664
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов
avr123.nm.ru писал(а):
Нет чтоб вначале спросить а потом сделать ...

А нафига? Ответ то ясен ;) А так человек Познает Мир...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 32 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO