Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 841
1

Генератор меандра на Attiny13

03.05.2020, 11:14. Показов 2912. Ответов 4

Доброго времени суток! Необходимо генерировать прямоугольную частоту около 1000 Hz ножкой микроконтроллера Attiny13.

Вроде ничего сложного, настраиваем 8 битный таймер и в прерывании по переполнение инвертируем ногу, вроде посчитал. Загнал все это дело в Proteus, а на ножке показывает порядка 36 Гц. Проверял встроенным частотомером.

Тактирование от внутреннего осциллятора на 9,6 МГц, CKDIV8 отключен. Считаю следующим образом:
256 - 9.6 MHz / 1024 / 1000 Hz = 177,785 = ~246,6
Настройка микроконтроллера:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void mcu_init(void) {
    
    //Crystal Oscillator division factor: 1;
    #pragma optsize-
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
 
    //Port B инит
    DDRB |= (1<<DDB0);
    PORTB |= (0<<PORTB0);
 
    TCNT0 = 247;
    
    // Коэффициент делителя частоты 1024
    TCCR0B = (1 << CS02) | (1 << CS00);
    
    // Разрешение прерывания заполнения счётчика
    TIMSK0 |= (1 << TOIE0);
 
    sei();
}
Прерывание:
C
1
2
3
4
5
6
7
#define PULSE PINB0
 
ISR(TIM0_OVF_vect)
{
    TCNT0 = 247;
    PORTB ^= _BV(PULSE);
}
Повторюсь, генерация происходит, но в симуляторе ни о каких 1000Гц говорить не приходиться. В железе пока даже не проверял.
Правильно ли я значение переполнения посчитал? И вообще настроил таймер?

Добавлено через 12 минут
Сорян, ошибся в названии темы... не 2313, а Attiny13.

Добавлено через 1 час 13 минут
так, со значением 251 - ногой получилось дрыгать с частотой ~935 Гц. Почему так?
0

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

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2020, 11:14
Ответы с готовыми решениями:

Формирование меандра (8051)
Подскажите или посоветуйте где можно прочесть. Начали изучение микроконтроллера 8051. Задача:...

STM32F4 генерация меандра
Помогите, пожалуйста, сгенерировать меиндр с частотой 8 МГц на таймере- счетчике, включенном в...

Усилитель на транзисторах для 1МГц меандра
Добрый день. Нужна схема для усиления меандра без искажений на частоте 1МГц и ниже, коэффициент...

Генерация АМ-импульсов с огибающей в виде меандра
Проблема с генерацией АМ-импульсов (Скважность равна 2). Модулируя огибающую, заданную через...

4
6674 / 2657 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
03.05.2020, 18:06 2
9,6 MHz = 9600000 = 128 * 75 * 1000
Итого тебе надо предделить частоту на 128, а в счетчик пихать байт 256 - 75 = B5 (шестнадцатеричное)
и тогда ровно штука герц должна выходить.
0
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 841
03.05.2020, 18:42  [ТС] 3
У Attiny13 T0 вроде нет предделителя на 128?
0
6674 / 2657 / 366
Регистрация: 17.02.2013
Сообщений: 3,908
03.05.2020, 19:34 4
Лучший ответ Сообщение было отмечено Jman как решение

Решение

Это надо даташит курить. Но по первому взгляду делитель на 64 есть и предделитель на 2 есть. Итого деление на 128 есть.

Да даже и без предделителя. Поделим на 64 и тогда имеем клочение таймера частотой 9,6 МГц / 64 = 150 КГц. Что, если по переполнению выставлять таймер на значение 256 -150 = 6A (шестнадцатеричное), даст переполнение каждые 150 клоков, т.е. раз в миллисекунду. А это и есть твои 1000 Гц ровно. Плюс-минус говенность встроенного генератора без кварца.
1
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 841
04.05.2020, 07:57  [ТС] 5
Ethereal, спасибо за мат часть! Решено!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2020, 07:57

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

Создать два меандра разной мощности
Помогите создать два меандра разной мощности а именно первый на частоте 1МГЦ с мощностью...

Поиск четности по вертикали(поиска меандра в столбце)
Приветствую, может кто-нибудь подсказать как в ЦП найти последовательность в столбце ,размерность 1...

Использование TIMER в STM32 для генерации меандра. Вопрос.
Собственно второй день бодаюсь с сабщем. в Гугле - полный голяк по сабжу. хотя насиловал запрсную...

Формирователь меандра с частотой 36 кГц (8051, Proteus, ASM)
Задача мне была задана такая: на выходе порта P1.1 сформировать меандр с частотой 36 кГц, тактовая...

Генерация синуса, трапеции, меандра и треугольного сигнала WAV
Здравствуйте, подскажите пожалуйста. Нашёл пример для записи в WAV синусоидального сигнала. for...

Код для генерации синуса (меандра, трапеции, треугольного сигнала), используя преобразования Фурье
Добрый день, подскажите пожалуйста, как практическим способом реализовать генерацию сигналов с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.