Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 28
1

Не работает таймер по совпадению (atmega8, atmel studio 6)

23.09.2016, 16:32. Показов 2856. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Почемуто не работает таймер в режиме по совпадению (делал по примеру, вроде все регистры выставил), тестирую в Proteus.
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
25
26
27
28
#define F_CPU 16000000
#include <avr/io.h>
#include <avr/interrupt.h>
 
ISR( TIMER1_OVF_vect )
{
  TCNT1 = 0; //выставляем начальное значение TCNT1
  if( PINB & ( 1 << PB0 ) ) {
    PORTB &= ~( 1 << PB0 );
  }
  else {
    PORTB |= ( 1 << PB0 );
  }
}
 
int main()
{
    DDRB = ( 1 << PB0 );  // настраиваем PB0 на выход
    TCCR1B = (1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10); // настраиваем делитель
    OCR1A = 0x3D09;
    TIMSK |= (1<<OCIE1A); // разрешаем прерывание по переполнению таймера
    TCNT1 = 0;        // выставляем начальное значение TCNT1
    sei();  
    while(1){
        
    }             // вечный цикл
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2016, 16:32
Ответы с готовыми решениями:

Работа с АЦП (ATMega8, Atmel Studio 6.2)
Есть схема, которая выводит уровень дыма в воздухе, то есть показывает уровень пожарной опасности....

Поддержка списочных структур в Atmel Studio 6.2 (Atmega8)
Вопрос в следующем. Имеется ли поддержка динамических структур данных при программировании...

Таймер в CTC режиме (ATTiny2313, Atmel Studio 6)
Пытаюсь запустить таймер 1 в CTC режиме. Таймер не останавливается на нужном пороге. Atmel Studio...

Не работает SPI на Atmega 128 в Atmel Studio 7
Всем доброго времени суток. Столкнулся со следующей проблемой. Нужен spi для Atmega 128 на Atmel...

8
4 / 4 / 2
Регистрация: 01.06.2016
Сообщений: 18
23.09.2016, 20:13 2
Лучший ответ Сообщение было отмечено kolevan как решение

Решение

Вместо ISR( TIMER1_OVF_vect ), попробуй написать ISR(TIMER1_COMPA_vect)
1
0 / 0 / 0
Регистрация: 12.06.2012
Сообщений: 28
26.09.2016, 09:46  [ТС] 3
Спасибо, как обычно оказалось все дело в невнимательности.
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
26.09.2016, 09:52 4
Цитата Сообщение от kolevan Посмотреть сообщение
C
1
2
3
4
5
6
if( PINB & ( 1 << PB0 ) ) {
    PORTB &= ~( 1 << PB0 );
  }
  else {
    PORTB |= ( 1 << PB0 );
  }
не проще написать
C
1
PORTB^= ( 1 << PB0 );
0
1176 / 653 / 111
Регистрация: 15.05.2012
Сообщений: 4,015
26.09.2016, 10:09 5
ValeryS, PIN PORT не одно и то же.

Добавлено через 1 минуту
И что-то не пойму - то подтянуть, то не подтянуть внутренне. В чём прикол?

Добавлено через 43 секунды
Он ещё и настроен как выход.

Добавлено через 1 минуту
Если выход, то при чём тут PIN?

Добавлено через 1 минуту
ValeryS, ваша строчка не то, что проще, а просто верная получается.
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
26.09.2016, 10:10 6
Цитата Сообщение от pyzhman Посмотреть сообщение
PIN PORT не одно и то же.
в курсе, как бы
Цитата Сообщение от pyzhman Посмотреть сообщение
И что-то не пойму - то подтянуть, то не подтянуть внутренне. В чём прикол?

Он ещё и настроен как выход.
в том и прикол что выход
Установить 1, снять 1, на выходе
0
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
26.09.2016, 13:42 7
Цитата Сообщение от ValeryS Посмотреть сообщение
в том и прикол что выход
Установить 1, снять 1, на выходе
дабы быть избыточным - в AVR в режиме OUTPUT состояние PINx ноги равно состоянию бита регистра PORTx. Единственное условие неравенства может быть в случае, если вы читаете состояние PINB сразу после установки PORTB, т.к. устновка на выход выполнится только через такт после команды. Но, если учесть эту особенность - биты PORTx и PINx будут равны при чтении, если с выходом все в порядке, и он выставлен на выход.

Добавлено через 56 секунд
Цитата Сообщение от pyzhman Посмотреть сообщение
просто верная получается.
Верная, просто код ТС'а будет работать немножко быстрее, в прерывании.
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
26.09.2016, 14:11 8
Цитата Сообщение от Voland_ Посмотреть сообщение
код ТС'а будет работать немножко быстрее, в прерывании.
не понял
та же чтение-модификация-запись(правда в АВРкак это скрыто)
плюс чтение плюс ветвление
на вскидку не вижу выигрыша
0
1976 / 1275 / 130
Регистрация: 04.01.2010
Сообщений: 4,607
26.09.2016, 20:34 9
Цитата Сообщение от ValeryS Посмотреть сообщение
не понял
ну, в общем-то да, ваш код и код ТС одинаковые. Я не даром подумал о конвеере и атомарных операциях и придумал вот такое:
Assembler
1
2
3
4
sbis PINB, 1;
sbi PORTB, 1;
sbic PINB, 1;
cbi PORTB, 1;
... См. ДШ (стр.54). Там есть пример, что если инструкция чтения находится СРАЗУ после функции записи, то чтение входа может быть неправильным, т.к. выходное значение еще не выставится в "цифре". Что правда, я это не проверял, но подозреваю, что представленный мной код верен.

ЗЫ2: я постоянно путаю, что мега8 - старый чип, и в нем нет такой удобной фичи, как запись бита PINx.y, которая триггерит выход )). Подобной фичей я пользовался в тиньках 25/45/85 .
2
26.09.2016, 20:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2016, 20:34
Помогаю со студенческими работами здесь

Какая версия крайняя Atmel Studio работает на win xp ?
Мда

Не работает код генерации ШИМ в ATMel Studio 6 (Attiny44a)
Здравствуйте! Нужно написать программу для генерации ШИМ импульсов для МК Attiny44a. Начал...

AVR ассемблер. объявление массива .db в макросе .macro не работает!? Atmel Studio 7
.CSEG ;разумеется .macro lcd_pr .if @0==6 ; .org 0x11ff - и так пытался dat: .db...

Какие существуют аналоги МК Atmel (Atmega8)?
Интерсую аналоги микроконтролеров фирмы атмел атечественногоь производства или китай. Подскажите...

Прерывания по совпадению, СТС, 16 разрядный таймер, Atmega32
Добрый день. Делаю небольшой простенький генератор сигналов. На данный момент код написан на...

Почему AVR Studio 4, а не Atmel Studio 6?
По какой причине большинство специалистов по AVR микроконтроллерам в основном используют AVR Studyo...

Таймер, режим CTC (CVAVR, Atmega8)
Продолжаю мучать таймеры, ну или они меня... Частота работы мк=8Мгц. Предделитель=1024. Частота...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru