реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Timer1 в ATmega128 режим сравнения, в AVR Studia 4 непонятная путаница с адрессами регистров
Ph. Anatoliy
сообщение Nov 7 2009, 15:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 14-12-07
Из: г. Таганрог, Ростовская обл.
Пользователь №: 33 310



Написал следующий код. При пошаговом прохождении в AVR studia 4 значения загружаются совершенно не в те регистры.

Пдскажите пожалуйста, может у кого есть кусочек кода как на 128 меге настроить таймер 1 на срабатывание прерываения COMPA и COMPB при этом при срабатывании COMPB сбрасывать таймер счетчик в 0.

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

ISR(TIMER3_COMPA_vect)
{
  
    PORTF = 0x01;
}

ISR(TIMER3_COMPB_vect)
{
  
    PORTF = 0x03;
}


int main (void)
{
    unsigned char sreg;

    DDRF = 0xff;
    PORTF = 0x00;

    OCR3AH=0x05;
    OCR3AL=0x03;
    
    TCCR3A=0xA0;
    TCCR3B=0x02;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x18;
    ETIMSK=0x00;

    sei();
    
    while (1)
    {
    }

    return 0;
}
Причина редактирования: Оформление цитаты исходника.

Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Nov 7 2009, 16:41
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



вы противоречите сами себе хотите настроить таймер 1 а запускаете таймер 3, почему TIMSK = 0x18 а ETIMSK = 0x00. Что бы работало должно быть наоборот. Ну и что в процедуре обработчика мешает всунуть TCNT3=0
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 7 2009, 23:34
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(chief_olimp @ Nov 7 2009, 18:41) *
Ну и что в процедуре обработчика мешает всунуть TCNT3=0

Вот этого делать не надо. Интервал таймера будет "дрожжать", jitter появится когда будет несколько прерываний.


Цитата(Ph. Anatoliy @ Nov 7 2009, 17:52) *
кусочек кода как на 128 меге настроить таймер 1 на срабатывание прерываения COMPA и COMPB при этом при срабатывании COMPB сбрасывать таймер счетчик в 0.

Если вас устроит сброс счетчика таймера в 0 при достижении COMPA вместо COMPB смотрите пример ниже:

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

SIGNAL (SIG_OUTPUT_COMPARE1A)
{
    static char x = 0;
    PORTA = x++;
}

SIGNAL (SIG_OUTPUT_COMPARE1B)
{
    static char x = 0;
    PORTB = x++;
}


static void Timer1Init(void)
{
    OCR1A =  500;
    OCR1B =  200;

    TIMSK |= (1 << OCIE1A) | (1 << OCIE1B);
    TCCR1B = (1 << CS10) | (1 << WGM12); // no prescaler + CTC1
}


void main(void)
{
    Timer1Init();
    sei();
    for(;;);
}
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Nov 8 2009, 08:18
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



SIGNAL уже давно устарел, хотя и работает. И говоря про режим сравнения по А или В я использую строку вида
Код
ISR(TIMER3_COMPB_vect)
{
  TCCR3В += 0xA0;
}
И не нужно сам таймер обнулять. Он просто будет считать дальше.
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 8 2009, 17:09
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(chief_olimp @ Nov 8 2009, 10:18) *
TCCR3В += 0xA0;

И что бы это значило?
Насилуете ICNC и пишете "1" в reserved bit?

• Bit 5 – Reserved Bit
This bit is reserved for future use. For ensuring compatibility with future devices, this bit
must be written to zero when TCCRnB is written.


Цитата
И не нужно сам таймер обнулять. Он просто будет считать дальше.

Если не видите разницы в частоте между счетом до 500 и счетом до 65535... то лучше ничего не советуйте.
Go to the top of the page
 
+Quote Post
Ph. Anatoliy
сообщение Nov 8 2009, 17:45
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 14-12-07
Из: г. Таганрог, Ростовская обл.
Пользователь №: 33 310



Прошу прощения за путаницу. В коде действительно таймер 3 (просто первоначально делал на 1ом, а когда встретил глюк, попробовал сделать тоже самое на 3ем). Хотел отладить на АВР студии и нашел прикол с адресацией регистров (см. картинки выше). Пожалуйста, если у кого-нибудь стоит АВР студия 4 создайте подобный проект на 128 мегу и посмотрите на адреса регистров.

Может в 16 битных таймерах идет заполнение регистров через буфер ?

defunct - спасибо за код, сейчас попробую.
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Nov 8 2009, 19:48
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



Цитата(defunct @ Nov 8 2009, 21:09) *
И что бы это значило?

Ну погарячился чего уж там laughing.gif , бывает wacko.gif . А вы не подумали и не исправили smile3009.gif . Я имел ввиду строку вида
Код
OCR3B += 0xA0;
т.е. при каждом обращении будет увеличиваться регистр сравнения. А счетчик будет считать по кругу. Таким образом довольно легко можно использовать все три прерывания сравнения. yeah.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 8 2009, 23:37
Сообщение #8


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(chief_olimp @ Nov 8 2009, 21:48) *
А вы не подумали и не исправили smile3009.gif . Я имел ввиду строку вида
Код
OCR3B += 0xA0;

Точно smile.gif
Cложновато было представить, что TCCRxB там в результате опечатки появился.

Цитата
т.е. при каждом обращении будет увеличиваться регистр сравнения.

Да, это тоже вариант
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 9 2009, 00:19
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Ph. Anatoliy
У вас какая-то левая студия. На вкладке About никогда не встречал ссылку ни на какой Tenison.
На моей рабочей AvrStudio 4.17 build 666 адреса TCCR1B = 0x2E TCNT1H = 0x2D OCR1AL = 0x2A OCR1BH=0x29
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Nov 9 2009, 06:38
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



Цитата(V_G @ Nov 9 2009, 04:19) *
Ph. Anatoliy
У вас какая-то левая студия. На вкладке About никогда не встречал ссылку ни на какой Tenison.
На моей рабочей AvrStudio 4.17 build 666 адреса TCCR1B = 0x2E TCNT1H = 0x2D OCR1AL = 0x2A OCR1BH=0x29

Ужас у меня тоже левая. Я ее качал на каком то www.atmel.com. наверное правильная на рапиде лежит wacko.gif . Извените bb-offtopic.gif

Сообщение отредактировал chief_olimp - Nov 9 2009, 06:38
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
V_G
сообщение Nov 9 2009, 06:58
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Значит, давно не обновлялись!Прикрепленное изображение
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01466 секунд с 7
ELECTRONIX ©2004-2016